coding-agents
vectorize-io/hindsightHindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
dsh 长期记忆(基于本地 Hindsight 服务):每轮对话带本地时间写入记忆库,回答前按问题与时间检索并经 reranker 排序后注入上下文;每个工作区绑定一个记忆库,多个工作区可共用同一个库,记忆库可起中文名;记住哪些内容可设置(默认只记用户消息与 AI 回复);以前的对话不自动导入,由用户手动选择导入;提供三步设置页与一键本地部署(自动准备 uv 与 Python 3.12)、侧栏状态卡片及可浏览、搜索记忆的控制面板。默认的向量与排序模型需要一个硅基流动 API 密钥,目前只在 Linux 上实测。
让 DeepSeek Harness(dsh)里的 AI 记住你们聊过的事:换个对话、隔几天再问,它都还记得。
📖 小白使用文档 · 🛠 技术说明 · 📊 压测数据 · ⬇️ 下载最新版
如果这个插件对你有帮助,请点右上角的 ⭐ Star 支持一下!
功能 · 用大白话说 🧠 长期记忆 · 聊过的内容存在你电脑上的记忆库里,关掉 dsh、重开对话都还在。 ⏰ 听得懂时间 · 每条记忆都带着本地时间,问「我早上 7 点干了啥」「昨晚吃的什么」能对上时间段。东八区凌晨到早上 8 点的记忆也已专门修正。 ✍️ 自动记,旧对话手动导入 · 每轮对话会自动写进记忆库。第一次安装不会自动导入以前的对话;想导入时在设置页自己选工作区或单个对话(已归档的对话除外)。 📝 记住哪些内容可选 · 默认只记「我说的话」和「AI 的回复」;工具调用、AI 思考过程、系统提示、已归档对话、子代理对话都可以在设置页单独打开。 🗂 记忆库怎么分 · 每个工作区绑定一个记忆库,互不串台;也可以让几个工作区接入同一个记忆库共用。记忆库可以起中文名字。 🙈 归档的对话不记 · 在 dsh 里归档的对话不会被记住。 🚀 一键本地部署 · 不用打开命令行。没有 Python 也行:插件会自动准备 uv 和 Python 3.12,再装好 Hindsight(默认走国内镜像)。 🟢 状态卡片 + 控制面板 · 左下角的小卡片一眼看出记忆是否正常;点开就是控制面板,能看各记忆库的数量,还能浏览、搜索记忆。 👆 「现在就记住」按钮 · 想马上把某个工作区(或全部对话)记下来,点一下就行,已经记过的不会重复记。 🛡 绝不卡住聊天 · 记忆服务出问题、超时或被限流时,只是暂时「不带记忆」,聊天照常进行。
flowchart LR
U[你在 dsh 里聊天] --> P{插件}
P -- 回答前:按问题和时间检索 --> H[(本地 Hindsight<br/>记忆库)]
H -- 最相关的几条记忆 --> P
P -- 作为背景注入上下文 --> M[dsh 的模型回答]
M -- 这一轮结束后 --> W[插件把对话写入 Hindsight]
W --> H
H -. 后台用 LLM 整理成事实<br/>用 bge-m3 建索引 .-> Hsk- 开头的那串字符。步骤截图见 使用文档。在 dsh 左侧点「Plugins」→ 右上角「+ Add plugin」:
方式 A:从 GitHub 安装(推荐):把下面这行粘进去,点「Install」
https://github.com/snakejohn/dsh-hindsight-local方式 B:下载 zip,从本地文件夹安装(连不上 GitHub 时用):先到 Releases 下载 zip 并解压,再把解压后文件夹的完整路径填进去,点「Install」。
装好后,在「Installed plugins」里能看到 dsh-hindsight-memory,确认开关是打开的。
Invalid port 报错见使用文档的「代理」设置。第一次准备大约需要 3–10 分钟。用途 · 默认 · 说明 整理记忆(LLM) · 跟随 dsh 的默认模型 · 也可以改成自定义,例如硅基流动的 XingChenAGI/Xing4.0-29B(预设),或 DeepSeek(https://api.deepseek.com);选「不整理」时只保存原话。 理解文字(Embedding) · BAAI/bge-m3(硅基流动) · 1024 维 排序(Reranker) · BAAI/bge-reranker-v2-m3(硅基流动) · 留空时退回到纯排名融合(rrf),不调用模型
面板里的设置保存在 dsh 的插件配置中;本地 Hindsight 用到的变量会同步写进插件根目录的 `.env`(只存在你电脑上,你手改过的值也会保留)。
设置(面板 / 配置名) · 默认 · 作用 工作区 → 记忆库 bank.workspace_bank_mapping · 空(自动新建) · 每个工作区绑定一个记忆库;几个工作区可以指向同一个库 ~~共享记忆库~~ bank.default_bank(旧版兼容项) · 空 · 旧版本留下的设置,新用户不用管。设置页里会标成「旧版共享」,点「清除」即可去掉。要让几个工作区共用记忆,请在上面「工作区 → 记忆库」里给它们选同一个库 聊天时自动回忆 recall.enabled · 开 · 关掉就不注入记忆 每次最多回忆几条 recall.top_n · 6 · 注入上下文的记忆条数上限 注入字数上限 recall.max_chars · 4000 · 记忆块的字符上限 自动记住对话 retain.enabled · 开 · 关掉就不写入 启动时补录旧对话 backfill.enabled · 关 · 默认不自动导入;在设置页「现在就记住」里手动导入(不含已归档) 记住哪些内容 retain.include_* · 我说的话 + AI 的回复 · 其余内容(工具调用、思考过程、系统提示等)默认不记 时区 time.timezone · 跟随系统 · 用于记忆时间和「早上 7 点」这类解析 向量维度 embedding.expected_dim · 1024 · 理解文字的模型输出多少个数字(bge-m3 = 1024)。换模型或迁移时必须和原来一致,不一致时插件会拦下并用中文提示,不会写坏已有记忆 端口 service.local.port · 8888 · 本地 Hindsight 监听的端口 LLM 超时 service.local.llm_timeout · 300 秒 · 慢模型也能整理完 写入分块 service.local.retain_chunk_size · 1500 字符 · 长消息切小块处理,避免卡在「处理中」 单次最大输出 service.local.retain_max_completion_tokens · 8000 · 必须大于分块大小(不满足时会自动修正)
更多配置项和环境变量(DSH_HINDSIGHT_*)见 技术说明。
用公开数据集 LoCoMo 做的真实压测。整理记忆用的模型是 DeepSeek V4.1 Flash(deepseek-flash),Embedding 和 Reranker 用硅基流动的免费模型。
指标 · 结果 写入规模 · 992 轮对话 · 3 个记忆库 · 48 次写入,全部成功,0 次限流 花费 · 约 ¥2.37(按 DeepSeek 账户余额前后差计算) 召回命中率 · 50 题中 94%;其中时间类问题 97.2% 上下文节省 · 和把整段历史塞进上下文相比,约省 85%(按字符估算) 召回延迟 P95 · 3.3–4.9 秒(记忆量 172–341 条) 长消息 · 约 1.2 万 token 的长消息 7.6 秒写完,不再卡住
LoCoMo 数据的许可是 CC BY-NC 4.0,这里只用于评测。原始数据见 docs/bench。
服务启动失败怎么办?
面板会用大白话写明「发生了什么、怎么做」,大多数情况点「重试」就行。还不行的话,在状态页点「检查一下」「重新启动」或「重新安装」。需要求助时,在状态页点「导出日志」,把生成的文件发给帮你的人(密钥会自动隐藏)。
提示端口 8888 被占用?
说明有别的程序占用了 8888。可以在高级设置里改端口,或者关掉占用这个端口的程序(Windows 可以用 netstat -ano | findstr :8888 查是哪个程序)。
卡片显示「模型被限流」或「N 段没整理好」?
免费模型和中转程序有频率限制。v0.1.3 起默认一次只整理 1 段(「高级设置 → 同时处理数」),失败的会自动重试,也可以在状态页点「重试失败项」,不会产生重复记忆。经常失败的话,把「整理记忆的模型」改成「自定义 → 硅基流动」,用同一个密钥即可。
卡片显示「模型地址连不上」?
整理记忆用的本机模型地址(例如 127.0.0.1:3425)没有响应,请确认对应的程序已启动。插件这期间暂停写入,连上后自动继续,并重新整理之前失败的部分。
怎么反馈问题?
插件「状态」页最下面点「导出日志」(密钥会自动隐藏),再点「去提问题」,把导出的文件拖进 GitHub 问题表单即可。日志会自动清理(单个 5 MB、保留 14 天),不会越积越大。
写入一直卡在「处理中」?
v0.1.1 默认把长消息切成 1500 字符一块处理,并把超时放宽到 300 秒,实测已经不再卡住。如果还卡住,看一下控制面板的「没记住的」区域和 hindsight.log。
数据存在哪里?
都在你自己的电脑上:
内容 · 位置 记忆数据库 · Hindsight 自带的嵌入式数据库(pg0,名为 dsh-hindsight),Linux 上在 ~/.pg0 Python 环境 · ~/.dsh-hindsight/venv 日志 · ~/.dsh-hindsight/logs/ 写入进度 · ~/.dsh-hindsight/state 服务配置(含密钥) · 插件根目录的 .env
怎么备份记忆、换电脑,或把本地服务改成独立服务?
见使用文档的 迁移和备份记忆 一章:记忆存在哪里、怎么备份和恢复、怎么把插件自己的本地服务改成一直开着的独立服务、怎么合并或拆分记忆库。每一步都实测过,没实测的地方都标出来了。
我已经有一个 Hindsight 服务了,能直接用吗?
能。设置里选「已经配置好了」,填地址(和密码,如果服务开了的话)。插件只连接它,不会启动、停止或修改它;服务中途停了,聊天照常,漏记的对话会在服务恢复后自动补上。
怎么卸载?
~/.dsh-hindsight 文件夹和插件目录。~/.pg0 里;如果电脑上没有别的程序在用 pg0,也可以一并删除。插件不会自动检查新版本,需要手动升级:
git pull,然后重启 dsh。.env),然后重启 dsh。记忆数据和 ~/.dsh-hindsight 里的内容不受升级影响。更新内容见 更新日志。
.env 和 dsh 自己的配置里)。插件不会把密钥写进日志,也不会上传到别处。欢迎提 Issue 和 Pull Request。提交前请先跑一遍测试:
npm test