본문 바로가기

직장 생활/질문 응답

에이전트에서 툴 결과 응답만 내려주도록 구현하기 [feat: langchain]

https://forum.langchain.com/t/langchain-create-agent-with-tools-parameter/2030

 

Langchain create_agent with tools parameter

I’d like to welcome to LangChain version 1.0. I’m currently migrating my workflows to use create_agent, but I noticed that when a tool specified in tools is called, the agent makes an additional LLM call after the normal tool execution to generate an A

forum.langchain.com

 

1.0 이후 랭체인에서 개선된 부분 중 강력한 부분을 뽑으라면 에이전트 루프에 한 표를 주고 싶습니다.

 

 

 

action & observation 루프는 구글에서 강조한 에이전트의 주요 flow입니다.

 

랭체인 1.0 이전 버전으로 챗봇을 개발할 때는, 아... 자동화란 멀었구나 하며 개발하곤 했습니다.

[결국엔 내부적으로 조건(분기) 기반의 라우팅으로 처리하고 있어서 현타가 좀 있었죠]

 

1.0에 들어서는 tools에 툴 목록만 전달하고, 시스템 프롬프트를 간결하게 두어 시스템의 최종 목표가 달성된 시점에 알아서

 

에이전트 응답이 끝나게 만들 수 있습니다.

 

현재 이 방법을 통해 기능을 구현하고 있는데, 그래프의 스트리밍 응답을 처리하는 과정에서 tool 선택 과정에 대한 스트리밍 데이터가

 

그대로 전달되다 보니... 이 기능이 좀 아쉽게 느껴지더군요.

[현재는 툴 데코레이터쪽에 return_direct인자가 False로 처리되어 있습니다.]

 

 

 

툴 내부의 처리 과정을 writer로 별도로 전달하고 있어서, tool 선택을 고민하는 과정에 대한 스트리밍 응답 정보는 필요가 없었습니다.

 

에이전트 루프의 마지막 과정(AIMessage)만 스트리밍 응답으로 취급할 수 있을까를 찾아봤지만...

그렇다 할 좋은 방법을 찾지 못한 상황입니다. [혹시나 찾으신 분이 있다면 공유해 주시면 정말 감사하겠습니다.]

 

현재 대안으로 진행하는 방식은 tools를 바인딩한 에이전트 쪽에서의 응답으로부터 Tool 결과 정보를 직접 받고,

 

END 노드에서 스트리밍 데이터를 뿌려주게끔 구현하는 것입니다.

 

END 노드는 태그로 메타 데이터 라벨링하고, 랭그래프 쪽 stream에서 태그를 필터링하여 최종 응답을 뿌려주도록 구현하는 것입니다.

 

*참고: 문서에서는 return_direct가 True인 경우 에이전트 루프를 타지 않고 결과를 바로 반환한다고 안내되어 있긴 하지만,

실제 테스트를 해보면 그렇지는 않습니다. [이 판단에 대해서는 LLM이 진행합니다.]