Multi AI Agent System with crewAI
CrewAI Framework를 통해 Multi-Agent 생성하고 다중 Task를 Agent들과 상호 연계해 목표에 가까운 답을 구한다.
2. AI Agents
(1) Agents 역할
agent가 task를 수행하고, 그 결과를 answer로 반환한다. 결과가 제대로 되지 않을 때 agent는 다시 task를 수행할 수 있다.
(2) Multi-Agent Systems
- concept(task)를 간단한 구조로 분해
- system(prompt)를 함께 사용할 패턴 제공
- 에이전트가 사용할 수 있는 도구 / 기술 제공
- 에이전트를 위해 사용할 준비가 된 도구 / 기술 제공
- 에이전트를 위해 사용할 수 있는 모델 제공
- 에이전트를 제작하기 위한 사용자 정의 도구를 제작하는 모델 제공
3. Create agents to research and write an article
L2 : 리서치 및 기술 블로그 작성 agent 생성
멀티 에이전트 시스템의 기본 개념을 소개하고 crewAI 프레임워크에 대한 개요를 얻게 됩니다.
#!pip install -q crewai==0.28.8 crewai_tools==0.1.6 langchain_community==0.0.29
# Warning control
import warnings
warnings.filterwarnings('ignore')
# import
from crewai import Agent, Task, Crew
LLM agents는 OpenAI의 gpt-3.5-turbo를 사용합니다. crewAI는 다른 인기 있는 LLM 모델을 agent로 사용할 수 있습니다
Optional Note
1. [Hugging Face (HuggingFaceHub endpoint)]
from langchain_community.llms import HuggingFaceHub
llm = HuggingFaceHub(
repo_id="HuggingFaceH4/zephyr-7b-beta",
huggingfacehub_api_token="<HF_TOKEN_HERE>",
task="text-generation",
)
- [Mistral API]
OPENAI_API_KEY=your-mistral-api-key
OPENAI_API_BASE=https://api.mistral.ai/v1
OPENAI_MODEL_NAME="mistral-small"
- [Cohere]
from langchain_community.chat_models import ChatCohere
# Initialize language model
os.environ["COHERE_API_KEY"] = "your-cohere-api-key"
llm = ChatCohere()
Agents 생성하기¶
- 에이전트를 정의하고
role
,goal
,backstory
를 제공합니다. - LLMs는 역할을 할 때 더 잘 수행된다는 것을 알 수 있었습니다.
Agent: Planner¶
Note: _multiple strings_을 사용하는 것과 _triple quote docstring_을 사용하는 것의 차이점은, whitespaces와 newline characters를 추가하지 않아도 되기 때문에 LLM에 전달하기에 더 잘 포맷팅 됨.
varname = "line 1 of text"
"line 2 of text"
versus the triple quote docstring:
varname = """line 1 of text
line 2 of text
"""
planner = Agent(
role="Content Planner",
goal="{topic}에 대한 사실적이고 매력적인 콘텐츠를 계획합니다.",
backstory="너는 블로그 글을 계획하고 있습니다. "
"주제는 {topic}입니다. "
"관객이 무언가를 배우고 "
"정보에 기반한 결정을 내릴 수 있도록 "
"도와주는 정보를 수집합니다. "
"너의 작업은 이 주제에 대한 글을 쓰는 "
"콘텐츠 작가의 기반이 됩니다.",
allow_delegation=False,
verbose=True
)
#### Agent: Writer
writer = Agent(
role="컨텐츠 작가",
goal="통찰력 있고 사실적인 글을 쓰세요."
"opinion piece {topic}에 대한 의견을 쓰세요. ",
backstory="너는 작가로서 글을 쓰고 있습니다. "
"새로운 opinion piece를 주제로 쓰세요: {topic}. "
"너는 컨텐츠 플래너의 작업을 기반으로 글을 쓰고 있습니다. "
"너는 아웃라인의 주요 목표와 방향을 따르며, "
"컨텐츠 플래너가 제공한 정보를 바탕으로 "
"객관적이고 중립적인 통찰력을 제공합니다. "
"너는 주장이 아닌 객관적인 주장을 제공하고, "
"컨텐츠 플래너가 제공한 정보로 그것을 뒷받침합니다. "
"너는 주장이 객관적인 주장과 대조되는 경우 "
"너의 의견을 인정합니다.",
allow_delegation=False,
verbose=True
)
#### Agent : Editor
editor = Agent(
role="편집자",
goal="편집자는 주어진 블로그 글을 "
"글쓰기 스타일에 맞게 편집합니다.",
backstory="너는 컨텐츠 작가로부터 블로그 글을 받는 편집자입니다. "
"너의 목표는 블로그 포스트를 검토하여 "
"저널리즘의 최고의 실천 방법을 따르고, "
"의견이나 주장을 제공할 때 균형있는 관점을 제공하며, "
"가능한 경우 주요 논란이되는 주제나 의견을 피하는 것입니다.",
allow_delegation=False,
verbose=True
)
#### Agent : Translator
translator = Agent(
role="번역가",
goal="번역가는 주어진 글을 다른 언어로 번역합니다.",
backstory="너는 편집자로부터 블로그 글을 받는 번역가입니다. "
"너의 목표는 블로그 포스트를 다른 언어로 번역하는 것입니다. "
"번역은 원본의 의미를 최대한 유지하면서 "
"독자가 쉽게 이해할 수 있도록 하는 것이 중요합니다.",
allow_delegation=False,
verbose=True
)
Task 생성
- Task를 정의하고,
description
,expected_output
그리고agent
를 제공하세요.
#### Task: Plan
plan = Task(
description=(
"1. {topic}에 대한 최신 트렌드, 주요 플레이어 및 주목할만한 뉴스를 우선 순위로 지정합니다.\n"
"2. 관객을 식별하고, 그들의 관심사와 고통 포인트를 고려합니다.\n"
"3. 소개, 주요 포인트 및 행동 요청을 포함한 자세한 콘텐츠 개요를 개발합니다.\n"
"4. SEO 키워드 및 관련 데이터 또는 소스를 포함합니다."
),
expected_output="이해하기 쉽고 효과적인 글을 작성하기 위한 계획서를 제공합니다. "
"아웃라인, 관객 분석, SEO 키워드 및 리소스를 포함합니다.",
agent=planner,
)
#### Task : Write
write = Task(
description=(
"1. {topic}에 대한 매력적인 블로그 글을 작성하세요.\n"
"2. SEO 키워드를 자연스럽게 통합하세요.\n"
"3. 섹션/부제목은 매력적인 방식으로 "
"적절하게 명명되어 있습니다.\n"
"4. 글은 매력적인 소개, 통찰력있는 본문, "
"요약적인 결론으로 구성되어 있습니다.\n"
"5. 맞춤법 오류 및 브랜드 음성과 일치하는지 "
"검토하세요."
),
expected_output="markdown 형식으로 작성된 잘 쓰여진 블로그 글을 제공합니다. ",
agent=writer,
)
#### Task : Edit
edit = Task(
description=("주어진 블로그 글을 교정하여 "
"문법 오류를 확인하고 "
"브랜드 의견과 일치하는지 확인하세요."),
expected_output="markdown 형식의 잘 쓰여진 블로그 글, "
"각 섹션은 2~3 단락으로 구성되어 있습니다.",
agent=editor
)
#### Task : Translate
translate = Task(
description=("주어진 블로그 글을 한글로 번역합니다."
"구어체와 경어체를 섞어서 번역하세요."),
expected_output="한국어로 번역된 블로그 글을 제공합니다.",
agent=translator
)
Crew 생성하기
- crew Agents 생성하기
- 에이전트가 수행할 작업을 전달합니다.
- 참고: 이 간단한 예제에서, 작업은 순차적으로 수행됩니다(즉, 서로 의존적이므로 작업 목록의 _order_가 중요합니다).
verbose=2
는 실행의 모든 로그를 볼 수 있습니다.
crew = Crew(
agents=[planner, writer, editor, translator],
tasks=[plan, write, edit, translate],
verbose=2
)
Crew 실행하기¶
result = crew.kickoff(inputs={"topic": "Artificial Intelligence"})
from IPython.display import Markdown
Markdown(result)
AI의 파도를 타며: 현재의 추세와 주요 플레이어들¶
AI는 건강관리, 사이버 보안, 금융 등에서 주요 수혜자가 되며 중요한 발전을 이루고 있습니다. 건강관리 분야에서 AI는 진단과 환자 관리를 더 효율적으로 만들고 있습니다. 금융 분야에서는 AI 알고리즘이 거래 전략과 위험 관리를 재조직하고 있습니다. 사이버 보안 분야에서는 AI가 실시간으로 위협을 감지하고 완화하는 강력한 힘이 되고 있습니다.
AI 혁명을 주도하고 있는 주요 플레이어들로는 Google, IBM, Microsoft, Amazon이 있습니다. 그들의 광범위한 연구와 AI의 혁신적인 응용은 경계를 뛰어넘고 있습니다. 최근에 주목할 만한 사례로는 구글의 AI 프로그램인 AlphaGo가 바둑에서 인간을 능가한 것이 있습니다. 이는 이전에는 불가능하다고 여겨졌던 일입니다.
AI와 함께 미래를 풀어나갈 것¶
AI의 현재 응용 프로그램은 인상적이지만, 그 미래의 가능성은 더 놀라울 것입니다. AI의 빠른 발전은 기계가 스스로 학습하고, 적응하며, 독자적으로 결정을 내릴 수 있는 미래를 약속하고 있습니다. 그러나, AI의 복잡성과 개인 정보 보호와 보안과 관련된 우려는 여전히 유효한 문제점입니다. AI 환경을 탐색하면서, AI의 잠재력을 활용하고 이러한 도전을 극복하는 사이의 균형을 잡는 것이 중요합니다.
행동을 촉구하다¶
계속해서 진화하는 AI 분야에 대해 알아가세요. AI의 미래는 새로운 추세, 응용 프로그램, 돌파구가 정기적으로 등장하며, 엄청난 가능성을 안고 있습니다. 기술 애호가, AI 연구원, 비즈니스 전문가로서, 여러분의 통찰력과 경험은 AI 대화를 풍요롭게 만들 수 있습니다.
기억하세요, 인공지능은 단순한 추세가 아닙니다. 그것은 혁명입니다. 그 일부가 되기 위해 준비가 되셨나요?
사용된 키워드: 인공지능, AI 추세, 건강관리에서의 AI, 금융에서의 AI, 사이버 보안에서의 AI, Google의 AlphaGo, AI의 주요 플레이어들.
출처: AI 연구 논문, 기술 뉴스 웹사이트, AI 저널, Google, IBM, Microsoft, Amazon의 공식 AI 웹사이트.
'Tools' 카테고리의 다른 글
[crewAI] Multi-agent Custormer Support Automation (3) (0) | 2024.05.25 |
---|---|
[CrewAI] Key elements of AI agent (2) (0) | 2024.05.21 |
[Github] Github PR(pull request) template 만들어 주는 사이트 (0) | 2024.03.05 |
[Gemini] github action에서 gemini api 사용시 _CLOUD_SDK_MISSING_CREDENTIALS Auth Error (0) | 2024.03.03 |
[NotesOllama] Mac Default Memo Application + OpenLLM(Custom) (0) | 2024.02.25 |