LangChain – Agent (2/)

llm은 pre training으로 태어나기 때문에 pre training 데이터를 언제 어디서 수집했느냐의 한계를 갖는다. llm 공급자라면 이런 한계를 극복하고자 할 것이다. openai의 function calling도 이런 노력의 하나다.

openai의 function calling은 랭체인에 와서는 에이전트로 지원된다. 에이전트가 두 가지 타입으로 구분되는거에 따라 OpenAI functions과 OpenAI Multi Functions Agent으로 나누어 문서화를 한 거 같다. 아직 문서화가 정신이 없다. 둘 다 액션 에이전트로 보인다. function이 하나 이냐, 다수 이냐 정도의 차이지. 별도 에이전트가 있는게 아니라 단일이냐 다수냐에 따라 에이전트의 타입을 구분하고 있다.

액션 에이전트는 llm을 사용해서 어떤 액션들을 어떤 순서로 할지 결정한다. function calling은 자신이 직접 액션을 할것인지 함수를 호출할 것인지 결정한다. 에이전트 액션은 보통 tool을 사용하는데, function calling이 function을 호출하는거니, function이 액션이다. 액션은 보통 결과를 만들기 위해 입력을 요구한다.  function calling은 함수가 요구하는 인자가 무엇인지 알고 함수를 호출할 때 전달할 인자를 알아야 한다. 에이전트는 액션의 결과를 observing하고 알고 있어야 한다. 그래야 어떤 액션의 결과를 다른 액션에게 전달 할 수 있으니까. function calling의 결과는 사용자에게 function이 리턴하는 문자열이다.

랭체인은 액션을 tool로 제공하기 때문에, 사용자 정의 함수를 사용할 기회는 거의 없다. function calling에 요구되는 인자에 대한 정의(매개변수) 부분이 잘 안나타나는 이유.

 

OpenAI의 ChatGPT가 적절하게 답할 수 없는 경우 구글 검색을 해서 답할 수 있도록 해 보자.

관련 모듈을 설치 한다.

 

구글 검색을 할 수 있는 tool이 필요하다. GoogleSerperAPIWrapper, Tool

llm이 필요하다. ChatOpenAI

에이전트를 초기화할 때 에인전트 타입을 명시한다. AgentType

 

API 키가 필요하다. OPENAI_API_KEY, SERPER_API_KEY를 작성한다.

 

function calling을 위해 Tool에 func을 두었다.

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*