LangMem学习第四天 用LLM与长期记忆结合

我们尝试将长期记忆与LLM结合使用。

在LangMem中,长期记忆的实现模式定义了以下两种:

LangMem学习第四天 用LLM与长期记忆结合

这里我们将实现Hot Path模式,尝试利用长期记忆进行对话。

LangMem学习第四天 用LLM与长期记忆结合

关键点如下:

  1. 搜索长期记忆 从存储(store.search)中获取与用户关联的长期记忆
  2. 在系统消息中添加长期记忆 预先嵌入记忆信息,使LLM可参考
  3. 将对话内容反映至长期记忆 将用户的发言与LLM的回应添加到记忆中(manager.invoke)。

全部源代码

import os
import f_common
from langchain.chat_models import init_chat_model
from langgraph.func import entrypoint
from langgraph.store.memory import InMemoryStore
from pydantic import BaseModel, Field, conint
from langmem import create_memory_store_manager

#关键点如下:
# 搜索长期记忆
# 从存储(store.search)中获取与用户关联的长期记忆
# 在系统消息中添加长期记忆
# 预先嵌入记忆信息,使LLM可参考
# 将对话内容反映至长期记忆
# 将用户的发言与LLM的回应添加到记忆中(manager.invoke)
class UserFoodPreference(BaseModel):
    """用户饮食偏好的详细信息"""food_name: str = Field(..., description="菜名")
    cuisine: str | None = Field(
        None, description="料理类型(和食、洋食、中餐等)"
    )
    preference: conint(ge=0, le=100) | None = Field(
        None, description="喜好程度(以0~100的分数表示)")
    description: str | None = Field(
        None, description="其他补充说明(例如,特定的调味或配料等)"
    )



# 生成 LangGraph 内存存储 (BaseStore)
store = InMemoryStore(
    index={
        "dims": 1536,
       # "embed": "openai:text-embedding-3-small", # 用于向量化的模型
        "embed": "ollama:bge-m3",
    }
)


manager = create_memory_store_manager(
    #"anthropic:claude-3-7-sonnet-latest",
    f_common.my_grok_llm,
    namespace=("chat", "{user_id}"),
    schemas=[UserFoodPreference],
    instructions = "请详细抽取用户的偏好",
    enable_inserts=True,
    enable_deletes=False,
)

#llm = init_chat_model("anthropic:claude-3-7-sonnet-latest")
llm=f_common.my_grok_llm

@entrypoint(store=store)
def app(params: dict):
    messages = params["messages"]
    user_id = params["user_id"]
    # 1. 从存储中搜索对应用户的长期记忆
    memories = store.search(("chat", user_id))
    # 2. 将长期记忆设定为系统消息
    system_msg = f"""You are a helpful assistant.

## Memories
<memories>
{memories}
</memories>
"""
    response = llm.invoke([
        {
            "role": "system",
            "content": system_msg,
        }, *messages
    ])

    # 3. 将对话内容反映至长期记忆
    manager.invoke({"messages": messages + [response]}, config={"configurable": {"user_id": user_id}})
    return response.content


# ---- 更新长期记忆 ----
conversation = [
    {"role": "user", "content": "我非常喜欢酱油拉面!!"},
]
app.invoke({"messages": conversation, "user_id": "MZ0001"})

# ---- 参考长期记忆 ----
conversation = [
    {"role": "user", "content": "今天的午餐该吃什么呢?"},
]
message = app.invoke({"messages": conversation, "user_id": "MZ0001"})
print("### LLM:n", message)

memories = store.search(("chat", "MZ0001"))
print("### Memories:n", [m for m in memories])

我们的输出

LangMem学习第四天 用LLM与长期记忆结合

看上去好像没有任何记忆系统的作用

官方的输出

LangMem学习第四天 用LLM与长期记忆结合

Paragoger衍生者AI训练营。发布者:稻草人,转载请注明出处:https://www.shxcj.com/archives/9709

(0)
上一篇 11小时前
下一篇 7小时前

相关推荐

发表回复

登录后才能评论
本文授权以下站点有原版访问授权 https://www.shxcj.com https://www.2img.ai https://www.2video.cn