Agent 는 LLM 이 복잡한 문제를 단계별로 쪼개고 각 부분의 문제를 외부 도구들 (e.g 구글 검색, 위키피디아 검색, 파이썬 함수 코드, 외부 API 호출 등) 과 상호작용해서 해결하도록 할 수 있음.
언어 모델이 가진 한계를 깰 수 있고, 작업의 워크플로우를 고정적으로 처리하는게 아니라 유연한 방식으로 처리할 수 있단느 이점이 있음.
그럼 Agent 는 어떻게 외부 도구들을 이용해서 상호 작용 할 수 있는 건가?
이건 Agent 를 실행할 떄 사용되는 프롬포트를 보면 이해할 수 있음
Answer the following questions as best you can. You have access to the following tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
보면은 LLM 이 사용할 수 있는 도구들을 tools 에 명시된다. 이 tools 에 대한 설명으로 내가 사용할 수 있는 툴과 툴에 대한 설명이 적혀져있을 것이고, 이걸 바탕으로 LLM 은 사용할 툴을 선택할 수 있다.
LLM 이 사용할 툴을 선택하게 되면 툴에 대한 이름과 툴에 대한 매개변수 같은 걸 LLM 이 응답보낼건데 그걸 바탕으로 코드로 실행하게 될거임. 이거는 LangChain 같은데서 해준다.
다음 질문으로 넘어가서 Agent 가 그래서 어떻게 동작하는지를 보자면 질문이 주어졌을 때 Agent 는 이 프롬포트를 가지고 LLM 에게 던지면 사용할 툴과 행동 (Action) 들이 정해진다.
실제로 LLM 이 사용할 툴을 결정했다면 이런 응답 포맷으로 올거임
Quesiton: QUESTION
Thought: THOUGHT
Action:
```json
{
"action": TOOL_NAME,
"action_input": TOOL_PARAMETERS
}
```
그리고 행동을 한 이후에 결과를 가지고 와서 다시 LLM 은 생각한다. 이제 이 질문에 답하기 위해서는 다음에는 어떠한 행동을 해야하는지를 생각해보는거지.
이렇게 원래의 질문 (Question) 과 LLM 이 했던 생각 (Thoguth) 그리고 행동 (Action) 그리고 행동에 대한 결과 (Observation) 은 누적되면서 최종적인 응답으로 가는거임.
이런식으로 최종적으로 원하는 답까지 가게되면 사용자에게 응답이 가게 되는거임
이 실행 구조는 다음과 같다:
- 질문이 들어오면 Question + Agent Prompt 를 가지고 LLM 에게 질문을 던진 후 Action 을 수행한다. 그리고 Action 에 대한 결과를 가져와서 프롬포트에 합친 후 다음 라운드를 시작한다. 다시 LLM 에게 최종 결과를 하기 위해 무엇을 해야하는지 질문을 하는거지.
- 이렇게 여러 라운드를 거치고 나서 최종적인 답변이 생성되었다고 판단하면 사용자에게 반환하는거임.
References:
'Generative AI > Agent' 카테고리의 다른 글
Multi AI Agent Systems with crewAI (0) | 2024.06.25 |
---|---|
AI Agents in LangGraph (0) | 2024.06.18 |
LangChain 의 Agent 와 Agent Type (0) | 2024.05.29 |