Skip to main content

对话 Conversational

本教程演示了如何使用针对对话优化的代理程序。 其他代理程序通常优化使用工具来找出最佳响应,但在对话环境中,您可能希望代理程序能够与用户进行聊天。

这可以通过特定类型的代理程序(conversational-react-description)来实现,该代理程序期望与内存组件一起使用。

from langchain.agents import Tool
from langchain.agents import AgentType
from langchain.memory import ConversationBufferMemory
from langchain import OpenAI
from langchain.utilities import SerpAPIWrapper
from langchain.agents import initialize_agent

search = SerpAPIWrapper()
tools = [
Tool(
name="Current Search",
func=search.run,
description="当您需要回答有关当前事件或世界当前状态的问题时很有用"
),
]

memory = ConversationBufferMemory(memory_key="chat_history")

llm = OpenAI(temperature=0)
agent_chain = initialize_agent(tools, llm, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory)

agent_chain.run(input="hi, i am bob")

> 进入新的 AgentExecutor 链...

思考:我需要使用工具吗?不需要
AI:嗨 Bob,很高兴见到你!今天我能帮你什么?

> 完成链。

'嗨 Bob,很高兴见到你!今天我能帮你什么?'
agent_chain.run(input="what's my name?")

> 进入新的 AgentExecutor 链...

思考:我需要使用工具吗?不需要
AI:你的名字是 Bob!

> 完成链。

'你的名字是 Bob!'
agent_chain.run("what are some good dinners to make this week, if i like thai food?")

> 进入新的 AgentExecutor 链...

思考:我需要使用工具吗?是的
动作:Current Search
动作输入:泰国菜晚餐食谱
观察:本周任何晚上都有 59 个简单的泰国食谱· Marion Grasby 的泰国辣椒炒饭· 泰国咖喱面汤· Marion Grasby 的泰国辣椒...
思考:我需要使用工具吗?不需要
AI:这是本周您可以尝试的一些美味的泰国晚餐食谱:Marion Grasby 的泰国辣椒炒饭、泰国咖喱面汤、椰子饭的泰国绿咖喱、蔬菜的泰国红咖喱和泰国椰子汤。希望您喜欢!

> 完成链。

'这是本周您可以尝试的一些美味的泰国晚餐食谱:Marion Grasby 的泰国辣椒炒饭、泰国咖喱面汤、椰子饭的泰国绿咖喱、蔬菜的泰国红咖喱和泰国椰子汤。希望您喜欢!'
agent_chain.run(input="tell me the last letter in my name, and also tell me who won the world cup in 1978?")

> 进入新的 AgentExecutor 链...

思考:我需要使用工具吗?是的
动作:Current Search
动作输入:1978 年世界杯的获胜者
观察:阿根廷国家足球队
思考:我需要使用工具吗?不需要
AI:您的名字的最后一个字母是“b”,而 1978 年世界杯的获胜者是阿根廷国家足球队。

> 完成链。

'您的名字的最后一个字母是“b”,而 1978 年世界杯的获胜者是阿根廷国家足球队。'

agent_chain.run(input="whats the current temperature in pomfret?")
> 进入新的 AgentExecutor 链...

思考:我需要使用工具吗?是的
动作:Current Search
动作输入:Pomfret 的当前温度
观察:部分多云。最高温度约为 70F。西风 5 到 10 英里/小时。湿度 41%。
思考:我需要使用工具吗?不需要
AI:Pomfret 的当前温度约为 70F,部分多云,西风 5 到 10 英里/小时。湿度为 41%。

> 完成链。

'Pomfret 的当前温度约为 70F,部分多云,西风 5 到 10 英里/小时。湿度为 41%。'

使用聊天模型

chat-conversational-react-description 代理类型允许我们使用聊天模型创建对话代理,而不是 LLM。

from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, temperature=0)
agent_chain = initialize_agent(tools, llm, agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory)

agent_chain.run(input="hi, i am bob")
> 进入新的 AgentExecutor 链...
{
"action": "Final Answer",
"action_input": "你好 Bob!我今天能帮你什么?"
}

> 完成链。

'你好 Bob!我今天能帮你什么?'
agent_chain.run(input="what's my name?")

> 进入新的 AgentExecutor 链...
{
"action": "Final Answer",
"action_input": "你的名字是 Bob。"
}

> 完成链。

'你的名字是 Bob。'
agent_chain.run("what are some good dinners to make this week, if i like thai food?")
> 进入新的 AgentExecutor 链...
{
"action": "Current Search",
"action_input": "泰国菜晚餐食谱"
}
观察:本周任何晚上都有 64 个简单的泰国食谱· 泰国咖喱面汤· 泰国黄花椰菜、蛇豆和豆腐咖喱· 泰式鸡肉派· 泰国...
思考:{
"action": "Final Answer",
"action_input": "这是本周您可以尝试的一些泰国晚餐食谱:泰国咖喱面汤、泰国黄花椰菜、蛇豆和豆腐咖喱、泰式鸡肉派等等。您可以在我之前找到的来源中找到完整的食谱列表。"
}

> 完成链。

'这是本周您可以尝试的一些泰国晚餐食谱:泰国咖喱面汤、泰国黄花椰菜、蛇豆和豆腐咖喱、泰式鸡肉派等等。您可以在我之前找到的来源中找到完整的食谱列表。'
agent_chain.run(input="tell me the last letter in my name, and also tell me who won the world cup in 1978?")
> 进入新的 AgentExecutor 链...
{
"action": "Final Answer",
"action_input": "您的名字的最后一个字母是'b'。阿根廷赢得了 1978 年的世界杯。"
}

> 完成链。

'您的名字的最后一个字母是'b'。阿根廷赢得了 1978 年的世界杯。'
agent_chain.run(input="whats the weather like in pomfret?")
> 进入新的 AgentExecutor 链...
{
"action": "Current Search",
"action_input": "pomfret 的天气"
}
观察:多云有阵雨。最低温度约为 55F。南风 5 到 10 英里/小时。降雨几率 60%。湿度 76%。
思考:{
"action": "Final Answer",
"action_input": "多云有阵雨。最低温度约为 55F。南风 5 到 10 英里/小时。降雨几率 60%。湿度 76%。"
}

> 完成链。

'多云有阵雨。最低温度约为 55F。南风 5 到 10 英里/小时。降雨几率 60%。湿度 76%。'