You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
These memory abstractions lacked built-in support for multi-user, multi-conversation scenarios, which are essential for practical conversational AI systems. 2
from llama_index.core.memory import (
VectorMemory,
SimpleComposableMemory,
ChatMemoryBuffer,
)
from llama_index.core.llms import ChatMessage
from llama_index.embeddings.openai import OpenAIEmbedding
vector_memory = VectorMemory.from_defaults(
vector_store=None, # leave as None to use default in-memory vector store
embed_model=OpenAIEmbedding(),
retriever_kwargs={'similarity_top_k': 1},
)
msgs = [
ChatMessage.from_str("You are a SOMEWHAT helpful assistant.", "system"),
ChatMessage.from_str("Bob likes burgers.", "user"),
ChatMessage.from_str("Indeed, Bob likes apples.", "assistant"),
ChatMessage.from_str("Alice likes apples.", "user"),
]
vector_memory.set(msgs)
chat_memory_buffer = ChatMemoryBuffer.from_defaults()
composable_memory = SimpleComposableMemory.from_defaults(
primary_memory=chat_memory_buffer,
secondary_memory_sources=[vector_memory],
)
例中,primary_memory字如其名,是用于agent 主要的 chat buffer,secondary_memory_sources 只会被注入到 system role的message 中。操作 memory 中的内容:
msgs = [
ChatMessage.from_str("You are a REALLY helpful assistant.", "system"),
ChatMessage.from_str("Jerry likes juice.", "user"),
]
# load into all memory sources modules"
for m in msgs:
composable_memory.put(m)
msgsss = composable_memory.get("What does Bob like?")
put 和 get 方法会从所有的 memory 中查找。
在 Agent中的使用
def multiply(a: int, b: int) -> int:
"""Multiply two integers and returns the result integer"""
return a * b
def mystery(a: int, b: int) -> int:
"""Mystery function on two numbers"""
return a**2 - b**2
multiply_tool = FunctionTool.from_defaults(fn=multiply)
mystery_tool = FunctionTool.from_defaults(fn=mystery)
llm = OpenAI(model="gpt-3.5-turbo-0613")
agent = FunctionCallingAgent.from_tools(
[multiply_tool, mystery_tool],
llm=llm,
memory=composable_memory,
verbose=True,
)
agent.chat("What is the mystery function on 5 and 6?")
什么是Agent的记忆能力
LLM 是无状态的,不同的 LLM 调用之间是没有关系。1 但 Agent 可以有状态,通常引入记忆机制来支持 Agent 的上下文记忆能力。这些记忆帮助 Agent 在会话或任务中保持连续性,做出更加智能的决策。
根据保存的周期,记忆可以分为 Short-Term Memory(STM-短期记忆)和 Long-Term Memory(LTM-长期记忆)。在 CoALA Agent 中把 Agent 的Memory 分为了 Working Memory、Semantic Memory、Episodic Memory 和 Procedural Memory 四种。working memory 可以视为 STM,其余三种是 LTM。
接下来我们主要讨论 CoALA 提出的 memory部分 的理念,并讨论实现。
各类 memory
记忆能力实现
短期记忆可以用Cache来实现
长期记忆可以用数据库来实现
langchain
LangChain 的 Memory 经历了两代:
第一代实现
设计目标:
这能处理基本的一个用户和AI对话的场景,但是对于复杂的场景下,可能是一个工作流程,流程中可能会有多人与多个AI Agent 交互,这一版的实现中难以区分不同的用户和Agent。
相关实现:
llamaIndex
LlamaIndex 实现了四个类型的 memory:chat_memory_buffer,chat_summary_memory_buffer,vector_memory,simple_composable_memory,它们分别有自己的优缺点和使用场景。详细总结如下:
ChatSummaryMemoryBuffer 和 Vector Memory一般用作 LTM, chat_memory_buffer 一般用于 STM。
SimpleComposableMemory 的用例 3
例中,primary_memory字如其名,是用于agent 主要的 chat buffer,secondary_memory_sources 只会被注入到 system role的message 中。操作 memory 中的内容:
put 和 get 方法会从所有的 memory 中查找。
在 Agent中的使用
todo: 没有体现 persist 操作
qwen-agent
实现 4
参考
Footnotes
https://arxiv.org/abs/2309.02427 ↩
https://python.langchain.com/docs/versions/migrating_memory/ ↩
https://docs.llamaindex.ai/en/stable/examples/agent/memory/composable_memory/ ↩
https://github.com/QwenLM/Qwen-Agent/blob/main/qwen_agent/memory/memory.py ↩
The text was updated successfully, but these errors were encountered: