☰
AI Agent 长期记忆系统实战:Hindsight + vLLM 全本地 GPU 部署与 TaoToken 统一接入
2026/10/17 18:11:22 网站建设 项目流程

1. 为什么 AI Agent 需要一套自己的长期记忆系统

LLM 本身是无状态的,这一点在单轮问答里感受不明显,一旦你把它放进 AI Agent 的循环里跑上几天,问题就会集中爆发。每次新会话开始,模型对之前发生过什么一无所知,你昨天教它的项目路径、上周确认过的代码规范、上个月踩过的接口坑,全部归零。hermes-agent、Claude Code、Codex 这类 Agent 框架目前主要靠两种方式缓解:一是把历史记忆拼进系统提示词,二是外挂一个向量数据库按需检索。

第一种方式最直接,hermes-agent 的 memory 工具就是干这个的,但它有一个硬限制——系统提示词里的记忆区大约只有 10KB。跑几天就满了,旧记忆被挤出去,新记忆没地方放,最后你发现 Agent 记住的全是最近几条无关紧要的对话。第二种方式把记忆存到外部向量库,容量几乎无限,检索也更精准,代价是你得自己把 embedding、存储、检索这条链路搭起来。

这篇要讲的就是第二种,而且是把整条链路放在本地 GPU 上跑:用 vLLM 起一个 embedding 推理服务,用 Hindsight 做知识图谱驱动的长期记忆库,再通过 TaoToken 统一接入 LLM 提取与推理,解决多工具调用时 Key 和 endpoint 到处散落的问题。适合已经在用 hermes-agent 或类似 Agent 框架、手里有一块 NVIDIA GPU、想让 Agent 真正记住事情的开发者。整套方案的核心检索词就是 AI Agent 长期记忆、Hindsight 本地部署、vLLM embedding 服务,下面从选型一路写到验证命令。

2. Hindsight 选型对比与 TaoToken 统一接入前置

hermes-agent v0.15.0 内置了 8 个 memory provider 插件:Honcho、Mem0、Supermemory、Byterover、Hindsight、Holographic、OpenViking、RetainDB。我对比过一圈,最后选 Hindsight 的原因很实际:它支持 local_external 模式,也就是 embedding 服务可以自己部署,Hindsight 只负责存储和检索。这意味着你可以用任何兼容 OpenAI API 的 embedding 服务,包括本地 GPU 上跑的 vLLM。

把 Hindsight 和其他 provider 放在一起看,差异会更清楚:

特性Hindsight多数其他 provider
部署模式Cloud / Local Embedded / Local External多数仅云
本地 GPU embedding支持外部 embedding 服务部分不支持
知识图谱实体解析 + 关系图部分仅向量
检索方式语义 + 关键词 + 实体图遍历 + 重排序多为纯向量
自动提取auto_retain 自动结构化事实部分支持
中文嵌入可指定 bge-large-zh默认英文

最关键的还是 local_external 这一条。它把 embedding 的计算从 Hindsight 内部剥离出来,你可以让 vLLM 在 GPU 上跑 bge-large-zh-v1.5,Hindsight 只做图谱存储和混合检索。中文场景下 bge-large-zh 的效果比默认英文模型好一大截,实体解析和关系抽取也更准。

接下来说 TaoToken 的位置。Hindsight 的 auto_retain 每次提取结构化事实都要调一次 LLM,hermes-agent 本身也要调 LLM 做推理,如果你还接了别的工具,Key 和 endpoint 很快就会散落在四五个配置文件里。TaoToken 的作用就是把这些调用收敛到一个入口:一个 Base URL、一个 Key,模型 ID 按需切换。它的 API 地址是 https://taotoken.net/api,兼容 OpenAI 协议,所以 Hindsight 的 LLM provider、hermes-agent 的推理后端都能指过来。

你需要提前准备三样东西:一个 TaoToken 的 API Key(在控制台的 API Keys 页面创建)、一个可用的模型 ID(比如 deepseek-v4-flash 这类性价比高的对话模型)、以及本地 GPU 环境(Jetson AGX Orin 或普通 x86_64 + NVIDIA 显卡都行)。Key 的创建入口在 https://taotoken.net/api-keys ,接入文档在 https://taotoken.net/doc ,遇到协议细节可以对照着看。把这三样准备好,后面的配置就是填空。

3. vLLM 与 Hindsight 可复制配置片段

这一节是全文的核心,所有配置都可以直接复制。先明确架构:vLLM 容器跑 embedding 服务监听 8000,Hindsight 容器监听 8888 并通过 local_external 模式调用 vLLM,hermes-agent 在本机通过 HTTP 连 Hindsight,LLM 提取和推理统一走 TaoToken。

3.1 vLLM embedding 服务启动

vLLM 官方没有 ARM64 镜像,Jetson 用户需要用社区编译版,x86_64 用户直接用官方镜像即可。

# x86_64 + NVIDIA GPU docker pull vllm/vllm-openai:latest # Jetson Orin(ARM64) docker pull ghcr.io/yuyirobotlab/vllm-orin:0.19.0

启动 embedding 服务,注意 vLLM 0.19+ 用--runner pooling进入 embedding 模式,旧版的--task embedding已经弃用:

docker run -d --name vllm \ --network host \ --gpus all \ -e HF_ENDPOINT=https://hf-mirror.com \ vllm/vllm-openai:latest \ --model BAAI/bge-large-zh-v1.5 \ --runner pooling \ --host 0.0.0.0 --port 8000 \ --gpu-memory-utilization 0.3 \ --enforce-eager

几个参数值得单独说。--gpu-memory-utilization 0.3是因为 bge-large-zh 只有约 1.3GB,不需要占满显存,留出空间给别的任务。--enforce-eager跳过 JIT 编译,Jetson 上首次编译要十几分钟,跳过能省不少等待。HF_ENDPOINT指向镜像站,国内不设这个模型下载大概率失败。

3.2 Hindsight 容器启动

Hindsight 官方镜像支持 amd64 和 arm64 双架构,国内拉取慢可以用 GHCR 代理。

docker run -d --name hindsight \ --network host \ --restart unless-stopped \ -e HINDSIGHT_API_LLM_PROVIDER=openai \ -e HINDSIGHT_API_LLM_API_KEY=你的TaoTokenKey \ -e HINDSIGHT_API_LLM_BASE_URL=https://taotoken.net/api \ -e HINDSIGHT_API_LLM_MODEL=deepseek-v4-flash \ -e HINDSIGHT_API_EMBEDDINGS_PROVIDER=openai \ -e HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL=http://localhost:8000/v1 \ -e HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL=BAAI/bge-large-zh-v1.5 \ -v /data/hindsight:/root/.hindsight/data \ ghcr.io/vectorize-io/hindsight-api:latest

这里 LLM provider 填openai是因为 TaoToken 兼容 OpenAI 协议,Base URL 指向https://taotoken.net/api,模型 ID 用 deepseek-v4-flash。embedding 部分指向本地 vLLM 的 8000 端口。数据卷挂到/data/hindsight,避免容器重建丢记忆。

3.3 hermes-agent 的 settings 片段

hermes-agent 本机需要装 hindsight-client,然后改两处配置。第一处是~/.hermes/config.yaml:

memory: provider: hindsight

第二处是 Hindsight 连接配置~/.hermes/hindsight/config.json:

{ "mode": "local_external", "api_url": "http://你的Hindsight服务器IP:8888", "memory_mode": "hybrid", "auto_retain": true, "auto_recall": true, "recall_budget": "mid" }

memory_mode: hybrid表示语义检索和关键词检索混用,auto_retain和auto_recall打开后,每轮对话前自动检索相关记忆注入上下文,对话后自动提取结构化事实存入知识图谱。recall_budget: mid控制注入的记忆量,太小检索不全,太大浪费 token,mid 是个人使用的平衡点。

3.4 三件套对照表

无论你接的是 hermes-agent、Cline MCP 还是 Codex 的 auth.json,配置项都是这三件套,只是字段名不同:

配置项值说明
Base URLhttps://taotoken.net/api兼容 OpenAI 协议
API Key控制台创建统一入口,不再散落
Model IDdeepseek-v4-flash按需切换

把这三件套填进对应工具的配置里,LLM 调用就全部收敛到 TaoToken,后面换模型只改 Model ID 一处。

4. 验证记忆读写与推理连通性

配置写完不能直接信,得一步步验证。顺序是:先验 vLLM embedding,再验 Hindsight 健康状态,最后验记忆读写和 LLM 推理。

4.1 验证 vLLM embedding

curl http://localhost:8000/v1/embeddings \ -H "Content-Type: application/json" \ -d '{"model":"BAAI/bge-large-zh-v1.5","input":"你好世界"}'

正常返回里会有一个 1024 维的向量数组。如果返回维度不对,说明模型没加载对;如果连接被拒,说明 vLLM 还没启动完,模型下载需要几分钟,耐心等一下。

4.2 验证 Hindsight 健康状态

curl http://localhost:8888/health

期望返回{"status":"healthy","database":"connected"}。database 显示 connected 说明内嵌 PostgreSQL 正常,如果显示 disconnected,检查数据卷权限。

4.3 验证记忆写入

curl -X POST http://localhost:8888/v1/memories \ -H "Content-Type: application/json" \ -d '{"content":"项目使用 Python 3.11,依赖管理用 uv","tags":["env"]}'

返回里会带一个 memory id,记下来用于下一步检索。

4.4 验证记忆检索

curl -X POST http://localhost:8888/v1/memories/search \ -H "Content-Type: application/json" \ -d '{"query":"项目用什么管理依赖","limit":3}'

如果返回结果里包含刚才写入的那条,说明 embedding 检索链路通了。这一步能过,说明 vLLM 和 Hindsight 之间的 local_external 调用没问题。

4.5 验证 TaoToken 推理连通

curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"回复ok"}]}'

返回 choices 里有内容就说明 LLM 推理通了。这一步过了,Hindsight 的 auto_retain 提取事实时调 LLM 就不会失败。

4.6 端到端验证

在 hermes-agent 里发一句包含新事实的话,比如「记住我的项目根目录是 /work/demo」,然后/reset开新会话,问它「我的项目根目录在哪」。如果它能答出来,说明 auto_retain 写入、auto_recall 检索、LLM 推理整条链路都通了。这一步是整个部署的验收标准。

5. 本篇常见报错排查

部署过程中最容易卡在几个固定报错上,这里按真实错误信息对照排查。

vLLM 启动报no kernel image is available:镜像和 GPU 的 CUDA 架构不匹配。Jetson Orin 是 SM 8.7,必须用针对该架构编译的镜像,比如 yuyirobotlab/vllm-orin,或者自己编译。x86_64 用户遇到这个错通常是显卡太新,换最新版官方镜像。

Hindsight 报local proxy failed或连不上 vLLM:Docker 网络模式问题。如果两个容器都用--network host,确认 vLLM 已完全启动后再启 Hindsight,vLLM 下载模型要几分钟,Hindsight 启动时如果 vLLM 还没就绪就会连不上。可以先 curl 一下 8000 端口确认。

TaoToken 返回 401:Key 不对或没带 Bearer 前缀。检查Authorization: Bearer 你的Key格式,以及 Key 是否在控制台被禁用。Hindsight 里对应的是HINDSIGHT_API_LLM_API_KEY,别填成 embedding 的地址。

返回里reading choices报错:说明请求发出去了但响应结构不对,通常是 Base URL 少了/v1或者多了路径。TaoToken 的 Base URL 是https://taotoken.net/api,chat completions 的完整路径是https://taotoken.net/api/v1/chat/completions,别把两段拼错。

OAuth 相关报错:如果你用的是 Codex 这类带 OAuth 的工具,auth.json 里的字段名和普通 API Key 不同,需要把 Base URL、Key、Model ID 三件套按它的格式填全,缺一个都会报 OAuth 失败。

embedding 维度不匹配:Hindsight 里配置的 embedding 模型和 vLLM 实际加载的模型不一致。检查HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL和 vLLM 启动参数里的--model是否都是BAAI/bge-large-zh-v1.5。

记忆写入成功但检索不到:多半是 embedding 服务返回了空向量或维度错误。回到 4.1 重新验证 vLLM,确认返回的是 1024 维。

Jetson 上容器起不来:桥接网络在 Jetson 上不可用,必须--network host;GPU 通过 CDI 访问,用--device nvidia.com/gpu=all而不是--gpus all。另外 Jetson 内存紧张,建议禁用 apt 自动更新:

sudo systemctl mask apt-daily.timer sudo systemctl mask apt-daily-upgrade.timer

排障时如果拿不准是 Key 问题还是 endpoint 问题,最省事的办法是先用 curl 单独测 TaoToken 的 chat completions,再单独测 vLLM 的 embeddings,两个都通了再测 Hindsight,逐段隔离比整体猜快得多。接入细节可以对照 https://taotoken.net/doc ,模型能力想先试再定可以去 https://taotoken.net/models 看看。

6. 长期编码与 Agent 场景的接入建议

如果你只是偶尔用 Agent 跑几个任务,上面这套配置已经够用。但如果你打算把 hermes-agent 当成日常编码助手长期跑,有几个点值得提前规划。

第一是记忆分层。hermes-agent 的 session 文件可能有几千个,全量导入没必要,session_search 本身已经做了 FTS5 全文索引。建议只把核心系统配置、用户偏好、已验证的工作流、常见坑这几类手动 retain 进 Hindsight,历史 session 摘要可选批量导入,原文不用管。

第二是成本控制。Hindsight 的 auto_retain 每次提取事实都调一次 LLM,频繁对话费用会涨。可以调大提取间隔:

-e HINDSIGHT_API_RETAIN_EVERY_N_TURNS=12

或者干脆关掉自动提取只用手动 retain,配合 hermes-agent 的 flush_min_turns 兜底短会话。

第三是接入方式的选择。如果你只是验证模型效果,用模型对话页面直接试最快;如果是长期编码和 Agent 任务,走 Coding Plan 更划算,调用额度更稳定;如果是自己写脚本调 API,那就用 API Keys 加接入文档自己拼。三条路径对应不同使用强度,按自己的实际频率选。

整套方案跑下来,embedding 用自己的 GPU,LLM 提取走 TaoToken 统一入口,固定成本几乎为零,容量和检索精度又远超系统提示词注入。对个人开发者来说,这是一套可以长期用下去的 Agent 记忆底座。最后留一个实操建议:先把 vLLM 和 Hindsight 两个容器跑通,用第 4 节的 curl 命令逐条验证,确认记忆能写能读之后,再动 hermes-agent 的配置。顺序反了,出问题很难定位是容器还是 Agent 的锅。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询