Tool calling Agent
ToolNode
- LLM이 툴 호출을 쉽게 해줄 수 있게 도와주는 클라스
- 도구 실행에 필요한 보일러 플레이트 코드를 작성할 필요가 없음
- 병렬 처리를 지원하여 한 번에 여러 개의 도구 실행 가능
- 도구 실행 중 오류 발생 시 ToolNode가 이를 감지하고 오류 정보를 ToolMessage에 담아 반환
tools_condition
- LLM이 반환한 값을 보고 tools 또는 end를 리턴하는 함수
- LLM이 더 이상 도구를 호출할 필요 없다고 판단 되면 end를 리턴하여 그래프를 종료할 수 있음
예시
# 사용할 툴을 정의
tool = TavilySearchResults(max_results=3)
tools = [tool]
# LLM 생성
llm = ChatOpenAI(model_name='gpt-4o-mini', temperature=0.5)
# bind_tools() 함수를 사용하여 llm에 tool을 바인딩
llm_with_tools = llm.bind_tools(tools)
# 만들어둔 llm을 사용하는 노드 정의
def agent_node(state):
response = llm_with_tools.invoke(state["messages"])
return {"messages": [response]}
# 그래프에 노드 추가
graph_builder.add_node("agent_node", agent_node)
# ToolNode 생성
tool_node = ToolNode(tools=[tool])
# 노드 추가
graph_builder.add_node("tools", tool_node)
graph_builder.add_conditional_edges(
"agent_node",
tools_condition,
)