引言
在当今的数字时代,聊天机器人已经成为企业和个人不可或缺的工具。通过增强聊天机器人与其他系统和API的交互能力,我们可以创建更智能且多功能的对话代理。本文的目的是指导您如何通过添加工具来提升聊天机器人的功能。
主要内容
1. 设置
在本指南中,我们将使用Tavily作为网络搜索工具。首先,确保您在Tavily官网注册一个账户,并安装必要的Python包:
%pip install --upgrade --quiet langchain-community langchain-openai tavily-python
请确保您的OpenAI和Tavily API密钥已设置为环境变量OPENAI_API_KEY和TAVILY_API_KEY。可以使用dotenv库加载.env文件。
import dotenv
dotenv.load_dotenv()
2. 创建代理
我们的目标是创建一个可以根据需要查找信息的对话代理。首先,初始化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)
3. 运行代理
现在,我们可以与机器人进行交互。它能够处理不需要查询的简单问题:
from langchain_core.messages import HumanMessage
response = agent_executor.invoke({"messages": [HumanMessage(content="I'm Nemo!")]})
print(response['output'])
对于需要查找信息的查询,机器人会使用配置的工具:
response = agent_executor.invoke(
{
"messages": [
HumanMessage(content="What is the current conservation status of the Great Barrier Reef?")
],
}
)
print(response['output'])
4. 会话响应
我们的代理可以根据聊天历史进行响应:
from langchain_core.messages import AIMessage, HumanMessage
response = 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?"),
],
}
)
print(response['output'])
常见问题和解决方案
- 访问问题:由于网络限制,开发者在某些地区可能需要使用API代理服务。
- 密钥管理:确保API密钥的安全存储和管理。如果使用dotenv,请确保
.env文件未被上传到版本控制系统。
总结和进一步学习资源
通过为聊天机器人添加工具,我们可以显著提升其功能性,使其不仅能够进行简单对话,还能执行复杂任务。继续探索更多关于代理的文档以及工具用法。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---