dsh-ocr1-memory/dsh-plugins/dsh-ocr1-memory

7Star1Fork0Issue0Watching

基于 DeepSeek-OCR 的光学压缩记忆插件,把记忆渲染成图像存储,按年龄降分辨率并自动恢复高清检索。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科

此插件是大仓库 DDDFXYqiming/Agent_Extensions 的子包,星数与活跃度统计的是整个仓库。

语言
JavaScript
License
MIT
分支
main
agent-skillsai-agentdeepseek-harnessdsh-pluginprompt-engineeringpythonskillstranslation

安装

$ dsh plugin --profile web add github:DDDFXYqiming/Agent_Extensions#path:dsh-plugins/dsh-ocr1-memory

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 DDDFXYqiming/Agent_Extensions/dsh-plugins/dsh-ocr1-memory:先查看仓库 https://github.com/DDDFXYqiming/Agent_Extensions.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

把 DSH Agent 的记忆存成"图像"而非纯文本:每条记忆渲染为带编号的 PNG,旧记忆按年龄自动降分辨率,检索命中时用 DeepSeek-OCR 读回原文片段。

核心能力

  • 文本入库自动分段并渲染成图像(SoM 编号),存到本地记忆库
  • 按年龄自动降分辨率:vivid(1280px, 24h 内) → normal(1024px, 7 天内) → fuzzy(640px, 更久)
  • 检索命中低清记忆时自动触发 active recall 临时恢复高清
  • 用 OCR 读回图像作为召回证据,返回原始原文片段而非生成式摘要
  • 存储 1280 维视觉向量(DeepSeek-OCR embeddings),用余弦相似度作为检索主信号
  • 提供 9 个 Agent 可直接调用的工具:状态/存储/更新/检索/列表/压缩比指标/基线校准/删除/渲染与 embedding 自测

技术实现

  • 语言: JavaScript(Node ESM,零运行时依赖)
  • 关键依赖: @deepseek-ai/dsh-tools(注册 Agent 工具)、@deepseek-ai/schemastery(配置 schema)、Python + Pillow(图像渲染);可选 DeepSeek-OCR 后端(vLLM 或 llama.cpp GGUF)做读回与 embedding
  • 架构模式: 通过 inject=['tools'] 把 9 个 ocr1_mem_* 工具挂到宿主 tools 服务;配置经 cordis.patch.yml 注入;apply(ctx, config) 启动时按配置构建渲染器 + OCR 客户端 + embedding 客户端,并可按需自动拉起 llama-server
  • 入口文件: lib/index.js(apply 入口注册所有工具),lib/core.js(记忆引擎、检索算法、渲染管线),lib/ocr-server.js(llama-server 生命周期)

适用场景

适合需要给 DSH Agent 配备"持久 + 长期 + 可视觉化"记忆的场景,例如让 Agent 记住文档要点、项目知识、用户偏好,并在多轮对话中按需召回原文片段。如果只是需要轻量文本记忆,官方 dsh-memory 更省事;如果希望记忆按时间自然"褪色"且能 OCR 读回图像证据,这个插件提供了官方记忆不具备的能力。

前置依赖与兼容性

依赖最低版本说明
Node.js>=22.19.0engines.node 声明
@deepseek-ai/cordis>=4.0.0-rc <5peerDependencies
@deepseek-ai/dsh-tools>=0.0.1-rc <2peerDependencies
@deepseek-ai/schemastery>=3.18.0 <4peerDependencies
Python + Pillow任意可用版本scripts/render_memory.py 依赖,本地需要 Pillow
平台跨平台OCR 自动拉起脚本默认走 Windows 路径,可改 serverPath/modelDir 覆盖
原生模块纯 Node + Python 子进程,不引入 node-gyp 依赖

安装方式

dsh plugin --profile web add github:DDDFXYqiming/Agent_Extensions#path:dsh-plugins/dsh-ocr1-memory

配置项

配置类型说明默认值
storeDirstring记忆库根目录,存图像与 memories.json<home>/.dsh/ocr1-memory
ocrBaseUrlstringDeepSeek-OCR 的 OpenAI 兼容端点(如 vLLM http://127.0.0.1:8000/v1),留空则跳过 OCR 读回
ocrApiKeystringOCR 端点的 API key,本地服务一般留空
ocrModelstringOCR 模型名deepseek-ai/DeepSeek-OCR
pythonPathstring渲染脚本使用的 Python 解释器python
renderScriptstring渲染脚本绝对路径<插件目录>/scripts/render_memory.py
requireOcrbooleantrue 时 OCR 不可用直接报错而不是降级false
useMockRendererbooleantrue 时跳过 Python,用纯文本占位(仅自测)false
autoStartOcrServerbooleantrue 时插件加载后自动确保 llama-server 在线false
ocrServerPathstringllama-server 可执行文件路径Windows 默认或 OCR_SERVER_PATH 环境变量
ocrModelDirstringDeepSeek-OCR GGUF 所在目录Windows 默认或 OCR_MODEL_DIR 环境变量
ocrServerPortnumberOCR 服务端口18080
ocrEmbeddingBaseUrlstring视觉 embedding 端点,留空回退到 ocrBaseUrl(combined 模式)
ocrEmbeddingApiKeystringembedding 端点 API key
ocrEmbeddingModelstringembedding 模型名,留空用 ocrModel
ocrEmbeddingTimeoutMsnumberembedding 请求超时120000
ocrEmbeddingAutoStartboolean独立 embedding 服务时是否自动拉起false
ocrEmbeddingPortnumber独立 embedding 服务端口(combined 模式不用)18084
ocrEmbeddingUbatchSizenumberllama-server 的 -ub 参数,必须 ≥ 单图视觉 token 数2048
ocrEmbeddingOnDemandbooleancombined 模式下不启用(仅独立服务时生效)true
ocrEmbeddingIdleTimeoutMsnumberembedding 服务空闲多少毫秒后自动关闭300000
sharedStorebooleantrue 时每次操作前重读 memories.json,支持多 Agent 共享false
embeddingRetrievalbooleantrue 时用 1280 维视觉 embedding 相似度作为检索主信号true
ocrMaxEntriesPerRetrievenumber文本检索不足时最多对多少条记忆做 OCR 读回,防止大库卡死5
ocrRepeatPenaltynumberOCR 读回的重复惩罚系数1.2
ocrNoRepeatNgramSizenumberOCR 读回的 n-gram 重复抑制窗口30
ocrTextOnlyPromptTokensnumberOCR 文本基线(用于估算视觉 token 数)5

常见问题

Q: 这个插件和官方 dsh-memory 有什么不同?

A: dsh-memory 把记忆存成纯文本;dsh-ocr1-memory 则把每条记忆渲染成带 SoM 编号的图像,按时间降到 640px 的 fuzzy 层,命中低清记忆时自动 active recall 恢复高清。它用 OCR 读回替代纯文本检索,返回原文片段而非生成式摘要,规避大模型幻觉。

Q: 不接 DeepSeek-OCR 服务能直接用吗?

A: 可以装上就能用 ocr1_mem_status / ocr1_mem_store / ocr1_mem_list 等基础功能。但 ocr1_mem_retrieve 的图像读回和视觉 embedding 需要一个 OpenAI 兼容的 OCR 端点(vLLM 起 deepseek-ai/DeepSeek-OCR,或 llama.cpp 起 GGUF 版),否则检索只能走纯文本打分。

Q: 渲染需要什么本地环境?

A: 需要 Python 3 加 Pillow 库。插件通过 scripts/render_memory.py 调 Python 把记忆分段渲染成 PNG(带 SoM 编号框),脚本内置 CJK 字体候选路径(微软雅黑/苹方/文泉驿),覆盖 Windows、macOS、Linux。

Q: 记忆存放在哪里?怎么删除单条记忆?

A: 默认放在 <home>/.dsh/ocr1-memory/,可在配置 storeDir 改成自定义目录。用 ocr1_mem_forget 工具按 id 删除单条;卸载插件不会自动清理该目录,需要手动删除。

Q: 为什么旧记忆会变模糊?这和 bug 有关吗?

A: 不是 bug,是设计行为:每条记忆按 createdAt 落在 vivid(24h 内 1280px) / normal(7 天内 1024px) / fuzzy(更久 640px) 三层。检索命中低清层时会自动 active recall 临时恢复高清,并在窗口内豁免再衰减,模拟"人记忆被想起后变清晰"的特性。

Q: 多个 Agent 能共享同一份记忆库吗?

A: 可以,把 sharedStore 设为 true 即可。该模式在每次操作前重读 memories.json,并使用唯一临时文件 + rename 串行化写入,避免并发覆盖;测试报告中 M1–M6 包含多 Agent 共享场景。

Q: 视觉 token 数是怎么测出来的?

A: 插件通过 embedding 端点的 marker-only 请求(只传 media 不传文本)测出 visualTokensDirect,并以文本基线做近似估算。这是 llama.cpp 公开接口的测量值,并非 DeepEncoder 内部张量输出;README 明确指出这是论文思想的工程近似。

Q: 装了插件后 DSH Agent 能直接调用这些工具吗?

A: 可以。插件通过 inject=['tools'] 向宿主注册 9 个 ocr1_mem_* 工具,Agent 在对话里直接调用即可,无需额外启用开关;工具输出 schema 严格,headless profile 下也不会报 invalid output。

上手难度

进阶 — 需要本地装 Python+Pillow,并且要让 OCR 端点(vLLM 或 llama.cpp GGUF)真正在线才能用上检索和视觉 embedding;纯配置项多达 27 个,对只想"装上就用"的用户门槛偏高。

已知问题与限制

  • OCR 后端是工程近似而非论文复刻:README 第 138-170 行明确说明,DeepEncoder 内部张量输出和 Locate-and-Transcribe 的"模型输出 SoM 编号"在当前 llama.cpp 公开接口下无法实现,需要 LoRA 微调才能进一步对齐
  • 默认路径绑定 Windows:lib/ocr-server.js:8 与 lib/index.js:80-93 默认 llama-server 路径写死 D:\AI_Projects\models\llama.cpp\llama-server.exe,macOS/Linux 用户必须通过 ocrServerPath / OCR_SERVER_PATH 环境变量覆盖
  • ocrEmbeddingUbatchSize 必须 ≥ 单图视觉 token 数:默认 2048 已经能覆盖,但缩到默认 512 会被 llama-server 拒大图(README 第 128-131 行)
  • embedding 服务空闲后会自动关闭:默认 5 分钟空闲后 stop(lib/index.js:153-160),多 Agent 高频并发场景可能反复拉起
  • 检索文本打分是字符级 token 重叠:中文按单字切,英文按空格切,标点和 emoji 会被剥掉;超长查询不会自动改写
  • Locate-and-Transcribe 用文本打分 + OCR 证据而非模型输出编号:返回 verbatim 片段避免生成幻觉,但与 OCR-Memory 论文原版 Locate 路径不同(README 第 145-147 行)
  • 多模态 embedding 依赖 llama.cpp 扩展:在 AMD 无 NVIDIA/vLLM 的环境下无法切换到官方 DeepEncoder 输出(README 第 166 行)
  • Python 渲染 30 秒超时:lib/core.js:267 对单条渲染设了 30s 上限,超长文本会被 hard wrap 分段避免单图超时

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/DDDFXYqiming/Agent_Extensions/dsh-plugins/dsh-ocr1-memory)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录