langchain agent的长期记忆

     1. 概述

        长期记忆以JSON格式保存在store中,开发和测试可以基于内存,生产系统必须使用数据库。长期记忆内容保存在指定的命名空间并且有一个唯一的标识,命名空间可以嵌套,所以长期记忆支持多层级存储。比如,一级名字空间为root,二级名字空间为企业的统一社会信用代码,三级名字空间为用户唯一标识。

      2.创建store

        以下代码创建store,用于保存长期记忆,为了支持语义搜索,所以创建store时指定嵌入模型及嵌入字段。

from langchain_huggingface.embeddings.huggingface import HuggingFaceEmbeddings
embedding = HuggingFaceEmbeddings(model_name='../models/text2vec-base-chinese')

store = InMemoryStore(
    index={
        "embed": embedding,  # Embedding provider
        "dims": 768,   # Embedding dimensions
        "fields": ["favourite_topic", "$"] # Fields to embed
    }
)

ns = ('mystore',) #命名空间
memoryid = '13812345678' #键
memory = {'name':'davi', 'favourite_topic': 'joke, essay, story'}#值
store.put(ns, memoryid, memory, index=["favourite_topic"])

memories = store.search(
    ns,
    query="what's davi's favourite topic?",
)
memories

      3.工具读长期记忆

        创建上下文类,其中传入用户唯一标识:

from dataclasses import dataclass
@dataclass
class Context:
    user_id: str        

        声明访问store的工具:

rom langchain.tools import tool, ToolRuntime
@tool
def get_user_info(runtime: ToolRuntime[Context]) -> str:
    """Look up user info."""
    store = runtime.store 
    user_id = runtime.context.user_id
    user_info = store.get(("mystore",), user_id) 
    return str(user_info.value) if user_info else "Unknown user"

         创建agent,传入上下文和store:

from langchain.agents import create_agent
agent = create_agent(
    model=llm,
    tools=[get_user_info],
    # Pass store to agent - enables agent to access store when running tools
    store=store, 
    context_schema=Context
)

        调用agent,查找指定用户信息:

agent.invoke(
    {"messages": [{"role": "user", "content": "look up user information"}]},
    context=Context(user_id="13812345678") 
)

      4.工具写长期记忆

        定义用户信息类:

class UserInfo(TypedDict):

    name: str

    favourite_topic: str

        定义写长期记忆工具:

@tool
def save_user_info(user_info: UserInfo, runtime: ToolRuntime[Context]) -> str:
    """Save user info."""
    store = runtime.store 
    user_id = runtime.context.user_id 
    store.put(("users",), user_id, user_info) 
    return "Successfully saved user info."

        创建agent,传入上下文类:

agent = create_agent(
    model=llm,
    tools=[get_user_info, save_user_info],
    store=store, 
    context_schema=Context
)

        调用agent保存用户信息到长期记忆中:

agent.invoke(
    {"messages": [{"role": "user", "content": "My name is John Smith"}]},
    # user_id passed in context to identify whose information is being updated
    context=Context(user_id="user_123") 
)

内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于一个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
LangChain 代理的对话持久性是指代理在多次交互中保持对话上下文的能力。这种能力对于构建连贯的用户体验至关重要,因为它允许代理记住之前的对话历史并在新的对话中使用这些信息来提供更加个性化的服务。 ### 对话持久性的实现方式 在 LangChain 中,对话持久性可以通过多种方式实现。其中一种常见的方法是使用 `ConversationBufferMemory` 类,它可以存储对话的历史记录,并在需要时将其传递给代理。这个类可以轻松地与 LLMs 集成,以提供一个简单的接口来管理对话状态 [^3]。 ```python from langchain.memory import ConversationBufferMemory # 初始化记忆组件 memory = ConversationBufferMemory() # 添加对话历史 memory.save_context({"input": "你好"}, {"output": "你好!有什么可以帮助你的吗?"}) # 获取对话历史 conversation_history = memory.load_memory_variables({})["history"] ``` 此外,还可以通过自定义记忆组件来实现更复杂的对话持久性需求。例如,可以将对话历史存储在一个外部数据库中,以便在不同的会话之间共享对话状态 [^3]。 ### 持久性持续时间 关于对话持久性的持续时间,这取决于具体的应用场景和配置。默认情况下,`ConversationBufferMemory` 会在内存中存储对话历史,这意味着一旦程序关闭,对话历史就会丢失。为了实现长期的对话持久性,可以将对话历史存储到文件系统、数据库或其他持久化存储中 [^3]。 ```python from langchain.storage import LocalFileStore # 初始化本地文件存储 store = LocalFileStore("path/to/store") # 将对话历史保存到文件存储中 store.save(conversation_history) ``` ### 自定义持久性策略 除了使用内置的记忆组件外,还可以根据特定的需求设计自定义的持久性策略。例如,可以根据对话的重要性和频率动态调整对话历史的存储位置和保留时间 [^3]。 ```python0 class CustomMemory: def __init__(self, store): self.store = store self.history = [] def save_context(self, input_str, output_str): # 保存对话历史到内存和存储中 self.history.append((input_str, output_str)) self.store.save(self.history) def load_memory_variables(self, _): # 加载对话历史 return {"history": "\n".join([f"{inp}: {out}" for inp, out in self.history])} # 使用自定义记忆组件 custom_memory = CustomMemory(store) custom_memory.save_context("你好", "你好!有什么可以帮助你的吗?") conversation_history = custom_memory.load_memory_variables({}) ``` ### 结论 总之,LangChain 提供了多种机制来实现对话持久性,从简单的内存存储到复杂的外部存储解决方案。开发者可以根据应用的具体需求选择合适的持久性策略,以确保对话状态能够在多个会话之间保持一致 。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值