四、Agent入门

到目前为止,我们创建的所有示例链的每一步都是在事先知道的情况下进行的。最后,我们将学习怎么使用LangChain的agent,在这个例子中,LLM将决定下一步采取哪些步骤。

注意:本文中我们仅展示OpenAI模型来创建的agent,迄今为止,本地化模型在这方面尚不成熟。

在构建Agent时,首先要决定它应该能够访问哪些工具。在这个例子中,我们将给代理提供两个工具:

  • 我们刚刚创建的检索器。这将使它能够轻松回答有关 LangSmith 的问题。
  • 一个搜索工具。这将使它能够轻松回答需要最新信息的问题。

首先,让我们将刚刚创建的检索器设置成一个工具:

1
2
3
4
5
6
7
from langchain.tools.retriever import create_retriever_tool

retriever_tool = create_retriever_tool(
retriever,
"langsmith_search",
"Search for information about LangSmith. For any questions about LangSmith, you must use this tool!",
)

这里,我们将引入一个搜索工具Tavily。该工具的使用需要先在Tavily网站上进行注册,获得一个API key。然后将其加入到环境变量中。

1
export TAVILY_API_KEY=...

如果不想配置API key,也可以跳过这个创建步骤。

1
2
3
from langchain_community.tools.tavily_search import TavilySearchResults

search = TavilySearchResults()

然后,创建一个包含我们希望使用的工具的列表。

1
tools = [retriever_tool, search]

有了这个工具,我们可以创建一个Agent来使用它们。这里,我们将快速浏览一下这个过程 - 要深入了解更具体的内容,请查看代理入门文档

首先,安装langchain hub

1
pip install langchainhub

接下来,我们就可以使用hub来拉取预定义的Prompt。

1
2
3
4
5
6
7
8
9
10
from langchain_openai import ChatOpenAI
from langchain import hub
from langchain.agents import create_openai_functions_agent
from langchain.agents import AgentExecutor

# 拉取一个预定义的prompt,可以在其基础上进行修改
prompt = hub.pull("hwchase17/openai-functions-agent")
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

现在,我们可以调用agent_executor并查看它的响应。例如,我们可以询问它关于 LangSmith 的问题:

1
agent_executor.invoke({"input": "how can langsmith help with testing?"})

我们可以询问他气象问题:

1
agent_executor.invoke({"input": "what is the weather in SF?"})

我们也可以跟他进行对话:

1
2
3
4
5
chat_history = [HumanMessage(content="Can LangSmith help test my LLM applications?"), AIMessage(content="Yes!")]
agent_executor.invoke({
"chat_history": chat_history,
"input": "Tell me how"
})