Hindsight 多语言记忆系统:从语言感知的事实提取到 BM25 索引选型

发布时间:2026/9/14 14:04:47

Hindsight 多语言记忆系统:从语言感知的事实提取到 BM25 索引选型 Hindsight 多语言记忆系统从语言感知的事实提取到 BM25 索引选型【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight本文基于 Hindsight 官方文档《Multilingual Support》展开深入讲解该项目如何实现输入什么语言、记忆与响应就保持什么语言的多语言能力包括 retain/recall/reflect 全流程中的语言保持机制、多语言嵌入与重排模型配置、五种 BM25 全文检索后端的 CJK 适配差异以及HINDSIGHT_API_LLM_OUTPUT_LANGUAGE强制输出语言参数的底层实现。读完后你可以为一套中文/日文为主的 Agent 记忆库完成完整的模型与索引选型并理解每条配置在源码中的实际作用点。核心机制用 LLM Prompt 指令实现语言检测Hindsight 会自动检测输入内容的语言并让事实facts、实体entities和 reflect 响应保持原始语言而不会翻译成英文。官方给出的处理链路如下当你 retain 内容或发起 reflect 查询时Hindsight 会依次完成四步自动检测输入语言——从内容本身推断以原始语言提取事实——保留语气与语义细节以原生文字存储实体——张伟 保持为 张伟而不是 Zhang Wei以相同语言响应——中文查询得到中文回答。值得强调的是文档Technical Details部分明确指出多语言支持完全通过 LLM Prompt 指令实现而不是依赖外部语言检测库。从源码可以印证这一点retain 的事实提取 Prompt 中直接内置了一条强制性的语言规则见 fact_extraction.pyLANGUAGE: MANDATORY — Detect the language of the input text and produce ALL output in that EXACT same language. You are STRICTLY FORBIDDEN from translating or switching to any other language. Every single word of your output must be in the same language as the input. ...这条规则被注入 retain、consolidation、reflect 各环节的 Prompt 模板模板中含{language_section}占位符。这种方案的好处是文档所列的四点无额外依赖、适用于任何支持多语言的 LLM、天然处理混合语言边缘情况、比基于规则的翻译更好地保留语义。Retain 非英文内容retain 任意语言的内容时Hindsight 都会以相同语言提取并存储事实。示例中文内容from hindsight import Hindsight hindsight Hindsight() # Retain 中文内容 hindsight.retain( bank_iduser-123, content 张伟是一位资深软件工程师在腾讯工作了五年。 他专门研究分布式系统并领导了公司微服务架构的开发。 , context团队概述 ) # 用中文查询——得到中文结果 results hindsight.recall( bank_iduser-123, query告诉我关于张伟的信息 ) # 事实以中文返回 # - 张伟是一位资深软件工程师在腾讯工作了五年 # - 张伟专门研究分布式系统并领导了公司微服务架构的开发示例日文内容hindsight.retain( bank_iduser-123, content 田中さんはソフトウェアエンジニアで、東京のスタートアップで働いています。 彼女はPythonとTypeScriptが得意で、毎日コードレビューをしています。 , contextチームプロフィール ) # 用日文查询 results hindsight.recall( bank_iduser-123, query田中さんについて教えてください )Reflect 对非英文查询的语言响应reflect操作同样尊重输入语言会以与查询相同的语言生成回答。示例中文反思# 存储团队成员的事实中文 hindsight.retain( bank_idteam-eval, content张伟是一位优秀的软件工程师完成了五个重大项目。他总是按时交付代码整洁有良好的文档。, context绩效评估 ) hindsight.retain( bank_idteam-eval, content李明最近加入团队。他错过了第一个截止日期代码有很多bug。, context绩效评估 ) # 用中文 reflect result hindsight.reflect( bank_idteam-eval, query谁是更可靠的工程师 ) # 响应为中文 # 我认为张伟更可靠。张伟完成了五个重大项目按时交付代码质量高...reflect 环节的语言控制同样来自 Promptreflect/prompts.py 与 reflect/agent.py 都会把语言指令或强制语言指令织入系统 Prompt 与工具 schema保证最终的自然语言回答与查询同语言。混合语言内容Hindsight 也能优雅地处理混合语言内容在合适的位置同时保留两种语言。示例含英文公司名的中文文本hindsight.retain( bank_iduser-123, content 王芳在Google北京办公室工作她是一名高级产品经理。 之前她在Microsoft和Amazon工作过。 她负责管理YouTube在中国市场的推广策略。 , context员工资料 ) # 事实同时保留两种语言 # - 王芳在Google北京办公室工作担任高级产品经理 # - 王芳曾在Microsoft和Amazon工作过 # - 王芳负责管理YouTube在中国市场的推广策略这与源码中专名永不翻译的规则一致prompt_utils.py 的语言指令明确要求实体名entity names保持原样因此 Google、Microsoft、YouTube 等专有名词不会被转写。支持的语言范围Hindsight 的多语言能力完全取决于你所用 LLM 的语言能力。Hindsight 只是指示 LLM 检测输入语言并以该语言响应——如果 LLM 支持某种语言Hindsight 就能处理它。大多数现代 LLMGPT-4、Claude、Gemini、Llama 3 等支持数十种语言包括东亚中文简体/繁体、日文、韩文欧洲西班牙语、法语、德语、意大利语、葡萄牙语、荷兰语、波兰语、俄语中东阿拉伯语、希伯来语、土耳其语南亚印地语、孟加拉语、泰米尔语东南亚泰语、越南语、印尼语验证目标语言支持的正确做法是直接用该语言内容测试你的 LLM如果模型能理解并生成该语言文本Hindsight 就能正确保持它。多语言配置四个组件的完整选型要获得最优的多语言效果需要配置管道的四个组件。下面逐个展开并结合源码说明每个配置项的真实作用点。1. LLM必需你的 LLM 必须支持目标语言。大多数现代 LLM 都支持但请用你实际使用的具体模型验证。2. 嵌入模型推荐默认嵌入模型BAAI/bge-small-en-v1.5是纯英文的——这一点在 config.py 中可以看到常量定义DEFAULT_EMBEDDINGS_LOCAL_MODEL BAAI/bge-small-en-v1.5。对多语言内容应改用多语言嵌入模型# 在 .env 文件中 HINDSIGHT_API_EMBEDDINGS_LOCAL_MODELBAAI/bge-m3推荐的多语言嵌入模型模型语言数说明BAAI/bge-m3100多语言综合表现最佳intfloat/multilingual-e5-large100良好替代方案sentence-transformers/paraphrase-multilingual-MiniLM-L12-v250更轻量3. 重排模型推荐默认重排器cross-encoder/ms-marco-MiniLM-L-6-v2同样是纯英文的见 config.py 的DEFAULT_RERANKER_LOCAL_MODEL。多语言内容请换用多语言重排器# 在 .env 文件中 HINDSIGHT_API_RERANKER_LOCAL_MODELBAAI/bge-reranker-v2-m3推荐的多语言重排器模型模型语言数说明BAAI/bge-reranker-v2-m3100多语言重排最佳cross-encoder/mmarco-mMiniLMv2-L12-H384-v114更轻量的替代4. BM25 / 全文检索后端语义嵌入检索臂负责按语义的跨语言匹配Hindsight 会并行运行一条 BM25 关键词检索臂。而BM25 本质上是语言内的——它是针对分词器词素的字符/token 精确匹配。默认的native后端使用 PostgreSQL 的英文词典对非英文内容效果很差对没有空格分词边界的中文/日文/韩文更是完全无法有效分词。这里有两个相互关联的开关HINDSIGHT_API_TEXT_SEARCH_EXTENSION——选择后端native、vchord、pg_textsearch、pgroonga或pg_search。HINDSIGHT_API_TEXT_SEARCH_EXTENSION_NATIVE_LANGUAGE——选择native后端使用的 PostgreSQL 词典默认english。按 bank 中存储的语言选择后端后端多语言/CJK说明native仅欧洲语言英、法、德、西、意、葡、俄、荷、瑞典语、挪威语、丹麦语、芬兰语、匈牙利语、土耳其语、阿拉伯语以及simple。CJK 需要zhparser等第三方词典。原生 PostgreSQL无需额外扩展。语言通过HINDSIGHT_API_TEXT_SEARCH_EXTENSION_NATIVE_LANGUAGE配置。vchord通过llmlingua2分词器支持多语言。如果你已经在用 vchord 做向量检索这是最优选。pg_textsearch仅英文硬编码。工业标准 BM25 排序 Block-Max WAND。pgroonga开箱即用。单个索引即可处理英文、CJK 及混合文字内容基于TokenBigram多语言分词器 NormalizerNFKC150Unicode 归一化。非英文/多语言 bank 的推荐选择。需要pgroonga扩展见 docker/docker-compose/pgroonga。pg_search通过可配置分词器支持多语言如chinese_compatible、jieba、chinese_lindera、japanese_lindera、korean_lindera、ngram。ParadeDBpg_search扩展唯一兼容 Citus 的 BM25 后端。分词器通过HINDSIGHT_API_TEXT_SEARCH_EXTENSION_PG_SEARCH_TOKENIZER设置见 docker/docker-compose/pg_search。单语言 bank 的选型例如全是西班牙语文本HINDSIGHT_API_TEXT_SEARCH_EXTENSIONnative HINDSIGHT_API_TEXT_SEARCH_EXTENSION_NATIVE_LANGUAGEspanishCJK 或多语言 bank 的选型HINDSIGHT_API_TEXT_SEARCH_EXTENSIONpgroonga注意native与pgroonga的开关互不适用——pgroonga的分词器在索引创建时确定会忽略HINDSIGHT_API_TEXT_SEARCH_EXTENSION_NATIVE_LANGUAGE。从源码看native后端的语言配置最终落地在 SQL 的to_tsvector调用上ops_postgresql.py 会生成形如to_tsvector({config.text_search_extension_native_language}::regconfig, ...)的表达式即 PostgreSQL 全文索引的词典由该参数直接决定。而 pgroonga 臂则调用pgroonga_tokenize(..., TokenBigram, NormalizerNFKC150)这一点可在 test_multilingual_bm25.py 的断言中得到验证。配置项本身在 config.py 中定义并且text_search_extension_native_language会经过 PostgreSQL 标识符合法性校验正则[a-zA-Z_][a-zA-Z0-9_]*防止拼入任意 SQL。强制指定 LLM 输出语言独立于 BM25 后端之外HINDSIGHT_API_LLM_OUTPUT_LANGUAGE会把所有LLM 生成产物统一固定到单一语言与源内容语言无关。它统一作用于Retain——从源文档提取的事实文本、上下文、实体名Consolidation——由这些事实合成的观察observations/ 心智模型Reflect——reflect API 返回的最终自然语言响应。# 所有 LLM 调用retain、consolidation、reflect无论源语言都输出西班牙语。 HINDSIGHT_API_LLM_OUTPUT_LANGUAGESpanish这一机制的实现在 prompt_utils.pyoutput_language_directive()为 retain 的事实提取、consolidation 与 reflect 追加统一指令——IMPORTANT: Respond exclusively in {language}. Translate any source content into {language}. All output text — including fact text, observations, entity names, and the final response — must be in {language}.一个值得注意的实现细节default_language_section()与output_language_directive()是互斥的——一旦设置了显式输出语言保持源语言的默认规则会被整体移除而不是与新指令并存源码注释说明两条指令同时出现时模型会因保持源语言规则语气更强而静默忽略配置见 issue #3776 的记录。相关行为可由 test_retain_reflect_output_language.py 与 test_consolidation_output_language.py 复验。常见配置模式对齐的单语言 bankHINDSIGHT_API_TEXT_SEARCH_EXTENSION_NATIVE_LANGUAGEspanishHINDSIGHT_API_LLM_OUTPUT_LANGUAGESpanish——即使源语言混杂也以西班牙语存储、索引、响应带多语言索引的混合语言 bankHINDSIGHT_API_TEXT_SEARCH_EXTENSIONpgroonga 不设置HINDSIGHT_API_LLM_OUTPUT_LANGUAGE——事实保持源语言pgroonga 用单个索引处理所有语言reflect 按查询语言响应跨语言归一化HINDSIGHT_API_LLM_OUTPUT_LANGUAGEEnglish——无论源语言所有事实、观察、reflect 响应统一为英文。适用于消费端仅英文的 LLM、仪表盘或下游管道需要统一输出格式的场景。不设置HINDSIGHT_API_LLM_OUTPUT_LANGUAGE时管道会保持源语言/查询语言默认行为。未设置输出语言时的默认行为不设置HINDSIGHT_API_LLM_OUTPUT_LANGUAGE时retain 与 consolidation 都会被指示保持源材料语言输出。对 observations观察而言语言按单条 observation 决定依据其构建所基于的事实——而不是整个批次。一个混合了中英文事实的批次会为中文事实产出中文观察、为英文事实产出英文观察。若一条 observation 合并了多种语言的事实则以这些事实中的多数语言为准。更新跟随新事实的语言。当既有 observation 的语言与更新它的新事实不同时整条 observation 会按新事实的语言重写。一个 observation 曾漂移到错误语言的 bank会随着新事实到达而逐步收敛回来。专名与技术术语永不翻译——专有名词、产品名、地名、标识符、代码、单位无论周围语言是什么都按源事实的原文保留。需要明确边界这是Prompt 级别的引导不是硬保证——一个不遵守指令的模型仍可能输出错误语言。若某个 bank 必须无论源内容如何都保持单一语言请显式设置HINDSIGHT_API_LLM_OUTPUT_LANGUAGE。最佳实践1. 非英文内容使用多语言模型如果你的主要工作语言不是英文请配置多语言嵌入与重排模型。纯英文模型仍能正确存储你的内容但语义检索质量会下降。2. 每次 retain 调用保持单一语言混合内容虽然可以工作但让每次retain调用集中在单一语言上结果更一致。3. 用与内容相同的语言查询最佳效果是用与存储内容相同的语言查询。跨语言查询例如用英文查询中文内容可能有效但效果取决于你的嵌入模型结果会有波动。小结Hindsight 的多语言体系是一条完整的链路语言检测与保持由 Prompt 指令完成无需额外依赖库嵌入/重排模型负责语义臂的跨语言能力BM25 后端pgroonga/pg_search等负责语言内的关键词召回而HINDSIGHT_API_LLM_OUTPUT_LANGUAGE则提供一条一刀切的归一化开关。部署 CJK 为主的记忆库时官方文档与 docker/docker-compose/pgroonga/docker-compose.yaml、docker/docker-compose/pg_search/docker-compose.yaml 提供了可直接参考的容器化参考配置完整文档见 hindsight-docs/versioned_docs/version-0.9/developer/multilingual.md。【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/14 13:59:47

Go语言WebSocket实战:构建高性能实时通信服务

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

2026/9/14 13:59:47

Docker 端口占用,Codex 跑排障:Key 用 TaoToken

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

2026/9/14 13:59:47

Arnis:30 分钟在 Minecraft 里复刻一座真实城市,免费开源

Arnis:30 分钟在 Minecraft 里复刻一座真实城市,免费开源 【免费下载链接】arnis Generate any location from the real world in Minecraft with a high level of detail. 项目地址: https://gitcode.com/GitHub_Trending/ar/arnis 框出老家所在…

2026/9/14 14:49:53

基于ASP.NET的体检信息管理系统设计与实现全解析

简介:这是一款基于ASP.NET与SQL Server的医院体检信息管理系统源码,面向需要完成毕业设计或课程设计的计算机相关专业学生。系统包含预约用户、医生、管理员三种角色,管理员可进行套餐管理、医生管理、体检人员管理、体检管理及通讯录管理&am…

2026/9/14 14:49:53

C语言职工信息管理系统:链表实现与文件持久化全解析

简介:面向C语言学习者与计算机专业学生的职工信息管理系统设计与实现资源包,定位为课程设计、期末项目或实训的完整对照参考。资源不仅包含可运行的工程源码,还配套系统设计文档、环境配置与项目导入讲解,帮助读者从零搭建开发环境…

2026/9/14 14:49:53

AI文献综述工具:原理、应用与学术伦理探讨

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

2026/9/14 14:49:53

18650锂电池热失控原理与安全防护技术

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

2026/9/14 14:49:53

基于Python Flask的身份证识别系统:PaddleOCR与OpenCV完整实现

简介:一份基于 Python Flask 的身份证识别系统毕业设计源码包,面向计算机相关专业毕业生与 Flask 入门开发者。项目采用前后端分离思路,后端以 Flask 提供数据接口,前端使用 HTML5、CSS3、JavaScript 及 jQuery、Bootstrap 构建页…

2026/9/14 14:44:52

Fortran 77 文件读取:逻辑单元号与 OPEN/READ/CLOSE 完整流程解析

简介:本资源是一份面向Fortran初学者与科学计算实践者的文件读取教学实践包,聚焦Fortran 77标准下结构化数据的可靠读取,解决科研建模、工程仿真中常见的文本/数值文件解析痛点。压缩包共12个文件,涵盖核心源码(.f90&a…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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