ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

为 CrewAI 接入 Hindsight 持久化记忆:ExternalMemory 集成实战指南

为 CrewAI 接入 Hindsight 持久化记忆:ExternalMemory 集成实战指南 为 CrewAI 接入 Hindsight 持久化记忆ExternalMemory 集成实战指南【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight本篇技术指南基于 Hindsight 仓库的 CrewAI 集成指南讲解如何用HindsightStorage实现 CrewAI 的ExternalMemory接口让多智能体 Crew 在多次运行之间获得真实的长时记忆。读完本文你将掌握完整的安装、配置、bank 策略选择与记忆验证流程并理解search()→ recall、save()→ retain 的底层映射原理。为什么这套方案可行CrewAI 已经通过ExternalMemory暴露了清晰的存储边界因此集成方式简单而可预测search()对应 Hindsight 的 recall回忆save()对应 retain留存可选的 per agent banks 让你自行决定记忆在 Crew 内的共享粒度。这一映射关系的具体实现在 storage.py 中HindsightStorage直接实现了 CrewAI 的Storage接口save/search/reset三个方法。对于研究型、规划型和运营型这类会反复执行同一类任务的 Crew这套方案尤其有价值Hindsight 会保留之前运行产生的事实、实体和关系后续运行可以基于 Crew 已经学到的内容继续推进而不是把每次 kickoff 都当成白纸一张。快速答案安装 CrewAI 集成包hindsight-crewai将其指向 Hindsight Cloud 或本地 Hindsight API用稳定的 bank ID 把记忆接入 CrewAI 运行时先存入一条偏好或项目事实再启动一次全新运行确认 recall 能自动把之前的上下文带回来。前置条件已安装 CrewAI并有一个可以端到端运行的 CrewPython 环境以及已安装的hindsight-crewai包一个清晰的记忆规划共享一个 crew bank还是为每个 agent 隔离独立 bank。第一步安装集成包pip install hindsight-crewai从 pyproject.toml 可以看到该包要求 Python 3.10依赖crewai0.86.0,1.10注意CrewAI 1.10 将Storage改名为StorageBackend本集成尚未迁移以及hindsight-client0.4.0。第二步连接 CrewAI 与 Hindsight官方推荐使用 Hindsight Cloud免费额度无需自托管。配置代码示例如下from hindsight_crewai import configure configure( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., # 或设置 HINDSIGHT_API_KEY 环境变量 budgetmid, max_tokens4096, )如果你在本地自托管 Hindsight只需把 API URL 换成http://localhost:8888并去掉api_keyconfigure(hindsight_api_urlhttp://localhost:8888)从源码层面看config.py 定义了全局配置HindsightCrewAIConfig默认 API URL 为https://api.hindsight.vectorize.ioAPI key 优先取传入参数、回退到HINDSIGHT_API_KEY环境变量budget默认midmax_tokens默认4096recall_tags_match默认any。configure()返回配置对象get_config()/reset_config()分别用于读取和重置全局配置。配置参数速查表参数默认值说明hindsight_api_urlHindsight Cloudhttps://api.hindsight.vectorize.ioHindsight API 地址api_keyHINDSIGHT_API_KEY环境变量认证密钥budgetmid召回预算级别low/mid/highmax_tokens4096召回结果的最大 token 数tagsNone存储记忆时附加的标签recall_tagsNone搜索时用于过滤的标签recall_tags_matchany标签匹配模式any/all/any_strict/all_strictverboseFalse启用详细日志按 Storage 实例覆盖全局配置构造函数参数会覆盖全局配置storage HindsightStorage( bank_idmy-crew, budgethigh, # 覆盖全局 budget max_tokens8192, # 覆盖全局 max_tokens tags[team:alpha], # 覆盖全局 tags )这一覆盖逻辑体现在 storage.pyHindsightStorage.__init__中每个设置都按「构造参数 全局配置 默认值」的顺序解析相关行为也有对应测试见 test_storage.py 中的test_constructor_overrides_config与test_falls_back_to_config。第三步把记忆接入你的运行时将HindsightStorage作为ExternalMemory的存储后端挂到 Crew 上from crewai.memory.external.external_memory import ExternalMemory from crewai import Agent, Crew, Task from hindsight_crewai import HindsightStorage crew Crew( agents[Agent(roleResearcher, goalFind information, backstory...)], tasks[Task(descriptionResearch AI trends, expected_outputReport)], external_memoryExternalMemory( storageHindsightStorage(bank_idmy-crew) ), ) crew.kickoff()接入之后CrewAI 会自动完成两件事每个任务开始时查询记忆每个任务完成后把任务输出存入 Hindsight。记忆跨 Crew 运行持久保留Crew 会随时间不断学习。如果你希望 agent 对记忆做显式的推理可以给需要的 agent 挂上HindsightReflectTool——当 Crew 需要在规划下一步之前先综合已有记忆时这个工具特别有用from hindsight_crewai import HindsightReflectTool reflect_tool HindsightReflectTool( bank_idmy-crew, budgetmid, reflect_contextYou are helping a software team track decisions., ) agent Agent( roleAnalyst, goalAnalyze project history, backstory..., tools[reflect_tool], )底层调用链接口如何映射到 Hindsight APICrewAI 接口Hindsight API实际发生的事save(value, metadata, agent)retain(bank_id, content, ...)任务输出被存储Hindsight 从原始文本中抽取事实、实体和关系search(query, limit)recall(bank_id, query, ...)CrewAI 根据任务描述构造查询Hindsight 执行语义搜索、BM25、图遍历与重排reset()delete_bank(bank_id)清空 bank若设置了 mission 则按原 mission 重建在 storage.py 的实现中save()会调用client.retain()并固定写入metadata[source] crewai、metadata[agent]若提供以及从 CrewAI 传入的 metadata值统一转为字符串因为 Hindsight 要求dict[str, str]context 统一为crewai:task_output:{agent or unknown}同时透传tags。search()storage.py调用client.recall()传入budget、max_tokens以及可选的recall_tags/tags_match由于 Hindsight 的结果本身已按相关性排序集成代码按排名生成递减的合成分数1.0 - (i / total)再按score_threshold默认 0.5截断最终转换成 CrewAI 期望的list[dict]格式每条包含context、score和丰富metadatatype、source_context、occurred_start、document_id、tags等。相关行为在 test_storage.py 中有完整覆盖例如test_search_includes_rich_metadata和test_search_synthetic_scores_descend。reset()storage.py调用delete_bank()若设置了mission会立即重建 bank它是 best-effort 语义删除失败只记录警告而不抛出异常见test_reset_is_best_effort。值得注意的实现细节CrewAI 运行在异步事件循环中而 Hindsight 客户端是同步调用直接调用会触发嵌套run_until_complete或跨线程事件循环错误。因此集成在 _compat.py 中用一个max_workers2的线程池承载所有 Hindsight 调用每个线程拥有自己持久的事件循环保证 aiohttp 会话始终绑定在稳定的 loop 上超时上限为 60 秒。这就是为什么你在 API 层看不到任何 async 关键字也能在 CrewAI 中安全使用的原因。第四步选择正确的 bank 策略共享 bank如果多个 agent 协作产出同一个交付物建议先从一个共享的 crew bank 开始——共享记忆更利于协调。隔离 bank当每个角色应保留自己更窄的记忆时开启per_agent_banksTrue。例如 Researcher 与 Writer 不应混入对方留存的每个细节时隔离记忆更适合专业化分工。storage HindsightStorage( bank_idmy-crew, per_agent_banksTrue, # Researcher - my-crew-researcher, Writer - my-crew-writer )需要更细粒度控制时可以使用自定义bank_resolverstorage HindsightStorage( bank_idmy-crew, bank_resolverlambda base, agent: f{base}-{agent.lower()} if agent else base, )从源码看_resolve_bank_id()的逻辑是若提供bank_resolver则完全委托给它否则当per_agent_banksTrue且传入 agent 时使用f{bank_id}-{sanitized_agent}agent 转小写、空格替换为连字符否则回退到基础 bank_id。test_per_agent_banks_resolves_bank_id验证了Data Analyst会被解析为crew-data-analyst。重要限制由于 CrewAI 的search()方法不接收 agent 参数任务开始时的自动搜索默认仍查询基础 bank共享上下文。如需真正的 per agent 搜索隔离请为每个 agent 创建独立的HindsightStorage实例。这一约束也写进了官方文档的提示框见 crewai.md。Bank Mission设置 mission 可以引导 Hindsight 如何加工与组织记忆storage HindsightStorage( bank_idmy-crew, missionTrack software architecture decisions, technical debt, and team preferences., )在 storage.py 中构造时若传入mission会立即惰性去重地调用create_bank()创建或更新 bankreset()后也会按原 mission 重建。第五步验证记忆确实在工作运行一次 Crew让它的输出中包含一个值得记住的事实或决策用相关联的任务再次启动同一个 Crew检查 Crew 是否在没有人工提醒的情况下自动回忆起之前的输出或偏好如果启用了 per agent banks请仔细观察行为——因为任务开始时的自动搜索默认仍查询基础 bank。如果第二次运行能回答出第一次运行中的细节说明配置生效了。如果不行请打开 debug 日志、检查配置的 bank ID并确认 retain 调用确实完成。常见错误期望 per agent 搜索隔离当 CrewAI 不把 agent 传入search()时却没有创建独立的 storage 实例bank mission 写得太含糊无法有效引导记忆抽取导致留存内容杂乱用不同的 bank ID 测试第二次运行然后误以为 recall 坏了——其实只是查错了 bank。FAQ每个 CrewAI agent 都能有自己的 bank 吗可以。设置per_agent_banksTrue或者提供自定义的bank_resolver以获得更精细的控制。二者的解析规则见上文_resolve_bank_id()的实现说明。CrewAI 会自动存储什么CrewAI 在任务完成后自动调用save()Hindsight 集成会将该输出通过retain留存供未来 recall 使用。写入时自动附带sourcecrewai与agent元数据。什么时候应该加 reflect 工具当 agent 需要记忆的综合视图而非原始召回结果时使用。HindsightReflectTool实现在 tools.py调用 Hindsight 的reflect接口基于 bank 的 disposition性格倾向与所有相关记忆生成连贯、有推理的回答而不是零散的事实片段当无相关记忆时会返回 No relevant memories found to reflect on.。其名称固定为hindsight_reflect接收budget与可选的reflect_context相关行为由 test_tools.py 验证。完整示例会跨运行记忆的研究型 Crew下面是一个研究型 Crew 的完整示例它会在多次运行间保留发现也收录于 docs-integrations/crewai.mdfrom hindsight_crewai import configure, HindsightStorage, HindsightReflectTool from crewai.memory.external.external_memory import ExternalMemory from crewai import Agent, Crew, Task configure( hindsight_api_urlhttps://api.hindsight.vectorize.io, api_keyhsk_..., ) storage HindsightStorage( bank_idresearch-crew, missionTrack technology research findings and comparisons., ) reflect_tool HindsightReflectTool(bank_idresearch-crew, budgetmid) researcher Agent( roleResearcher, goalResearch topics, building on prior knowledge., backstoryBefore starting, use hindsight_reflect to check what you already know., tools[reflect_tool], ) writer Agent( roleWriter, goalWrite summaries incorporating prior findings., backstoryUse hindsight_reflect to recall prior research., tools[reflect_tool], ) crew Crew( agents[researcher, writer], tasks[ Task(descriptionResearch the benefits of Rust, expected_outputAnalysis, agentresearcher), Task(descriptionWrite an executive summary, expected_outputSummary, agentwriter), ], external_memoryExternalMemory(storagestorage), ) # Run 1: 研究 Rust 并留存发现 crew.kickoff() # Run 2: 在对比 Go 时自动回忆起 Rust 的研究成果 crew.tasks[0].description Compare Rust with Go crew.kickoff()排错与调试建议开启详细日志在configure(verboseTrue)或HindsightStorage(..., verboseTrue)中开启。此时save()会打印存储的 bank、agent 与文本长度search()会打印召回条数与查询前缀bank 的创建/更新/重置也都有对应日志见 storage.py。确认调用真正完成save()失败会抛出HindsightError错误信息形如 Failed to store memory: ...search()失败抛出 Failed to search memories: ...HindsightReflectTool失败抛出 Reflect failed: ...。异常类型定义在 errors.py可据此判断是网络问题还是配置问题。核对 bank ID验证阶段若更换了 bank ID 或启用了 per agent banks请确认查询的 bank 与写入的 bank 一致。下一步从 Hindsight Cloud 开始把托管记忆后端跑起来阅读完整的 CrewAI 集成文档 与集成包自带的 README了解 Changelog 与更多示例深入 HindsightStorage 源码、全局配置源码 与 reflect 工具源码理解每个参数的实际效果参考 test_storage.py 与 test_tools.py 中的测试用例它们是你验证集成行为是否正确的权威依据。【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表