LangChain – Agent (2/)
openai의 function calling은 랭체인에 와서는 에이전트로 지원된다. 에이전트가 두 가지 타입으로 구분되는거에 따라 OpenAI functions과 OpenAI Multi Functions Agent으로 나누어 문서화를 한 거 같다. 아직 문서화가 정신이 없다. 둘 다 액션 에이전트로 보인다. function이 하나 이냐, 다수 이냐 정도의 차이지. 별도 에이전트가 있는게 아니라 단일이냐 다수냐에 따라 에이전트의 타입을 구분하고 있다.
액션 에이전트는 llm을 사용해서 어떤 액션들을 어떤 순서로 할지 결정한다. function calling은 자신이 직접 액션을 할것인지 함수를 호출할 것인지 결정한다. 에이전트 액션은 보통 tool을 사용하는데, function calling이 function을 호출하는거니, function이 액션이다. 액션은 보통 결과를 만들기 위해 입력을 요구한다. function calling은 함수가 요구하는 인자가 무엇인지 알고 함수를 호출할 때 전달할 인자를 알아야 한다. 에이전트는 액션의 결과를 observing하고 알고 있어야 한다. 그래야 어떤 액션의 결과를 다른 액션에게 전달 할 수 있으니까. function calling의 결과는 사용자에게 function이 리턴하는 문자열이다.
OpenAI의 ChatGPT가 적절하게 답할 수 없는 경우 구글 검색을 해서 답할 수 있도록 해 보자.
관련 모듈을 설치 한다.
1 |
pip install openai google-search-results langchain |
구글 검색을 할 수 있는 tool이 필요하다. GoogleSerperAPIWrapper, Tool
llm이 필요하다. ChatOpenAI
에이전트를 초기화할 때 에인전트 타입을 명시한다. AgentType
1 2 3 4 |
from langchain import SerpAPIWrapper from langchain.agents import initialize_agent, Tool from langchain.agents import AgentType from langchain.chat_models import ChatOpenAI |
API 키가 필요하다. OPENAI_API_KEY, SERPER_API_KEY를 작성한다.
1 2 3 4 |
import os OPENAI_API_KEY = "..." SERPER_API_KEY = "..." |
function calling을 위해 Tool에 func을 두었다.
1 2 3 4 5 6 7 8 9 10 11 12 |
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613", openai_api_key=OPENAI_API_KEY) search = SerpAPIWrapper(serpapi_api_key = SERPER_API_KEY) tools = [ Tool( name = "Search", func=search.run, description="useful for when you need to answer questions about current events. You should ask targeted questions" ) ] agent = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True) agent.run("Who is Leo DiCaprio's girlfriend?") |