Hindsight × Google ADK:为 ADK Agent 接入持久化长期记忆的两种实战模式

发布时间:2026/11/15 15:03:35

Hindsight × Google ADK:为 ADK Agent 接入持久化长期记忆的两种实战模式 Hindsight × Google ADK为 ADK Agent 接入持久化长期记忆的两种实战模式【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsightHindsight 为 Google ADKAgent Development KitAgent 提供持久化的长期记忆能力官方集成包hindsight-google-adk通过自动记忆HindsightMemoryService实现 ADK 的BaseMemoryService与显式工具create_hindsight_tools返回hindsight_retain/hindsight_recall/hindsight_reflect三个FunctionTool两种互补模式接入会话生命周期。本文基于仓库中 google-adk 集成文档 与 集成包源码完整讲解安装、配置、Bank ID 推导、标签隔离与生产实践并深入到源码与测试验证底层行为读完即可在项目中落地可跨会话复用的 Agent 记忆。集成原理两种互补的接入模式hindsight-google-adk源码位于 hindsight-integrations/google-adk是 Hindsight 与 Google ADK 之间的桥梁其init.py 对外暴露了核心 API。两种模式解决的是不同层面的问题HindsightMemoryService实现 ADK 的BaseMemoryService。将其传给Runner(memory_service...)后会话结束时由 Runner 自动触发记忆保留Agent 调用search_memory时从 Hindsight 返回匹配结果。适合零侵入、全自动的接入方式。create_hindsight_tools(...)返回一组 ADKFunctionToolhindsight_retain、hindsight_recall、hindsight_reflect由模型在单轮对话内自主决定何时调用。适合需要精细控制记忆写入/读取时机的场景。两种模式可以同时使用Runner(memory_service...)负责会话结束时的自动 retaintoolscreate_hindsight_tools(...)负责轮次中的 Agent 主动 recall只要 Bank ID 对齐两者共享同一个记忆库。安装与环境要求pip install hindsight-google-adk根据 pyproject.toml 声明运行时要求如下要求版本Python3.10支持 3.10 / 3.11 / 3.12google-adk2.0hindsight-client0.4.0仓库内已提供 uv.lock 锁定依赖版本开发组件的测试依赖pytest、pytest-asyncio、ruff定义在pyproject.toml的[dependency-groups]中。模式一自动记忆BaseMemoryService将HindsightMemoryService注入 Runner会话结束后记忆自动落库import asyncio from google.adk.agents import LlmAgent from google.adk.runners import Runner from google.adk.sessions import InMemorySessionService from hindsight_google_adk import HindsightMemoryService memory HindsightMemoryService.from_url( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., ) agent LlmAgent(nameassistant, modelgemini-2.0-flash) runner Runner( app_namemy-app, agentagent, session_serviceInMemorySessionService(), memory_servicememory, ) # ... 正常使用 runner.run_async(...)记忆完全自动源码层面的行为验证从 memory.py 可以确认自动记忆的完整链路会话写入add_session_to_memory(session)将会话内所有事件的文本部分按author: text格式逐行拼接_events_to_document见 memory.py并以session.id作为document_id调用aretain写入 Hindsight会话为空或没有文本内容时直接跳过不产生空文档。事件级写入add_events_to_memory(...)支持增量保留单批事件document_id形如{session_id}-{随机8位hex}无 session_id 时前缀为events-并自动附加session:{session_id}标签。记忆条目写入add_memory(...)将 ADK 的MemoryEntry逐条转换为 Hindsight retain 调用author与custom_metadata会并入 metadata。查询映射search_memory(...)调用arecall把返回结果映射为MemoryEntryauthorhindsight、携带timestamp再包装为 ADK 的SearchMemoryResponse返回。关键的设计决策是容错所有add_*与search_memory在 Hindsight 调用失败时只记录 ERROR 日志、绝不向 Runner 抛异常保证记忆后端故障不影响 Agent 主流程见 memory.py。相关行为在 tests/test_memory.pyretain 失败仅记录日志与 tests/test_memory.pyrecall 失败返回空结果中有测试覆盖。Bank ID 推导记忆如何按用户隔离默认情况下每一对(app_name, user_id)拥有独立的 Hindsight Bank{app_name}::{user_id}例如测试用例 test_bank_id_default_template 验证(apple, alice)对应bank_id apple::alice。该模板是HindsightAdkConfig.bank_id_template的默认值见 config.py并通过_bank_id()方法用str.format渲染见 memory.py。可通过bank_id_template覆盖实现不同的隔离粒度# 按用户隔离、跨应用共享 HindsightMemoryService.from_url( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., bank_id_templateuser::{user_id}, ) # 静态 Bank全用户共享 HindsightMemoryService.from_url( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., bank_id_templatemy-shared-bank, )模板中必须含{app_name}或{user_id}占位符才能动态推导静态字符串则让所有用户/应用落同一个 Bank。模式二显式工具FunctionTool当希望模型在轮次内自主决定读写记忆时使用工具工厂from google.adk.agents import LlmAgent from hindsight_google_adk import create_hindsight_tools tools create_hindsight_tools( bank_iduser-123, hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., ) agent LlmAgent( nameassistant, modelgemini-2.0-flash, toolstools, )Agent 会获得三个工具可用include_retain/include_recall/include_reflect开关裁剪默认全部开启见 tools.pyhindsight_retain(content)— 将信息存入长期记忆调用aretain成功返回Memory stored successfully.hindsight_recall(query)— 搜索记忆并返回编号列表例如1. ...\n2. ...无结果时返回友好提示No relevant memories found.hindsight_reflect(query)— 基于记忆综合生成连贯答案调用areflect返回response.text。工具实现细节tools.py值得注意三个工具均为异步函数通过FunctionTool(...)包装后可直接传给LlmAgent(tools[...])hindsight_recall支持recall_types事实类型过滤world/experience/observation与recall_include_entities结果附带实体信息hindsight_reflect额外支持reflect_context补充上下文、reflect_response_schemaJSON Schema 约束输出格式、reflect_tags/reflect_tags_match默认回退到recall_tags/recall_tags_match与自动模式不同显式工具在失败时会将底层异常包装为HindsightError抛出见 tools.py让 Agent 感知失败并做出反应。测试见 tests/test_tools.py。全局配置 configure()统一默认值在应用启动时调用一次configure(...)后续所有HindsightMemoryService.from_url()/create_hindsight_tools()都会以全局配置作为回退默认值from hindsight_google_adk import configure configure( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyNone, # 未提供时回退到 HINDSIGHT_API_KEY 环境变量 budgetmid, max_tokens4096, bank_id_template{app_name}::{user_id}, )其实现位于 config.pyconfigure()会把参数解析为HindsightAdkConfig存入模块级全局变量api_key为空时读取HINDSIGHT_API_KEY环境变量HindsightMemoryService构造与create_hindsight_tools内部分别通过get_config()回退取值见 memory.py 与 tools.py。测试中还提供了reset_config()用于清理全局状态。注意configure()返回HindsightAdkConfig且全局只保留一份多次调用会覆盖。若同时显式传参如from_url(url..., api_key...)显式参数优先于全局配置。配置参考Configuration Reference完整参数语义如下默认值与文档 google-adk.md 及 config.py 一致参数默认值说明hindsight_api_urlhttps://api.hindsight.vectorize.ioHindsight API 地址默认指向 Cloudapi_keyHINDSIGHT_API_KEY环境变量Hindsight Cloud 的 Bearer Tokenbank_id_template{app_name}::{user_id}由 ADK 的app_name/user_id推导 Bank ID 的格式串budgetmid召回预算等级low/mid/highmax_tokens4096召回结果的最大 token 数tagsNone追加到每条 retain 文档的标签app:name与user:id总是被自动加入recall_tagsNone追加到 recall 查询的标签user:id总是被自动加入recall_tags_matchany标签匹配模式any/all/any_strict/all_strictmissionNone若设置首次使用时以该事实提取使命幂等创建 Bankcontextgoogle-adk附加到 retain 内容的来源标签provenanceverboseFalse是否启用详细日志源码中新增参数客户端解析与超时HindsightMemoryService.from_url()与create_hindsight_tools()共用 resolve_client() 完成客户端解析优先级为显式client 显式 URL/Key 全局配置未配置任何 URL 时抛出HindsightError。客户端还会附带hindsight-google-adk/{版本}的 User-Agent并为不同操作预设了超时retain 15s、recall 10s、reflect 30s、bank 15s、默认 30s见 _client.py。生产实践按环境给记忆打标签HindsightMemoryService.from_url( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., tags[env:prod], recall_tags[env:prod], )app:与user:标签总会叠加在自定义标签之上。回忆侧总是附加user:id从而天然隔离不同用户——测试 test_user_tag_added_to_recall 验证了 recall 时user:alice与env:prod同时出现在标签中。自托管 HindsightSelf-hostedHindsightMemoryService.from_url( hindsight_api_urlhttp://localhost:8888, )未认证的本地服务无需api_key。自动记忆 显式工具组合runner Runner( app_namemy-app, agentagent, session_serviceInMemorySessionService(), memory_serviceHindsightMemoryService.from_url(...), # 会话结束自动 retain ) # 同时给 Agent 挂上 mid-turn 主动 recall 的工具 tools create_hindsight_tools(bank_idmy-app::user-123, ...)自动 retain 与 Agent 驱动的 mid-turn recall 各司其职只要bank_id_template推导出的 Bank 与工具传入的bank_id一致二者共享同一记忆库。更多细节可参阅集成包自身的 README 与 变更记录。总结hindsight-google-adk为 Google ADK 开发者提供了自动记忆与显式工具两条互补路径前者通过实现BaseMemoryService实现零侵入的会话级记忆持久化与查询后者通过三个FunctionTool让模型在轮次内自主读写记忆。二者共享同一套以bank_id_template驱动的 Bank 隔离机制与app:/user:标签体系既支持开箱即用的 Hindsight Cloud也支持http://localhost:8888的自托管部署且所有自动记忆操作对 Runner 完全容错。结合源码中的超时配置、标签匹配模式与mission幂等建库等细节开发者可以按生产需求精细调整记忆的写入、隔离与检索行为。【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/15 0:48:29

国外主流蜜罐产品深度解析:欺骗诱捕技术的演进与应用

搞安全这么多年,我一直觉得“蜜罐”是个被低估的防御武器。很多人一听到蜜罐,脑子里还是“在服务器上放几个假端口,记录一下扫描流量”,实际上国外主流蜜罐产品这些年已经从单纯的“诱饵”长成了一套完整的欺骗诱捕技术体系。这篇…

2026/11/14 6:48:56

OpenProject 如何用 Docker all-in-one 容器完成首次安装?

OpenProject 如何用 Docker all-in-one 容器完成首次安装? 【免费下载链接】openproject OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning,…

2026/11/13 15:23:04

V免签详解:个人开发者如何实现免签约收款与自动对账

简介:面向具备PHP基础并希望接入免签约收款能力的开发者,这份基于Thinkphp内核框架的V免签支付系统,集成了支付宝、微信的支付回调与安卓端收款实时监控功能,可直接用于个人网站、变现项目或中小商户的订单管理。资源共297个文件、…

2026/11/15 15:00:04

日照电工证考试在哪报名入口与办理流程

日照电工证考试在哪报名入口与办理流程 实操考试心里没底怕挂科?很多在日照做电工的朋友都面临这个问题,尤其是刚入行的工人,对考试流程和内容了解不多,怕一不小心就掉链子,影响拿证进度,更怕影响后续工作安排。但其实只要流程走对, 电子证书…

2026/11/15 15:00:04

和顺县电工证值不值得考?别被中介坑了,看这篇就够了

和顺县电工证值不值得考?别被中介坑了,看这篇就够了 你是不是正愁不知道哪里报名考电工证,怕被中介坑?别急,今天就从 和顺县电工证 的报考流程、考试内容、证书价值等方面,帮你理清楚思路, 值不值得考 的问题,咱们一步步来看。 ### 1.…

2026/11/15 15:00:04

出国电工证怎么复审?2026河南最新政策详解

出国电工证怎么复审?2026河南最新政策详解 之前考的证在外省能不能转过来?这几乎是每个在外地打工、准备回河南发展的电工朋友最关心的问题。特别是2026年河南最新政策出台后,很多小伙伴都在问,出国电工证怎么复审?是不是得重新考?其实不用太担…

2026/11/15 15:00:04

先考电工证还是二建好 这些考前押题你必须知道

先考电工证还是二建好 这些考前押题你必须知道 证书过期了不知道怎么复审延期,这种情况在特种作业操作证的持有者中并不少见,尤其是在一线施工和作业人员中。很多人在拿到电工证、焊工证或高处作业证后,忙于工作,忽略了证书的复审和延续,结果一不小心就…

2026/11/15 14:55:04

电工作业特种培训多久拿证?学历不高也能考

电工作业特种培训多久拿证?学历不高也能考 你是不是也担心自己学历不高,连特种作业证都报不上名?别慌,电工作业特种培训其实是 没有学历门槛 的,只要你满足年龄和健康条件,就完全有机会拿到低压电工证或高压电工证。而且,从报名到拿证,…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 4:46:37

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

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

2026/11/15 2:06:31

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
免费获取方案
☎咨询二维码 ☎ ↑