来源:互联网 更新时间:2026-07-26 07:21
先来说说
hindsight-api ← 后端引擎(数据平面)
↓ http://localhost:8888
hindsight-control-plane ← Web 管理界面(控制平面)
↓ http://localhost:9998
Hermes Desktop ← 客户端集成
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Windows | 10/11 | 本文基于 Windows 环境 |
| Node.js | ≥ v18.x | Hindsight 运行依赖 |
| npm | ≥ v9.x | 通常随 Node.js 安装 |
| Python | 3.11+ | Hermes Desktop 自带 |
| PostgreSQL | 可选 | Hindsight 默认使用 SQLite,生产环境建议 PostgreSQL |
# 全局安装 hindsight-api(推荐) npm install -g hindsight-api # 或者本地安装 npm install hindsight-api
关键一步:用 setx 命令永久设置,设置后
这里有个坑得提醒一下:
set命令只在当前 CMD 窗口生效,窗口一关全丢;setx会写入注册表永久保存。之前用set配置完觉得万事大吉,结果重启终端后所有变量丢失,直接糊一脸 401/400 错误。
REM ===== LLM 配置(DeepSeek)===== setx HINDSIGHT_API_LLM_PROVIDER "deepseek" setx DEEPSEEK_API_KEY "sk-你的deepseek密钥" setx HINDSIGHT_API_LLM_MODEL "deepseek-v4-flash" REM ===== Embedding 配置(SiliconFlow)===== setx HINDSIGHT_API_EMBEDDINGS_PROVIDER "openai" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY "sk-你的硅基流动密钥" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL "https://api.siliconflow.cn/v1" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL "Qwen/Qwen3-Embedding-0.6B" REM ===== Reranker 配置(SiliconFlow)===== setx HINDSIGHT_API_RERANKER_PROVIDER "siliconflow" setx HINDSIGHT_API_RERANKER_SILICONFLOW_API_KEY "sk-你的硅基流动密钥" setx HINDSIGHT_API_RERANKER_MODEL "BAAI/bge-reranker-v2-m3" REM 设置后需重新打开终端
# 直接启动(前台) hindsight-api # 指定参数启动 hindsight-api --host 0.0.0.0 --port 8888 --log-level info
curl http://localhost:8888/health
# 返回: {"status":"healthy","database":"connected"}
# 通过 npx 启动(无需全局安装) npx @vectorize-io/hindsight-control-plane --api-url http://localhost:8888 --port 9998
启动后访问:

Hermes Desktop 支持直接在客户端界面中配置 Hindsight,无需手动编辑配置文件,这对新手友好很多。
| 参数 | 当前值 | 说明 |
|---|---|---|
| Mode | Local External | 连接已存在的 Hindsight 实例 |
| API key | (空) | Hindsight API 认证密钥 |
| API URL | http://0.0.0.0:8888 | Hindsight API 服务地址 |
| Bank ID | hermes | 记忆库名称/命名空间 |
| Recall budget | mid | 召回预算(low/mid/high) |
注意:API key 字段在 Local External 模式下通常不需要填写(本地服务无认证),但如果看到 API key not set 红色提示,留空或填任意值都行。
配置界面截图参考:

如果客户端界面配置没生效,或者你习惯手动操作,可以直接编辑配置文件:
memory: provider: hindsight memory_enabled: true user_profile_enabled: true
同时创建 hindsight/config.json:
{
"mode": "local_external",
"api_url": "http://0.0.0.0:8888",
"bank_id": "hermes",
"recall_budget": "mid"
}
hindsight_retain — 存储信息到长期记忆hindsight_recall — 语义搜索历史记忆hindsight_reflect — 跨记忆合成推理@hindsight/mcp-server,这个包跟 Hindsight 服务端 API 不匹配。
# 错误的 npm install -g @hindsight/mcp-server # 正确的 npm install -g hindsight-mcp
正确包信息:
hindsight-mcp方案 A:更换 embedding 模型(永久生效)
setx HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL "Qwen/Qwen3-Embedding-0.6B" REM 设置后需重新打开终端
https://api.siliconflow.cn/v1openai关键教训:之前用
set临时设置,重启终端后失效导致问题复发,改成setx才永久生效。
finish_reason=length)方案 A:更换 reflect LLM 模型(永久生效)
setx HINDSIGHT_API_LLM_MODEL "xopglm52" REM 或其他支持 structured output 的模型 REM 设置后需重新打开终端
方案 B:分离 LLM 配置(永久生效)
REM retain 继续使用 DeepSeek-v4-flash(简单事实提取) setx HINDSIGHT_API_LLM_MODEL "deepseek-v4-flash" REM reflect 换用其他模型(需要 structured output 支持) setx HINDSIGHT_API_REFLECT_LLM_MODEL "xopglm52" REM 注意:此配置需 Hindsight v0.8.4+ 支持
关键教训:
set命令只在当前终端会话生效,重启后丢失;setx才能永久保存到系统环境变量。之前用set配置后重启终端导致失效,改用setx解决。
编写专用启动脚本 start-hindsight.bat,确保环境变量正确传递(永久生效):
@echo off REM start-hindsight.bat REM 确保所有环境变量正确设置后启动 hindsight-api REM 注意:以下变量已通过 setx 永久设置,此处仅为保险起见 set HINDSIGHT_API_LLM_PROVIDER=deepseek set DEEPSEEK_API_KEY=sk-xxx set HINDSIGHT_API_LLM_MODEL=deepseek-v4-flash set HINDSIGHT_API_EMBEDDINGS_PROVIDER=openai set HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY=sk-xxx set HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL=https://api.siliconflow.cn/v1 set HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL=Qwen/Qwen3-Embedding-0.6B set HINDSIGHT_API_RERANKER_PROVIDER=siliconflow set HINDSIGHT_API_RERANKER_SILICONFLOW_API_KEY=sk-xxx set HINDSIGHT_API_RERANKER_MODEL=BAAI/bge-reranker-v2-m3 hindsight-api
setx HINDSIGHT_API_LLM_PROVIDER "deepseek" setx DEEPSEEK_API_KEY "sk-xxx" setx HINDSIGHT_API_LLM_MODEL "deepseek-v4-flash" setx HINDSIGHT_API_EMBEDDINGS_PROVIDER "openai" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY "sk-xxx" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL "https://api.siliconflow.cn/v1" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL "Qwen/Qwen3-Embedding-0.6B" setx HINDSIGHT_API_RERANKER_PROVIDER "siliconflow" setx HINDSIGHT_API_RERANKER_SILICONFLOW_API_KEY "sk-xxx" setx HINDSIGHT_API_RERANKER_MODEL "BAAI/bge-reranker-v2-m3" REM 设置后需重新打开终端
关键教训:
set只在当前 CMD 窗口生效,关闭后全部丢失;setx写入注册表永久保存。之前用set配置后新开 CMD 窗口启动 hindsight-api,导致所有变量丢失,出现 401/400 错误。
module has no attribute 'models'。
# 必须在 Hermes 的 venv 中安装,不能装在系统 Python 中 pip install attrs # 然后重启 Hermes Desktop
setx PATH "%PATH%;C:UsersgongcAppDataLocalhermesvenvScripts" REM 设置后需重新打开终端
设置后需重新打开终端,确保 Hermes 的 venv 在 PATH 中优先。
关键教训:
set只在当前终端生效;setx才能永久保存到系统环境变量。之前用set配置 PATH 后重启终端失效,改用setx解决。
REM 清空 tech-stack
curl -X PATCH http://localhost:8888/banks/hermes/mental-models/tech-stack -H "Content-Type: application/json" -d "{"content":"","history":[]}"}
REM 清空 ops-playbook
curl -X PATCH http://localhost:8888/banks/hermes/mental-models/ops-playbook -H "Content-Type: application/json" -d "{"content":"","history":[]}"}
REM 触发刷新
curl -X POST http://localhost:8888/banks/hermes/mental-models/tech-stack/refresh
curl -X POST http://localhost:8888/banks/hermes/mental-models/ops-playbook/refresh
setx 设置的环境变量需要基于踩坑经验,以下配置组合最稳定:
{
"source_query": "技术栈与工具配置",
"max_tokens": 2048,
"mode": "delta",
"tags": ["config", "tech-stack"]
}
| 模型名称 | source_query | max_tokens | mode | tags |
|---|---|---|---|---|
| user-profile | 用户画像 | 2048 | delta | [user] |
| hindsight-setup | Hindsight 配置 | 2048 | delta | [config] |
| tech-stack | 技术栈与工具配置 | 2048 | delta | [config, tech-stack] |
| ops-playbook | 操作经验与踩坑记录 | 2048 | delta | [ops, troubleshooting] |
文件:C:UsersgongcAppDataLocalProgramsPythonPython311Scriptshindsight-mcp-stdio.py
#!/usr/bin/env python3
"""
Hindsight MCP stdio wrapper for Cherry Studio
Connects to local Hindsight API via HTTP and exposes MCP tools via stdio
"""
import sys
import json
import requests
API_BASE = "http://localhost:8888"
BANK_ID = "cherry"
def handle_request(req):
method = req.get("method")
params = req.get("params", {})
if method == "tools/list":
# Return a vailable tools
return {
"tools": [
{
"name": "retain",
"description": "Store information to long-term memory",
"inputSchema": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"content": {"type": "string"},
"context": {"type": "string"},
"tags": {"type": "array", "items": {"type": "string"}}
},
"required": ["content"]
}
}
},
"required": ["items"]
}
},
{
"name": "recall",
"description": "Search long-term memory",
"inputSchema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"limit": {"type": "integer", "default": 10}
},
"required": ["query"]
}
},
{
"name": "reflect",
"description": "Synthesize reasoning across memories",
"inputSchema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"budget": {"type": "string", "default": "mid"}
},
"required": ["query"]
}
},
{
"name": "getBankStats",
"description": "Get memory bank statistics",
"inputSchema": {
"type": "object",
"properties": {}
}
}
]
}
elif method == "tools/call":
tool_name = params.get("name")
arguments = params.get("arguments", {})
if tool_name == "retain":
items = arguments.get("items", [])
response = requests.post(
f"{API_BASE}/banks/{BANK_ID}/memories",
json={"items": items}
)
return {"content": [{"type": "text", "text": json.dumps(response.json())}]}
elif tool_name == "recall":
query = arguments.get("query")
limit = arguments.get("limit", 10)
response = requests.post(
f"{API_BASE}/banks/{BANK_ID}/recall",
json={"query": query, "limit": limit}
)
return {"content": [{"type": "text", "text": json.dumps(response.json())}]}
elif tool_name == "reflect":
query = arguments.get("query")
budget = arguments.get("budget", "mid")
response = requests.post(
f"{API_BASE}/banks/{BANK_ID}/reflect",
json={"query": query, "budget": budget}
)
return {"content": [{"type": "text", "text": json.dumps(response.json())}]}
elif tool_name == "getBankStats":
response = requests.get(f"{API_BASE}/banks/{BANK_ID}/stats")
return {"content": [{"type": "text", "text": json.dumps(response.json())}]}
return {"error": {"code": -32601, "message": "Method not found"}}
def main():
for line in sys.stdin:
try:
req = json.loads(line)
result = handle_request(req)
response = {
"jsonrpc": "2.0",
"id": req.get("id"),
"result": result
}
print(json.dumps(response), flush=True)
except Exception as e:
error_response = {
"jsonrpc": "2.0",
"id": req.get("id") if 'req' in locals() else None,
"error": {"code": -32603, "message": str(e)}
}
print(json.dumps(error_response), flush=True)
if __name__ == "__main__":
main()
文件路径:C:UsersgongcAppDataRoamingCherryStudiomcp.json
{
"mcpServers": {
"hindsight-cherry": {
"type": "stdio",
"command": "python",
"args": [
"C:\Users\gongc\AppData\Local\Programs\Python\Python311\Scripts\hindsight-mcp-stdio.py"
],
"env": {
"HINDSIGHT_API_BASE_URL": "http://localhost:8888",
"HINDSIGHT_MCP_BANK_ID": "cherry"
}
}
}
}
HINDSIGHT_API_BASE_URL:Hindsight API 地址HINDSIGHT_MCP_BANK_ID:记忆库 ID(与 Hermes 的 bank_id 不同,这里是 cherry)command:Python 解释器路径args:wrapper 脚本完整路径如果 prefer npm 方式:
npm install -g hindsight-mcp
配置:
{
"mcpServers": {
"hindsight": {
"command": "npx",
"args": ["-y", "hindsight-mcp"],
"env": {
"HINDSIGHT_API_BASE_URL": "http://localhost:8888",
"HINDSIGHT_MCP_BANK_ID": "cherry"
}
}
}
}
注意:npm 包的 hindsight-mcp 只有 11 个工具,而本地 Hindsight API 有 32 个工具。stdio wrapper 方案可直接访问全部 32 个工具,且无需安装 npm 包。
两种方案工具数量对比:
| 方案 | 工具数量 | 来源 | 备注 |
|---|---|---|---|
| npm hindsight-mcp | 11 个 | npm 包 | 官方封装,但工具不全 |
| stdio wrapper | 32 个 | 本地 Hindsight API | 推荐,功能完整 |
stdio wrapper 优势:
重启 Cherry Studio 后,应看到以下工具:
retain — 存储记忆syncRetain — 同步存储recall — 搜索记忆reflect — 合成推理getBankStats — 获取统计信息{
"items": [
{
"content": "测试 Cherry Studio 到 Hindsight 的记忆存储",
"context": "MCP 配置测试",
"tags": ["test", "cherry-studio"]
}
]
}
配置成功后应看到 32 个工具:
| 分类 | 工具 | 说明 |
|---|---|---|
| 核心 | retain | 存储记忆 |
| sync_retain | 同步存储 | |
| recall | 搜索记忆 | |
| reflect | 合成推理 | |
| 记忆库管理 | list_banks | 列出记忆库 |
| create_bank | 创建记忆库 | |
| get_bank | 获取记忆库信息 | |
| get_bank_stats | 获取统计信息 | |
| update_bank | 更新记忆库 | |
| delete_bank | 删除记忆库 | |
| clear_memories | 清空记忆 | |
| 心智模型 | list_mental_models | 列出心智模型 |
| get_mental_model | 获取心智模型 | |
| create_mental_model | 创建心智模型 | |
| update_mental_model | 更新心智模型 | |
| delete_mental_model | 删除心智模型 | |
| refresh_mental_model | 刷新心智模型 | |
| clear_mental_model | 清空心智模型 | |
| 指令 | list_directives | 列出指令 |
| create_directive | 创建指令 | |
| delete_directive | 删除指令 | |
| 记忆 | list_memories | 列出记忆 |
| get_memory | 获取记忆 | |
| update_memory | 更新记忆 | |
| invalidate_memory | 作废记忆 | |
| 文档 | list_documents | 列出文档 |
| get_document | 获取文档 | |
| delete_document | 删除文档 | |
| 操作 | list_operations | 列出操作 |
| get_operation | 获取操作 | |
| cancel_operation | 取消操作 | |
| 标签 | list_tags | 列出标签 |
' start-hindsight.vbs
' 后台启动 hindsight-api,无 CMD 窗口
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c start-hindsight.bat", 0, False
Set WshShell = Nothing
Win + R,输入 shell:startupstart-hindsight.vbs# 1. hindsight-api 健康检查 curl http://localhost:8888/health # 2. Control Plane 访问 # 浏览器打开 http://localhost:9998 # 3. MCP 工具列表 curl http://localhost:8888/mcp/default/tools
# 查看所有 mental models curl http://localhost:8888/banks/hermes/mental-models # 检查具体内容长度 curl http://localhost:8888/banks/hermes/mental-models/tech-stack
| 问题 | 排查方向 | 解决 |
|---|---|---|
| Mental Model content 为空 | 检查 embedding 模型是否正常工作 | 换 Qwen/Qwen3-Embedding-0.6B,用 setx 永久设置 |
| 422 错误(MCP 工具) | 检查 MCP 包名是否正确 | 用 hindsight-mcp 而非 @hindsight/mcp-server |
| 401/400 错误(SiliconFlow) | 检查环境变量是否正确传递 | 用 setx 永久设置,或 bat 脚本启动 |
| no attribute 'models' | attrs 模块未安装 | pip install attrs + setx PATH 永久生效 |
| 环境变量不生效 | 是否用 setx 而非 set | setx 写入注册表永久保存,set 仅当前窗口生效 |
| 端口冲突 | 8888 或 9998 被占用 | 使用 --port 指定其他端口 |
核心教训汇总:set = 临时(当前窗口),setx = 永久(写入注册表)。所有环境变量配置统一使用 setx,设置后必须重新打开终端。之前多次踩坑都是因为用了 set 导致重启后失效。
| 命令 | 作用范围 | 生效时间 | 适用场景 |
|---|---|---|---|
| set | 当前 CMD 窗口 | 立即 | 临时测试 |
| setx | 系统/用户级别 | 需重新打开终端 | 生产环境、永久配置 |
错误做法(踩坑):
set HINDSIGHT_API_LLM_MODEL=deepseek-v4-flash REM 关闭 CMD 窗口后,变量全部丢失! REM 新开窗口启动 hindsight-api → 401/400 错误
正确做法(永久生效):
setx HINDSIGHT_API_LLM_MODEL "deepseek-v4-flash" REM 关闭当前 CMD,重新打开新窗口 REM 变量永久保存,重启电脑仍然有效
REM ===== 一次性设置所有 Hindsight 变量 ===== setx HINDSIGHT_API_LLM_PROVIDER "deepseek" setx DEEPSEEK_API_KEY "sk-xxx" setx HINDSIGHT_API_LLM_MODEL "deepseek-v4-flash" setx HINDSIGHT_API_EMBEDDINGS_PROVIDER "openai" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_API_KEY "sk-xxx" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_BASE_URL "https://api.siliconflow.cn/v1" setx HINDSIGHT_API_EMBEDDINGS_OPENAI_MODEL "Qwen/Qwen3-Embedding-0.6B" setx HINDSIGHT_API_RERANKER_PROVIDER "siliconflow" setx HINDSIGHT_API_RERANKER_SILICONFLOW_API_KEY "sk-xxx" setx HINDSIGHT_API_RERANKER_MODEL "BAAI/bge-reranker-v2-m3" REM 设置后必须重新打开 CMD 窗口
REM 查看单个变量 echo %HINDSIGHT_API_LLM_MODEL% REM 查看所有 Hindsight 变量 set HINDSIGHT REM 验证是否生效 curl http://localhost:8888/health
更新日志
| 日期 | 内容 |
|---|---|
| 2026-06-28 | 首次安装 hindsight-api,配置 DeepSeek + SiliconFlow |
| 2026-06-28 | 发现 Mental Model 刷新失败,开始排查 |
| 2026-06-29 | 确认 embedding 模型兼容性问题,更换为 Qwen/Qwen3-Embedding-0.6B |
| 2026-06-29 | 所有 Mental Model 刷新成功,tech-stack 4775 字符,ops-playbook 5856 字符 |
| 2026-06-29 | 整理本文档 |
经验教训: 不要轻信错误代码表面含义——Hindsight 中错误代码 20015 报告"参数无效",但实际根因是 embedding 失败导致的模型兼容性问题。遇到 embedding 失败时先测试同一平台其他模型;更换 embedding 模型时需确保维度兼容(1024 维),否则需要迁移数据库。另外,所有环境变量配置必须使用 setx 而非 set,之前多次踩坑都是因为用了 set 导致重启后变量丢失,出现 401/400 错误。
问卷星官方网站入口地址 问卷星网页版在线使用
币安Binance官方中文网站 币安App最新版下载及新手注册指南
为何比特币BTC价格跌破7.3万美元?一文拆解影响近期比特币行情的五大原因
豆包AI专业版使用教程【新手必看】
摩托车活塞环性能如何
ThinkBook系列最新价格全解析:2026年选购避坑与实时询价指南
迷你网名古风男生霸气(精选100个)
文雅简易网名男生可爱(精选100个)
GPT5.6惨遭切脑,Fable 5回归要变弱鸡版?
陈姓和杨姓网名大全男生(精选100个)
网名开头英文名字男生(精选100个)
区块链存储板块是什么?有哪些?一文详解
暗黑4S14野蛮人终局BD攻略
Ondo将于今日上线股票永续合约
免费网络收音机软件有哪些?高评分收音机APP推荐
时隔一个多月,Dify v1.15.0终于发布了!
郑好办app如何查询档案 郑好办app查询档案方法
电视剧《罗曼诺夫后裔》剧情介绍
迅雷云盘如何下载到本地速度最快
如何在火狐浏览器中彻底禁用自动更新功能?
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc