UNPKG

@tencentdb-agent-memory/memory-tencentdb

Version:

Four-layer local memory system plugin for OpenClaw — auto-captures, structures, and profiles conversational knowledge using local LLM + SQLite vector search (L0→L1→L2→L3 pipeline)

138 lines (99 loc) 5.84 kB
# Hermes 适配参考:TencentDB Agent Memory v2 简体中文 · [English](./README.md) 该目录是 Hermes 接入 TencentDB Agent Memory v2 API 的参考实现。它实现了一个 Hermes `MemoryProvider`,通过 Python SDK 连接一个已经运行的 Memory Gateway。该 provider 不启动、不管理 Gateway 子进程。 在 standalone 本地模式下,推荐的 Gateway 地址是 `http://127.0.0.1:8420`。默认约定是 `api_key = "local"``service_id = "default"`。如果 Gateway 显式启用了 `TDAI_GATEWAY_API_KEY`,则 `TDAI_MEMORY_API_KEY` 应使用同一个值。 ## 架构 ```text Hermes Agent └─ MemoryManager └─ memory_tencentdb_v2 provider ├─ sync_turn() 完整对话轮次 -> add_conversation (L0) ├─ prefetch() prompt 前召回记忆/core/scenario ├─ tdai_memory_search 工具 ├─ tdai_conversation_search 工具 └─ tdai_read_scene 工具 │ ▼ tencentdb_agent_memory.MemoryClient │ HTTP v2 API ▼ TencentDB Agent Memory Gateway(standalone :8420 或远端服务) ``` ## v1 与 v2 对比 | | v1 `memory_tencentdb` | v2 `memory_tencentdb_v2` | |---|---|---| | API | 旧版 `/recall``/capture``/search/*` | v2 `/v2/*` | | HTTP 客户端 | 原生 `urllib.request` | `tencentdb_agent_memory` Python SDK(`httpx`) | | Gateway 生命周期 | 可能启动本地 Gateway 子进程 | 连接外部或容器管理的 Gateway | | standalone 约定 | localhost only | `endpoint=http://127.0.0.1:8420``api_key=local``service_id=default` | | 工具 | memory search、conversation search | 额外支持 `tdai_read_scene` | ## 快速开始 推荐从仓库根目录执行自动安装脚本: ```bash bash scripts/install-hermes-plugin-v2.sh ``` 脚本会下载并安装 Python SDK wheel,将 `memory_tencentdb_v2` provider 软链到 Hermes 的 memory 插件目录,检查 `~/.hermes/config.yaml` 是否启用 provider,并把 `TDAI_MEMORY_ENDPOINT``TDAI_MEMORY_API_KEY``TDAI_MEMORY_SERVICE_ID` 写入 `~/.hermes/.env`。SDK 会安装到 Hermes 实际使用的 Python 环境:优先使用显式传入的 `PYTHON_BIN`,其次使用 `HERMES_VENV_DIR/bin/python`(默认 `~/.hermes/hermes-agent/venv/bin/python`),最后才回退到系统 `python3`。如需覆盖路径,可设置 `HERMES_HOME``HERMES_AGENT_DIR``HERMES_VENV_DIR``HERMES_MEMORY_PLUGIN_DIR``HERMES_ENV``PYTHON_BIN`。 如需手动安装,可按下面步骤执行。 ### 1. 安装 SDK Python SDK 暂未发布到 PyPI,请先下载 wheel 包再安装: ```bash curl -L -o tencentdb_agent_memory_sdk_python-0.1.0-py3-none-any.whl \ "https://cnb.cool/tencent/cloud/nosql/nosql-utilities/-/commit-assets/download/cc74bd6dbc931727da9ab6907b5ab1a07d7afd9d/tencentdb_agent_memory_sdk_python-0.1.0-py3-none-any.whl" # 请使用 Hermes 实际运行时的 Python;常见路径如下: ~/.hermes/hermes-agent/venv/bin/python -m pip install ./tencentdb_agent_memory_sdk_python-0.1.0-py3-none-any.whl # 如果你的 Hermes 不是使用该 venv,请改用对应的 python: # PYTHON_BIN=/path/to/hermes/python # "$PYTHON_BIN" -m pip install ./tencentdb_agent_memory_sdk_python-0.1.0-py3-none-any.whl ``` Python import 路径是 `tencentdb_agent_memory`### 2. 配置环境变量 standalone 本地 Gateway: ```bash export TDAI_MEMORY_ENDPOINT="http://127.0.0.1:8420" export TDAI_MEMORY_API_KEY="local" export TDAI_MEMORY_SERVICE_ID="default" ``` 如果 Gateway 启用了 `TDAI_GATEWAY_API_KEY`,请将 `TDAI_MEMORY_API_KEY` 设置成同一个值。 ### 3. 在 Hermes 配置中启用(`~/.hermes/config.yaml`) ```yaml memory: provider: memory_tencentdb_v2 ``` ### 4. 安装 provider 到 Hermes 开发环境推荐软链: ```bash ln -s "$(pwd)/hermes-plugin/memory/memory_tencentdb_v2" \ <hermes-agent>/plugins/memory/memory_tencentdb_v2 ``` 部署时也可以复制: ```bash cp -r hermes-plugin/memory/memory_tencentdb_v2 \ <hermes-agent>/plugins/memory/memory_tencentdb_v2 ``` ## 环境变量 | 变量 | 默认值 | 说明 | |---|---|---| | `TDAI_MEMORY_ENDPOINT` | `http://127.0.0.1:8420` | Memory Gateway 地址 | | `TDAI_MEMORY_API_KEY` | standalone 示例中为 `local` | SDK 发送的 Bearer token | | `TDAI_MEMORY_SERVICE_ID` | standalone 示例中为 `default` | Memory 空间 ID,通过 `x-tdai-service-id` 发送 | ## Provider 职责 | 方法 / 工具 | 说明 | |---|---| | `initialize(session_id)` | 创建 SDK client,并绑定 Hermes session ID | | `sync_turn(user_content, assistant_content)` | 完整对话结束后调用 `add_conversation()` 写入 L0 | | `prefetch(query)` | 下一轮 prompt 前搜索 L1,并读取 L3/L2 上下文 | | `tdai_memory_search` | Agent 可主动调用的 L1 记忆搜索 | | `tdai_conversation_search` | Agent 可主动调用的 L0 对话搜索 | | `tdai_read_scene` | Agent 可主动调用的 L2 场景读取 | ## 作为其它 Agent 的适配模板 如果你要适配其它 Python Agent 框架,可以复用同样模式: 1. 初始化 `MemoryClient(endpoint, api_key, service_id)`2. 在每个完整对话轮次结束后调用 `add_conversation()`3. 在下一轮 prompt 构建前调用 `search_atomic()``read_core()`,必要时调用 `list_scenarios()`4. 将召回结果格式化成清晰标注的上下文块。 5. 暴露主动工具,让 Agent 可以搜索记忆和读取场景。 6. 保持 best-effort:Memory 失败不应该阻塞 Agent 主回答链路。 ## 可靠性 - 熔断:连续 5 次失败后进入 60 秒冷却。 - 线程安全:内部状态变更使用锁保护。 - 优雅降级:prefetch 或工具调用失败时返回空结果或友好错误,不让 Agent 崩溃。