如何为聊天机器人添加工具

老铁们,今天我们聊聊如何为你的聊天机器人添加工具。这个技术点其实不难,只要掌握了基本的聊天机器人、代理和聊天历史概念,你就能轻松驾驭。本文将带大家通过一个实战案例,创建一个能够进行网络搜索的对话代理。

技术背景介绍

我们的目标是创建一个可以通过调用工具与系统和API交互的聊天机器人。这里,我们将使用 Tavily 作为搜索工具的动力,也可以替换为类似功能的其他工具。

环境设置

首先,确保你在 Tavily 网站上注册了账户,并安装以下包:

%pip install --upgrade --quiet langchain-community langchain-openai tavily-python

接下来,要设置你的环境变量 OPENAI_API_KEYTAVILY_API_KEY

import dotenv

dotenv.load_dotenv()

原理深度解析

我们的聊天代理需要一个能调用工具的模型。在这里,我们使用了 OpenAI 的 gpt-3.5-turbo-1106 模型来实现这一功能。同时,我们的工具集成了 Tavily 的搜索结果。

from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI

tools = [TavilySearchResults(max_results=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

result = agent_executor.invoke({"messages": [HumanMessage(content="I'm Nemo!")]})
print(result['output'])  # Expected output: Hello Nemo! It's great to meet you. How can I assist you today?

同时,对于需要查找信息的问题,代理会调用搜索工具:

result = agent_executor.invoke(
    {
        "messages": [
            HumanMessage(content="What is the current conservation status of the Great Barrier Reef?")
        ],
    }
)
print(result['output'])  # Outputs the latest conservation status

优化建议分享

之前我踩过个小坑,工具调用的效率有时不尽如人意。后来发现使用 Tavily 平台解决了这个问题,它的稳定性和响应速度都能满足多数应用场景。

补充说明和总结

当然,你可以通过使用 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",
)

今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值