LangChain – Agent (1/)
llm은 정말 놀랍다. 하지만 한계가 있다. llm 등장 전부터 존재하던 것들이 있다. llm들은 서로 또는 이런 것들과 협업(collaboration)함으로 한계를 극복하고 더 놀라운 일을 할 수 있게 된다.
랭체인은 협업(collaboration)을 위한 도구(tool)라는 개념을 등장시켰다. llm들과 tool들을 협업시킴으로 사람을 대신해서 사람의 목적을 대신 달성해주는 agent도 지원한다.
구글 검색 기능과 협업할 수 있다면, llm은 최신 데이터를 활용하지 못한다는 한계를 극복할 수 있다.
Serper 는 구글 검색 API다.
serper를 사용해 검색해 보는 것을 해 보자. serper를 사용하려면 api key가 있어야 한다. serper 사이트에 접속, 가입과 api키를 발급받아 “SERPER_API_KEY” 부분을 작성한다. 랭체인은 구체적인 기능들을 utility라고 하고 serper 지원을 위해 GoogleSerperAPIWrapper를 제공한다.
1 2 3 4 |
import os from langchain.utilities import GoogleSerperAPIWrapper os.environ["SERPER_API_KEY"] = "SERPER_API_KEY" |
검색을 위해 검색어를 넘겨주고 run 메소드를 호출한다.
1 2 |
search = GoogleSerperAPIWrapper() search.run("Obama's first name?") |
구글 검색 기능과 llm을 협업시켜보자. 랭체인은 협업을 위한 기능을 Tool이라 하고, agent는 tool과 llm을 사용한다.
openai의 llm과 serper를 협업해서 최신 데이터를 가지고 답할 수 있는 agent를 만들어보자. 랭체인은 agent의 일반화할 수 있는 목표를 AgentType으로 정의하고 있다. 검색은 SELF_ASK_WITH_SEARCH이다. llm으로 openai를 사용할거니 OPENAI_API_KEY를 작성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from langchain.utilities import GoogleSerperAPIWrapper from langchain.llms.openai import OpenAI from langchain.agents import initialize_agent, Tool from langchain.agents import AgentType os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY" llm = OpenAI(temperature=0) search = GoogleSerperAPIWrapper() tools = [ Tool( name="Intermediate Answer", func=search.run, description="useful for when you need to ask with search" ) ] self_ask_with_search = initialize_agent(tools, llm, agent=AgentType.SELF_ASK_WITH_SEARCH, verbose=True) self_ask_with_search.run("What is the hometown of the reigning men's U.S. Open champion?") |