Building Agentic RAG with LlamaIndex - 3. Building an Agent Reasoning Loop

jihyelee·2024년 6월 1일
0
  • 1, 2번 강의에서 다룬 예시는 단일 프로세스
    • 쿼리가 주어지면 → 올바른 도구와 함수 인자를 선택하고 → 답변을 얻는 방식
  • 여러 번의 추론 프로세스가 필요할 수 있음 (loop)
    • e.g .여러 단계를 필요로 하는 복잡한 질문
    • e.g. 명확화(clarification)이 필요한 모호한 질문

Agent

Agent Worker

  • 하나의 태스크의 단계적 실행을 조정
  • 인풋이 주어지면 다음 단계를 결정하는 역할
  • 기존에 존재하는 대화 이력, 메모리, 전달 받은 상태(state)와 현재 사용자의 인풋을 모두 사용
    • 내부적으로 상태를 저장하지는 않음
  • 도구를 사용하여 최종 답변을 제공할지 말지를 결정

Agent Runner

  • 전반적인 태스크 관리(dispatch) 역할
    • 상태 저장 (기존의 대화 이력 포함)
    • 태스크들 생성 및 유지
    • 태스크들의 단계적 실행
  • 주어진 태스크에 대해 AgentWorker를 호출하고 결과를 수집 (= AgentWorkr의 실행을 orchestrate)
  • 최종 답변을 사용자에게 전달
  • 사용자가 상호작용할 수 있는 high-level 인터페이스
from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.core.agent import AgentRunner
 
agent_worker = FunctionCallingAgentWorker.from_tools(
    [vector_tool, summary_tool],
    llm=llm,
    verbose=True # 중간 결과를 확인하기 위해 필요
)
agent = AgentRunner(agent_worker)
 
response = agent.query( # query는 상태를 저장하지 않음
    "Tell me about the agent roles in MetaGPT, "
    "and then how they communicate with each other."
)
 
# 출력 결과
Added user message to memory: Tell me about the agent roles in MetaGPT, and then how they communicate with each other.
=== Calling Function ===
Calling function: summary_tool_metagpt with args: {"input": "agent roles in MetaGPT"}
=== Function Output ===
The agent roles in MetaGPT include Product Manager, Architect, Project Manager, Engineer, QA Engineer, Developer, Tester, Sirui Hong, Mingchen Zhuge, Jonathan Chen, Xiawu Zheng, Yuheng Cheng, CRUD agent, and recommendation engine development agent. Each role has specific responsibilities and tasks tailored to different aspects of the software development process within the MetaGPT framework.
=== Calling Function ===
Calling function: summary_tool_metagpt with args: {"input": "how agents communicate with each other in MetaGPT"}
=== Function Output ===
Agents in MetaGPT communicate with each other through structured communication interfaces, utilizing a publish-subscribe mechanism and a shared message pool. They exchange structured messages transparently, allowing agents to publish information and access messages from other entities. Additionally, agents can subscribe to relevant messages based on their role profiles, enabling them to extract information that aligns with their specific interests within the framework.
=== LLM Response ===
In MetaGPT, the agent roles include Product Manager, Architect, Project Manager, Engineer, QA Engineer, Developer, Tester, Sirui Hong, Mingchen Zhuge, Jonathan Chen, Xiawu Zheng, Yuheng Cheng, CRUD agent, and recommendation engine development agent. These roles have specific responsibilities tailored to different aspects of the software development process within the MetaGPT framework.
 
Agents in MetaGPT communicate with each other through structured communication interfaces, utilizing a publish-subscribe mechanism and a shared message pool. They exchange structured messages transparently, allowing agents to publish information and access messages from other entities. Agents can subscribe to relevant messages based on their role profiles, enabling them to extract information that aligns with their specific interests within the framework.

Full Agent Reasoning Loop

  • 현재 대화뿐만 아니라 이전의 대화 기록에 기반해 다음 행동(action)을 결정할 수 있음
    • agent.query는 현재 대화만 고려
    • agent.chat은 이전 대화까지 고려
response = agent.chat( # chat은 이전 대화까지 고려
    "Tell me about the evaluation datasets used."
)

Agent Control

  • 위에서 소개한 내용과는 다르게 low-level에서 에이전트를 조정할 시 다음과 같은 이점 존재
    • 태스크 생성과 실행을 분리하여 태스크 스케줄링에 유연성을 더할 수 있음
    • 실행의 각 단계를 파악함으로써 Debugging 편리
    • 중간 단계를 직접 수정하거나 사람의 피드백을 반영함으로써 Steerability 향상
task = agent.create_task( # 태스크 생성
    "Tell me about the agent roles in MetaGPT, "
    "and then how they communicate with each other."
)
step_output = agent.run_step(task.task_id) # 태스크에 대해 하나의 단계 실행
completed_steps = agent.get_completed_steps(task.task_id) # 현재까지 완료된 단계 파악 가능
upcoming_steps = agent.get_upcoming_steps(task.task_id) # 이후 실행할 단계에 대해 파악 가능
step_output = agent.run_step(
    task.task_id, input="What about how agents share information?" # 단계를 실행할 때 사용자가 원하는 인풋을 추가할 수도 있음, 그렇지 않으면 에이전트가 대화 이력으로부터 인풋을 자동 생성
)
response = agent.finalize_response(task.task_id) # 에이전트의 답변 형태로 변경
profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher at LG CNS AI Lab

0개의 댓글