工具类只能只读 memory。
0 在agent与tool之间共享记忆
- 自定义一个工具用来LLMChain来总结内容
- 使用readonlymemory来共享记忆
- 观察共享与不共享的区别
1 创建一条链来总结对话
python
template = """以下是一段AI机器人和人类的对话:
{chat_history}
根据输入和上面的对话记录写一份对话总结.
输入: {input}"""
prompt = PromptTemplate(
input_variables=["input","chat_history"],
template=template,
)
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True,
)
readonlymemory = ReadOnlySharedMemory(memory=memory)
summary_chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=readonlymemory,
)
2 构建工具
python
# 搜索工具
search = SerpAPIWrapper()
# 总结工具
def SummaryChainFun(history):
print("\n==============总结链开始运行==============")
print("输入历史: ",history)
summary_chain.run(history)
tools = [
Tool(
name="Search",
func=search.run,
description="当需要了解实时的信息或者你不知道的事时候可以使用搜索工具",
),
Tool(
name="Summary",
func=SummaryChainFun,
description="当你被要求总结一段对话的时候可以使用这个工具,工具输入必须为字符串,只在必要时使用",
),
]
print(tools)

3 创建记忆组件
python
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True,
)
4 创建agent
python
agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
handle_parsing_errors=True,
memory=memory,
)
python
print(agent_chain.agent.llm_chain.prompt.template)

python
agent_chain.run(input="美国第45任总统是谁?")

python
agent_chain.run(input="他的夫人叫什么名字?")

python
print(agent_chain.memory.buffer)

python
agent_chain.run(input="我们都聊了什么?")

python
agent_chain.run(input="帮我总结下目前的对话内容,给我5岁的儿子看看")

python
print(agent_chain.memory.buffer)
