Pydantic AI 接入 Hindsight 实现持久化记忆:异步记忆工具与自动指令注入实战指南

发布时间:2026/11/3 14:09:48

Pydantic AI 接入 Hindsight 实现持久化记忆:异步记忆工具与自动指令注入实战指南 Pydantic AI 接入 Hindsight 实现持久化记忆异步记忆工具与自动指令注入实战指南【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight本篇技术指南围绕 Hindsight 提供的hindsight-pydantic-ai集成包讲解如何为 Pydantic AI Agent 注入跨会话的长期记忆通过create_hindsight_tools()暴露 retain/recall/reflect 三个异步记忆工具并通过memory_instructions()在每次运行前自动召回相关记忆注入系统提示词。读完本文你将掌握从安装、连接、Bank 策略设计到记忆生效验证的完整落地路径并理解其底层实现与配置优先级。为什么这套方案成立Pydantic AI 将tools工具与instructions指令作为一等公民概念提供给 Agent。Hindsight 的集成恰好同时覆盖这两者记忆工具create_hindsight_tools给 Agent 显式的记忆操作能力让模型自主决定何时调用记忆指令memory_instructions在每轮运行开始前自动把相关记忆注入上下文属于自动召回。两者结合就能同时实现自动记忆使用与Agent 驱动的显式记忆操作既不需要线程池 hack也不需要手写召回逻辑。从源码看该集成是端到端异步原生的——retain、recall、reflect 全部走异步路径aretain/arecall/areflect在 async 生产服务中接入时不需要任何同步包装参见 tools.py。前置条件一个可正常运行的 Pydantic AI AgentPython 环境已安装hindsight-pydantic-ai一个跨运行保持稳定的 Bank ID 策略同一用户或同一项目在不同会话中必须复用相同的 Bank ID。Step 1安装集成包pip install hindsight-pydantic-ai该包是轻量设计根据 pyproject.toml 与 README.md它只依赖pydantic-ai-slim1.0.0避免拉入全部模型提供商与hindsight-client0.4.0运行要求 Python 3.10采用 MIT 许可证。Step 2连接 Pydantic AI 与 Hindsight连接 Hindsight 后端有两种方式核心都是构造一个Hindsight客户端方式一Hindsight Cloud推荐免自托管from hindsight_client import Hindsight client Hindsight(base_urlhttps://api.hindsight.vectorize.io, api_keyhsk_...)方式二本地自托管如果使用仓库自带的启动脚本在本地运行 Hindsight例如./scripts/dev/start-api.sh只需把 URL 指向本地端口client Hindsight(base_urlhttp://localhost:8888)也可以调用一次configure()建立全局配置之后创建工具时无需反复传 client详见下文全局配置章节。Step 3将记忆接入 Pydantic AI 运行时最干净的模式是给 Agent 挂上 Hindsight 工具再通过memory_instructions()让相关记忆在每次运行前自动注入from hindsight_client import Hindsight from hindsight_pydantic_ai import create_hindsight_tools, memory_instructions from pydantic_ai import Agent client Hindsight(base_urlhttps://api.hindsight.vectorize.io, api_keyhsk_...) agent Agent( openai:gpt-4o, toolscreate_hindsight_tools(clientclient, bank_iduser-123), instructions[memory_instructions(clientclient, bank_iduser-123)], ) result await agent.run(What do you remember about my preferences?) print(result.output)上述代码执行后Agent 会获得三个可调用的记忆工具源码定义见 tools.py工具名职责对应底层 APIhindsight_retain将信息写入长期记忆事实、用户偏好、决策、规则等client.aretain()hindsight_recall搜索长期记忆中与查询相关的信息返回编号列表client.arecall()hindsight_reflect基于记忆合成有条理、有推理的回答而非返回原始事实client.areflect()三个工具都是takes_ctxFalse的异步闭包直接捕获已解析的 client因此不需要修改RunContext或 deps。默认三个工具全部创建也可以通过include_retain/include_recall/include_reflect任意裁剪组合例如省略 reflecttools create_hindsight_tools( clientclient, bank_iduser-123, include_retainTrue, include_recallTrue, include_reflectFalse, # Omit reflect )而memory_instructions()返回的是一个兼容Agent(instructions[...])的异步可调用对象tools.py。它在每次agent.run()时都会被重新求值自动调用arecall()召回记忆以prefix默认Relevant memories:\n为前缀拼成编号列表注入系统提示词——因此即使复用了message_history注入的记忆也始终是最新状态。两种变体按需取舍只要工具、不要自动注入Agent 自己决定何时用记忆agent Agent( openai:gpt-4o, toolscreate_hindsight_tools(clientclient, bank_iduser-123), )只要自动注入、不给工具agent Agent( openai:gpt-4o, instructions[memory_instructions(clientclient, bank_iduser-123)], )Step 4选择合适的 Bank 策略Bank记忆库是 Hindsight 组织记忆的命名空间所有 retain/recall 操作都以bank_id为锚点按用户建 Bank每用户一个对跟随单个用户的助手类应用是最安全的默认选择按工作流/项目建 Bank当同一个用户操作多个互不相关的系统时更合理绝对避免每次请求轮换 Bank ID那会让 Agent 看起来无状态即使集成本身正确记忆也永远无法被后续会话命中。此外注意工具与指令必须使用同一个 Bank ID否则会出现存进 A 库、从 B 库查的错位。Step 5验证记忆确实生效按以下步骤做端到端验证运行一次 Agent让它记住一条偏好或操作规则触发 retain使用相同的 Bank ID再次运行向它询问该细节检查回答是否在任何显式工具调用之前就已反映先前的记忆即自动注入生效如果未生效检查指令输出内容并确认 recall 使用的是预期的 Bank。判定标准第二次运行能答出第一次运行存下的细节说明配置成功。如果不行开启调试日志、核对配置的 Bank ID并确认 retain 调用确实完成。值得说明的是memory_instructions()具备故障隔离设计源码中指令函数对召回异常采取静默处理直接返回空字符串见 tools.py确保记忆后端短暂不可用时不会阻塞 Agent 主流程而显式工具调用失败则会抛出HindsightError让 Agent 感知错误测试用例见 test_tools.py 中的TestRetainTool/TestRecallTool/TestReflectTool。全局配置与单次覆盖client 解析与参数优先级如果不想在每个调用点都传 client可以先调用configure()做一次全局配置实现见 config.pyfrom hindsight_pydantic_ai import configure, create_hindsight_tools configure( hindsight_api_urlhttps://api.hindsight.vectorize.io, # Hindsight Cloud (default) api_keyyour-api-key, # 或设置 HINDSIGHT_API_KEY 环境变量 budgetmid, # 召回预算low/mid/high max_tokens4096, # 召回结果最大 token 数 tags[env:prod], # 存储记忆时附加的标签 recall_tags[scope:global], # 召回时用于过滤的标签 recall_tags_matchany, # 标签匹配模式any/all/any_strict/all_strict ) # 之后无需传 client直接使用全局配置 tools create_hindsight_tools(bank_iduser-123)api_key缺省时会回退读取HINDSIGHT_API_KEY环境变量见 config.py。参数优先级规则源码见 tools.py 的_resolve_client显式传入的client优先直接使用不再创建新客户端未传 client 时依次回退hindsight_api_url/api_key显式参数 → 全局configure()配置 → 内置默认值若最终仍无 API URL抛出HindsightError(No Hindsight API URL configured...)未显式传入的budget/max_tokens/tags/recall_tags/recall_tags_match会回退到全局配置的默认值。构造函数参数覆盖全局配置tools create_hindsight_tools( bank_iduser-123, budgethigh, # 覆盖全局 budget max_tokens8192, # 覆盖全局 max_tokens tags[session:abc], # 覆盖全局 tags )create_hindsight_tools()参数参考参数默认值说明bank_id必填Hindsight 记忆库 IDclientNone预配置的 Hindsight 客户端hindsight_api_urlNoneAPI URL未提供 client 时使用api_keyNoneAPI 密钥未提供 client 时使用budgetmid召回/反思预算级别low/mid/highmax_tokens4096召回结果最大 token 数tagsNone存储记忆时附加的标签recall_tagsNone搜索时用于过滤的标签recall_tags_matchany标签匹配模式include_retainTrue是否包含 retain存储工具include_recallTrue是否包含 recall搜索工具include_reflectTrue是否包含 reflect合成工具memory_instructions()参数参考参数默认值说明bank_id必填Hindsight 记忆库 IDclientNone预配置的 Hindsight 客户端hindsight_api_urlNoneAPI URL未提供 client 时使用api_keyNoneAPI 密钥未提供 client 时使用queryrelevant context about the user记忆注入的召回查询budgetlow召回预算级别max_results5最多注入的记忆条数max_tokens4096召回结果最大 token 数prefixRelevant memories:\n记忆列表前的前缀文本tagsNone过滤召回结果的标签tags_matchany标签匹配模式configure()参数参考参数默认值说明hindsight_api_urlHindsight Cloudhttps://api.hindsight.vectorize.ioHindsight API URLapi_keyHINDSIGHT_API_KEY环境变量认证密钥budgetmid默认召回预算级别max_tokens4096默认召回最大 token 数tagsNone默认 retain 附加标签recall_tagsNone默认召回过滤标签recall_tags_matchany默认标签匹配模式verboseFalse开启详细日志按标签过滤召回记忆集成同时支持recall_tags与recall_tags_match用于收窄记忆作用域。例如在memory_instructions()中只注入带scope:global标签的记忆instructions_fn memory_instructions( clientclient, bank_iduser-123, queryrelevant context about the user, # 召回查询 budgetlow, # 保持低延迟 max_results5, # 限制注入条数 max_tokens4096, # 召回 token 上限 prefixRelevant memories:\n, # 列表前缀 tags[scope:global], # 标签过滤 tags_matchany, # 标签匹配模式 )标签过滤逻辑会原样透传给底层arecall()的tags与tags_match参数见 tools.pytags_match支持any/all/any_strict/all_strict四种匹配模式测试用例对标签传递的正确性有专门覆盖见 test_tools.py 的test_recall_passes_tags与test_passes_tags。常见错误加了工具却忘记加memory_instructions()导致本应自动召回的上下文没有注入工具和指令使用了不同的 Bank ID造成存取错位在某处覆盖了全局配置却忘了每次调用的实参优先级更高per call arguments win最终行为与预期不符。FAQQ1工具和记忆指令必须同时使用吗不需要。想要自动注入 显式记忆操作就两者都用如果某种设计更适合只用一个完全可以只用其中一个。测试test_tools.py也验证了三个工具可任意组合裁剪包括全部排除。Q2为什么异步支持在这里很重要因为 retain/recall/reflect 全部是异步原生调用aretain/arecall/areflect在 async 应用中接入时无需为记忆调用包一层丑陋的同步包装sync wrapper保持集成简单。Q3能否按标签过滤召回的记忆可以。集成支持recall_tags与recall_tags_match可以按标签收窄记忆作用域详见上文按标签过滤召回记忆章节。下一步若需要托管式记忆后端可从 Hindsight Cloud 起步若想自托管参考仓库中 Hindsight 安装/启动文档本地启动 API 后客户端指向http://localhost:8888完整的集成说明可继续阅读 hindsight-integrations/pydantic-ai/README.md 与 docs-integrations/pydantic-ai.md想要理解 retain/recall/reflect 在服务端的完整语义事实抽取、知识图谱、四种并行搜索策略等可阅读 Hindsight 快速开始文档 的 Whats Happening 章节需要确认底层客户端接口时可查看hindsight-client中aretain/arecall/areflect的实现与对应 API 定义想对比其他 Agent 框架的持久记忆接入方式可浏览仓库内 hindsight-integrations 目录下其他框架如 agno、langgraph、llamaindex 等的同构集成。【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/4 0:44:14

前端换行符失效怎么办?深入解析white-space与空白符折叠

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 5:33:08

MySQL InnoDB DELETE后磁盘空间不释放?一文讲透原理与解决

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 8:04:02

千笔AI:MBA学习场景的AIGC工具解析

1. 项目概述:千笔AI如何重塑MBA学习场景 在商学院的案例研讨室里,经常能看到这样的场景:小组讨论时有人对着电脑屏幕抓耳挠腮,PPT上的数据分析图表迟迟无法成型;凌晨三点的图书馆角落,赶作业的学生对着空白…

2026/11/4 8:04:02

MinIO对象存储Linux部署与S3兼容运维实战

对象存储这个词,第一次接触的人很容易被绕晕:明明服务器上就有文件系统,为什么还要单独跑一套服务来存文件?等真正遇到“用户上传的图片视频越来越多、多台应用服务器都要读同一份文件、还要能对外发临时链接”这类需求时&#xf…

2026/11/4 8:04:02

Linux部署MinIO对象存储:systemd托管、mc运维与反向代理排错

1. 先把话说清楚:MinIO 到底解决什么问题MinIO 是一个兼容 S3 协议的对象存储服务,单文件二进制就能跑起来,装完立刻通过 HTTP 接口读写对象,不需要额外数据库、不需要依赖一堆中间件。这个特性让它在内网文件归档、备份落盘、容器…

2026/11/4 8:04:02

离散事件仿真入门:用simjava2预演排队与调度难题

简介:这份资源围绕离散事件驱动仿真工具SimJava2展开,面向云计算、网格计算方向的学习者与研究人员,以及需要构建复杂计算环境仿真模型的高校师生和工程人员。内容涵盖事件调度机制、模块化实体设计、统计分析与可视化界面等核心特性&#xf…

2026/11/4 8:04:02

生鲜供应链生产加工模块数据库设计与实践

1. 生产加工模块数据库设计概述 在生鲜配送供应链管理系统中,生产加工模块(Manufacturing Domain,简称MD)是整个系统的核心组成部分之一。这个模块负责管理从原材料到成品的整个加工过程,包括BOM(物料清单&…

2026/11/4 7:59:02

轻量级电商后台:SPU/SKU分离+商品状态机+SKU矩阵生成

简介:这是一套基于ASP.NET开发的网络商品销售管理系统源码,面向初学者与Web开发学习者,聚焦商品维护、订单处理与库存管理等核心电商功能实现。资源共55个文件,包含15个DLL动态库(封装业务逻辑)、13个C#源文…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑