用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/openJiuwen-ai/agent-memory --skill agent-memory1-0-skill命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | agent-memory1.0_skill |
| description | 通过 HTTP API 调用 agent-memory1.0 记忆服务,召回与写入历史处理记忆 |
| scripts | {"search_ok":"agent-memory1.0 历史记忆召回完成","save_ok":"agent-memory1.0 记忆写入完成","update_ok":"agent-memory1.0 记忆更新完成","delete_ok":"agent-memory1.0 记忆删除完成","flush_ok":"agent-memory1.0 缓冲区刷新完成"} |
需要召回或写入用户历史处理记忆时调用。本 Skill 直接调用 agent-memory1.0 容器的 HTTP API(端口 8517), 不依赖 MemoryRail 框架。内置熔断器、批量写入缓冲、fail-open 降级等完整功能。
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"search\", \"user_id\": \"{user_id}\", \"query\": \"用户 {user_id} 的历史处理记录\", \"top_k\": 5}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"save\", \"user_id\": \"{user_id}\", \"content\": \"处理结果...\", \"role\": \"assistant\"}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"save\", \"user_id\": \"{user_id}\", \"content\": \"中间结果...\", \"buffer\": true}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"flush\", \"user_id\": \"{user_id}\"}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"status\"}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"update\", \"user_id\": \"{user_id}\", \"mem_id\": \"{mem_id}\", \"memory\": \"修正后的内容...\"}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"delete\", \"user_id\": \"{user_id}\", \"mem_id\": \"{mem_id}\"}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"batch_delete\", \"user_id\": \"{user_id}\", \"mem_ids\": [\"mem_abc\", \"mem_def\"]}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"update_variables\", \"user_id\": \"{user_id}\", \"variables\": {\"status\": \"normal\", \"priority\": \"high\"}}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"delete_variables\", \"user_id\": \"{user_id}\", \"names\": [\"old_var_name\"]}"
}
{
"script_command": "python agent-memory1.0_skill/scripts/run_memory_operation.py",
"script_params": "{\"operation\": \"trace\", \"message_id\": \"{message_id}\"}"
}
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
operation | string | 是 | — | search / get / save / update / delete / batch_delete / update_variables / delete_variables / trace / flush / status |
user_id | string | 是* | — | 用户标识,*status 操作不需要 |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识(与 MemoryRail 保持一致) |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
query | string | 否 | "业务关键词" | 搜索查询文本 |
top_k | int | 否 | 5 | 返回结果数量上限 |
threshold | float | 否 | 0.0 | 向量搜索相似度阈值(0.0 = 不过滤) |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
top_k | int | 否 | 20 | 返回结果数量上限 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
content | string | 否 | "" | 要写入的文本内容(简化模式) |
role | string | 否 | "assistant" | 消息角色(简化模式) |
messages | array | 否 | — | 完整消息列表 [{"role":"...","content":"..."}](与 content 二选一) |
session_id | string | 否 | "" | 会话 ID |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
buffer | bool | 否 | false | true=缓冲写入,false=直接写入 |
enable_long_term_mem | bool | 否 | true | 启用长期记忆 |
enable_semantic_memory | bool | 否 | true | 启用语义记忆 |
enable_episodic_memory | bool | 否 | true | 启用情景记忆 |
enable_summary_memory | bool | 否 | true | 启用摘要记忆 |
enable_user_profile | bool | 否 | true | 启用用户画像 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
session_id | string | 否 | "" | 会话 ID |
无需参数。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
mem_id | string | 是 | — | 要更新的记忆 ID |
memory | string | 是 | — | 修正后的记忆文本内容 |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
mem_id | string | 是 | — | 要删除的记忆 ID |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
mem_ids | array | 是 | — | 要删除的记忆 ID 列表 |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
variables | object | 是 | — | 键值对 {"变量名": "变量值"},如 {"status": "normal"} |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
names | array | 是 | — | 要删除的变量名列表 |
scope_id | string | 否 | "edp_agent" | 多租户隔离标识 |
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
message_id | string | 是 | — | 要追溯的消息 ID(通常从记忆的 source_id 字段获取) |
{
"success": true,
"operation": "search",
"user_id": "<YOUR_USER_ID>",
"scope_id": "edp_agent",
"total_results": 3,
"variables": {"category": "general", "priority": "normal"},
"results": [
{
"content": "2024-01-15,用户 USER_001 处理结论:正常...",
"type": "summary",
"score": 1.0,
"source": "summary_search"
}
],
"search_summary":
{
"success": true,
"operation": "save",
"user_id": "<YOUR_USER_ID>",
"mode": "direct",
"message_count": 1,
"breaker_open": false
}
{
"success": true,
"operation": "save",
"user_id": "<YOUR_USER_ID>",
"mode": "buffered",
"buffered_messages": 1,
"buffer_total_chars": 1523,
"buffer_threshold": 20000,
"breaker_open": false
}
{
"success": false,
"operation": "save",
"user_id": "<YOUR_USER_ID>",
"error": "没有可写入的消息内容(全部为空或仅包含空白字符)",
"mode": "filtered",
"breaker_open": false
}
v1.1+ 修复:当所有消息的
content均为空字符串或仅包含空白字符时:
- Skill 本地过滤(防御层)→ 返回
success: false(如上)- 若绕过 skill 直接调用 mem1.0 HTTP API → mem1.0 返回 HTTP 422
{"detail": "No valid messages (all content is empty)"}PR #244 已修复:mem1.0 服务端现在过滤空内容和纯空白内容(
content.strip() == "")。Skill 仍保留本地过滤作为熔断/buffer 场景的防御层。
{
"success": true,
"operation": "flush",
"user_id": "<YOUR_USER_ID>",
"flushed_count": 5,
"breaker_open": false
}
{
"success": true,
"operation": "status",
"circuit_breaker": {
"open": false,
"failure_count": 0,
"threshold": 5,
"cooldown_seconds": 120,
"breaker_open_until": 0.0
},
"config": {
"base_url": "<YOUR_MEMORY_BASE_URL>",
"timeout": 30,
"buffer_chars_threshold": 20000,
"state_dir": "/tmp/mem1_skill_state"
},
"buffers": {
{
"success": true,
"operation": "update",
"user_id": "<YOUR_USER_ID>",
"scope_id": "edp_agent",
"mem_id": "mem_abc123",
"message": "Memory updated successfully",
"breaker_open": false
}
{
"success": true,
"operation": "delete",
"user_id": "<YOUR_USER_ID>",
"scope_id": "edp_agent",
"mem_id": "mem_abc123",
"message": "Memory deleted successfully",
"breaker_open": false
}
{
"success": true,
"operation": "batch_delete",
"user_id": "<YOUR_USER_ID>",
"scope_id": "edp_agent",
"deleted": 2,
"failed": 0,
"errors": [],
"breaker_open": false
}
{
"success": true,
"operation": "update_variables",
"user_id": "<YOUR_USER_ID>",
"scope_id": "edp_agent",
"updated_count": 2,
"message": "Variables updated successfully",
"breaker_open": false
}
{
"success": true,
"operation": "delete_variables",
"user_id": "<YOUR_USER_ID>",
"scope_id": "edp_agent",
"deleted": 1,
"breaker_open": false
}
{
"success": true,
"operation": "trace",
"message_id": "msg_abc123",
"message": {
"role": "user",
"content": "原始对话内容...",
"timestamp": "2026-08-26T15:36:17.517757+08:00"
},
"breaker_open": false
}
时区说明:v1.1+(对应 mem1.0 PR #244 后),
timestamp字段使用本地时区(带时区偏移,如+08:00),不再强制使用 UTC。Agent 在解析时间戳时应考虑时区信息。
{
"success": true,
"operation": "trace",
"message_id": "msg_nonexistent_id",
"message": {
"found": false,
"message_id": "msg_nonexistent_id"
},
"breaker_open": false
}
v1.1+ 修复:当
message_id不存在时,mem1.0 不再返回 HTTP 500,而是{"found": false}(PR #244 已修复message_manager.get_by_id的BaseError异常处理)。Skill 仍返回success: true,调用方需检查message.found字段判断溯源是否成功。
{
"success": false,
"operation": "search",
"user_id": "<YOUR_USER_ID>",
"error": "连接失败: Connection refused",
"results": [],
"breaker_open": false
}
| 环境变量 | 默认值 | 说明 |
|---|---|---|
MEM1_BASE_URL | <YOUR_MEMORY_BASE_URL> | agent-memory1.0 服务地址 |
MEM1_API_KEY | <YOUR_MEMORY_API_KEY> | API 认证密钥 |
MEM1_TIMEOUT | 30 | 请求超时(秒) |
MEM1_STATE_DIR | /tmp/mem1_skill_state | 熔断器/缓冲区状态文件目录 |
MEM1_CIRCUIT_BREAKER_THRESHOLD | 5 | 熔断器连续失败阈值 |
MEM1_CIRCUIT_BREAKER_COOLDOWN | 120 | 熔断器冷却秒数 |
MEM1_BUFFER_CHARS_THRESHOLD | 20000 | 缓冲区字符数阈值(超过则自动 flush) |
MEM1_DEFAULT_SCOPE_ID | edp_agent | 默认 scope_id(多租户隔离) |
search 操作(与 MemoryRail _http_search_mem1 完全对等):
0. POST /get_variables/ ← 用户画像变量(risk_preference 等)
1. POST /search_memory/ ← 向量语义搜索
↓
2. POST /search_user_history_summary/ ← 对话摘要搜索
↓ 无结果或结果不足
3. POST /get_user_mem_by_page/ ← 页面检索(兜底,仅在前 3 路返回空时触发)
↓
合并去重 → 返回 results + variables
save 操作 (buffer=false):
POST /add_messages/ → 直接写入 agent-memory1.0
save 操作 (buffer=true):
追加到缓冲区文件 → 满足阈值时自动 flush
→ 或手动调用 flush 操作
update 操作:
POST /update_mem_by_id/ → 用新内容替换指定记忆
delete 操作:
POST /delete_mem_by_id/ → 删除单条记忆
batch_delete 操作:
POST /batch_delete_mem/ → 批量删除多条记忆(向量 + KV 批量删,非逐条 HTTP)
update_variables 操作:
POST /update_variables/ → 创建或更新用户画像变量
delete_variables 操作:
POST /delete_variables/ → 按名称删除用户画像变量
trace 操作:
POST /get_message_by_id/ → 返回原始消息的 role / content / timestamp
用途:从记忆的 source_id 追溯到原始对话,满足审计要求
正常状态: failure_count = 0, breaker_open = false
↓
第1次失败: failure_count = 1
第2次失败: failure_count = 2
...
第5次失败: failure_count = 5 → 熔断器打开! 冷却 120 秒
↓
冷却期间: 所有操作直接返回 success:false,不发起 HTTP 请求
↓
120 秒后: 自动复位,尝试下一次调用
├─ 成功 → failure_count 归零,恢复正常
└─ 失败 → 重新开始计数...
{MEM1_STATE_DIR}/circuit_breaker.json,跨进程共享save (buffer=true) → 追加到 {MEM1_STATE_DIR}/buffer_{user_id}.jsonl
→ 累计字符数 >= MEM1_BUFFER_CHARS_THRESHOLD (20000) → 自动 flush
flush 操作 → 手动将缓冲区所有消息批量写入 agent-memory1.0
三种触发条件:
MEM1_BUFFER_CHARS_THRESHOLDflush 操作save 时检测到超过阈值,先 flush 再追加所有操作出现错误时:
success: false + 结构化错误信息risk_review.skill_runtime 等内部模块,可以独立运行和测试call_mcp 调用之间熔断器状态一致save 时使用 buffer: true,对话结束时调用 flush 统一写入edp_agent,与 MemoryRail 的 memory_scope_id 保持一致以下端点由 mem1.0 服务端提供,但未被本 Skill 集成(运维场景使用,Agent 无需调用):
| 端点 | 方法 | 用途 | 集成建议 |
|---|---|---|---|
/admin/mem_meta/refresh | POST | 触发元数据刷新任务(异步) | ❌ 运维操作 |
/admin/mem_meta/expired_memorys | POST | 查询有过期记忆的 Top N 用户 | ❌ 运维操作 |
/admin/mem_meta/batch_delete | POST | 批量删除过期记忆(异步) | ❌ 运维操作 |
/admin/mem_meta/task_status | GET | 查询异步任务状态 | ❌ 运维操作 |
/delete_mem_by_scope/ | POST | 按 scope 删除某用户全部记忆 | ⚠️ 可选集成 |
/get_user_mem_by_page_with_total/ | POST | 分页获取(含 total) | ⚠️ 可选集成 |
/admin/messages/query | POST | 管理端消息查询 | ❌ 运维操作 |
/admin/messages/stats | GET | 管理端消息统计 | ❌ 运维操作 |
/admin/messages/detail/{msg_id} | GET | 管理端消息详情(含完整元数据) | ⚠️ 可选(trace 替代) |
/logs/tail /logs/download /logs/files | GET | 日志查询 | ❌ 运维操作 |
设计原则:Skill 仅集成 Agent 必需的操作,运维/管理类端点通过独立脚本或平台工具直接调用。
| 变更 | mem1.0 端改动 | 对 Skill 的影响 |
|---|---|---|
message_manager.get_by_id 补 except BaseError | message_manager.py:138-144 | trace 操作:不存在 message_id 时返回 {"found":false} 而非 HTTP 500 |
add_messages 端点过滤空/空白内容 | memory_server.py:561-590 | save 操作:全部为空时服务端返回 422 |
| 返回时间戳改用本地时区 | 5 个 *_manager.py / *_store.py | trace/search/get 返回的时间戳带本地时区偏移(如 +08:00) |
| 新增 mem_meta 4 个管理端点 | mem_meta_api.py | Skill 未集成,运维参考 |
Skill 代码无需修改即可兼容 PR #244 后的 mem1.0 服务端。