工具类只能只读 memory。

0 在agent与tool之间共享记忆

  • 自定义一个工具用来LLMChain来总结内容
  • 使用readonlymemory来共享记忆
  • 观察共享与不共享的区别

1 创建一条链来总结对话

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 构建工具

# 搜索工具
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 创建记忆组件

memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True,
)

4 创建agent

agent_chain = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
    handle_parsing_errors=True,
    memory=memory,
)
print(agent_chain.agent.llm_chain.prompt.template)

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

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

print(agent_chain.memory.buffer)

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

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

print(agent_chain.memory.buffer)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐