在AI技术不断发展的今天,聊天机器人已经超越了简单的问答功能,成为可以与其他系统和API交互的强大工具。在本文中,我们将介绍如何为聊天机器人添加工具,使其能够使用外部资源,如网络搜索工具来增强其功能。
技术背景介绍
随着AI能力的增强,开发人员希望聊天机器人不仅能够与用户进行对话,还能够实时地从互联网或其他数据源获取信息。这种能力通常是通过集成各种工具实现的。我们将使用一个工具调用代理来演示这个过程,其核心是一个用于网页搜索的工具。
核心原理解析
工具调用代理的核心思想是通过聊天模型与工具协作,以处理用户查询,只有在必要时使用工具。我们将使用 Tavily
,一个强大的搜索工具,通过集成 OpenAI API
提供智能对话能力。
代码实现演示
环境设置
要开始,首先需要安装相关的Python包:
%pip install --upgrade --quiet langchain-community langchain-openai tavily-python
然后,设置环境变量或从 .env
文件加载API密钥:
import dotenv
dotenv.load_dotenv()
确保设置了 OPENAI_API_KEY
和 TAVILY_API_KEY
。
创建代理
我们的目标是创建一个可以根据需要查找信息的智能代理。首先,我们初始化Tavily工具和OpenAI聊天模型:
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
tools = [TavilySearchResults(max_results=1)] # 设置最大搜索结果数为1
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?"),
],
}
)
如果需要管理消息历史:
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",
)
应用场景分析
这种可调用工具的智能代理特别适用于需要实时信息检索的场景,例如客户支持、个人助理和教育机器人等。
实践建议
在实际使用中,要确保代理的工具调用适当且在性能和安全性上得到优化。此外,定期更新和维护工具的API接口也很重要。
如果遇到问题欢迎在评论区交流。
—END—