FXJ Wiki

Back

前置知识#

本文目标#

完成阅读后,你将理解:

  1. Go 服务当前暴露了哪些 REST 能力
  2. gRPC StorageService 包含哪些 RPC
  3. Python SDK、CLI 和 MCP 工具分别适合什么场景

REST API#

当前 HTTP 层路由注册在 go-server/internal/gateway/handler.go:40。核心路由如下:

方法路径说明
GET/health健康快照
GET/metricsPrometheus 指标
GET/api/v1/info版本、构建信息、运行时长
POST/api/v1/memories新增记忆
GET/api/v1/memories列表查询
GET/api/v1/memories/{id}查询单条记忆
PUT/api/v1/memories/{id}更新记忆
DELETE/api/v1/memories/{id}软删除记忆
POST/api/v1/search/full-text全文检索
POST/api/v1/search/entities实体检索
POST/api/v1/search/vector向量检索
POST/api/v1/search/query融合检索
POST/api/v1/touch刷新访问时间
GET/api/v1/trace/ancestors追祖先链
GET/api/v1/trace/descendants追后代链
GET/api/v1/relations列关系
POST/api/v1/relations建关系
GET/api/v1/relations/exists判定关系是否存在
GET/api/v1/evolution读取演化事件
GET/api/v1/audit读取审计事件

统一状态码说明#

虽然每个 handler 没有显式列出全部状态码,但当前接口族可以按下面理解:

状态码何时出现说明
200普通查询、更新、删除成功成功返回 JSON 结果
201新建记忆、创建关系成功资源已创建
400JSON 解析失败、参数格式错误请求体或查询参数不合法
401API Key / JWT 校验失败认证未通过
404当前实现通常不单独返回多数读接口会返回 found=false,而不是 404
500存储、搜索、内部异常服务端处理失败

这里有个细节:GET /api/v1/memories/{id} 当前返回 200 + {"found": false},并没有走 404。
这是一种明确的接口风格,方便 SDK 侧把“没找到”当普通分支处理。

REST 重点端点字段表#

计划要求至少覆盖三个端点的请求/响应字段表,这里按最常用的三个来展开。

POST /api/v1/memories#

处理逻辑在 go-server/internal/gateway/handler.go:104,请求体直接解到 memoryv1.MemoryItem

请求体字段#

字段类型必填说明
idstring业务主键,通常由 Python SDK 生成 UUID
contentstring记忆正文
memory_typestring记忆类型,如 semanticepisodicprocedural
embeddingnumber[]向量表示,长度取决于 embedding 模型
created_atstringISO 时间字符串
last_accessedstring最近访问时间,初始通常与 created_at 相同
access_countinteger访问次数,若 SDK 构造对象时未设定,一般为默认值
valid_fromstring生效开始时间,可为空串
valid_untilstring生效结束时间,可为空串
trust_scorenumber初始信任分,范围通常在 [0,1]
importancenumber重要性分数,范围通常在 [0,1]
layerstring记忆层级,如 workingshort_termlong_term
decay_ratenumber遗忘衰减参数
source_idstring来源标识,如 conversation:123
causal_parent_idstring因果父记忆 id
supersedes_idstring被当前记忆覆盖的旧记忆 id
entity_refsstring[]实体列表
tagsstring[]标签列表
deleted_atstring软删除时间,新增时通常为空

响应体字段#

成功返回 201,结构如下:

字段类型说明
itemobject刚刚写入的 MemoryItem 完整对象

其中 item 内部就是上面同样的 19 个字段。

示例请求#

curl -X POST http://127.0.0.1:8080/api/v1/memories \
  -H 'Content-Type: application/json' \
  -d '{
    "id":"demo-1",
    "content":"SQLite works well for local-first agents.",
    "memory_type":"semantic",
    "embedding":[0.1,0.2,0.3],
    "created_at":"2026-03-25T00:00:00Z",
    "last_accessed":"2026-03-25T00:00:00Z",
    "access_count":0,
    "valid_from":"",
    "valid_until":"",
    "trust_score":0.8,
    "importance":0.6,
    "layer":"short_term",
    "decay_rate":0.1,
    "source_id":"demo",
    "causal_parent_id":"",
    "supersedes_id":"",
    "entity_refs":["sqlite","agent"],
    "tags":["demo"],
    "deleted_at":""
  }'
bash

POST /api/v1/search/query#

处理逻辑在 go-server/internal/gateway/handler.go:242,这也是远程模式下 Python SDK 最常调用的接口。

请求体字段#

字段类型必填说明
querystring用户原始查询
embeddingnumber[]查询向量,由 Python 侧提前生成
entitiesstring[]从 query 中抽出的实体列表
limitinteger最终返回条数,0 时服务端会回退到默认值

响应体字段#

成功返回 200

字段类型说明
resultsobject[]搜索结果列表

results[i] 的内部字段如下:

字段类型说明
itemobject命中的 MemoryItem
scorenumberRRF 融合后的最终分数
matched_bystring[]命中来源,如 semanticfull_textentitycausal_trace

示例请求#

curl -X POST http://127.0.0.1:8080/api/v1/search/query \
  -H 'Content-Type: application/json' \
  -d '{"query":"为什么选择 SQLite","embedding":[0.1,0.2,0.3],"entities":["sqlite"],"limit":5}'
bash

语义说明#

这个接口本身并不重新生成 embedding,也不做实体抽取。
它假定调用方已经把这两项准备好,然后 Go 服务只负责策略编排、召回、融合和访问计数更新。

GET /api/v1/memories/{id}#

处理逻辑在 go-server/internal/gateway/handler.go:136

路径参数#

参数类型必填说明
idstring记忆主键

响应体字段#

字段类型说明
foundboolean是否找到该记忆
itemobject | null找到时返回完整 MemoryItem,未找到时通常为空

这类返回适合 SDK 直接映射成 MemoryItem | None

其他 REST 端点速查#

路径请求字段摘要响应字段摘要
POST /api/v1/search/full-textquerylimitmemory_typeresults[]
POST /api/v1/search/entitiesentitieslimitmemory_typeresults[]
POST /api/v1/search/vectorembeddinglimitmemory_typeresults[]
POST /api/v1/touchmemory_idok
GET /api/v1/trace/ancestorsmemory_idmax_depthitems[]
GET /api/v1/trace/descendantsmemory_idmax_depthitems[]
POST /api/v1/relationssource_idtarget_idrelation_typecreated_atcreated
GET /api/v1/relationsmemory_id 可选items[]
GET /api/v1/relations/existsleft_idright_idrelation_typesexists
GET /api/v1/evolutionmemory_idlimititems[]
GET /api/v1/auditlimititems[]
GET /healthHealthSnapshot
GET /api/v1/info版本、构建信息、Go 版本、启动时间等

/health 响应字段#

字段类型说明
total_memoriesinteger当前有效记忆数
stale_rationumber长时间未访问记忆占比
orphan_rationumber孤立记忆占比
unresolved_conflictsinteger当前冲突边数量
average_trust_scorenumber平均信任分
audit_eventsinteger审计事件总数
database_size_bytesintegerGo 服务端数据库文件大小

/api/v1/info 响应字段#

字段类型说明
versionstring构建版本
build.pathstring模块路径
build.settingsobjectvcs.* 构建信息
go_versionstringGo 运行时版本
sqlite_vec_statusstringGo 服务当前固定为 not_applicable_in_go_server
vector_search_modestring当前为 cosine_scan
started_atstring服务启动时间
uptime_secondsnumber运行时长

gRPC API#

StorageService 定义在 proto/memory/v1/storage_service.proto:9,当前提供 18 个 RPC:

  • AddMemory
  • GetMemory
  • UpdateMemory
  • DeleteMemory
  • SearchQuery
  • SearchFullText
  • SearchByEntities
  • SearchByVector
  • TouchMemory
  • TraceAncestors
  • TraceDescendants
  • ListMemories
  • AddRelation
  • ListRelations
  • RelationExists
  • GetEvolutionEvents
  • GetAuditEvents
  • HealthCheck

AddMemory 字段表#

文件:proto/memory/v1/storage_service.proto:30

Request#

字段类型说明
itemMemoryItem待写入的完整记忆对象

Response#

字段类型说明
itemMemoryItem服务端写入后的对象

GetMemory 字段表#

Request#

字段类型说明
memory_idstring目标记忆 id

Response#

字段类型说明
foundbool是否命中
itemMemoryItem命中时返回对象

SearchQuery 字段表#

文件:proto/memory/v1/storage_service.proto:54

Request#

字段类型说明
querystring原始查询文本
embeddingrepeated float查询向量
entitiesrepeated string实体列表
limitint32返回条数

Response#

返回的是 SearchResultList

字段类型说明
resultsrepeated SearchResult搜索结果列表

其中 SearchResultproto/memory/v1/models.proto:36 定义:

字段类型说明
itemMemoryItem命中的记忆
scoredouble搜索分数
matched_byrepeated string命中来源

TraceAncestors 字段表#

文件:proto/memory/v1/storage_service.proto:83

Request#

字段类型说明
memory_idstring起始记忆 id
max_depthint32最大回溯深度

Response#

字段类型说明
itemsrepeated MemoryItem按深度顺序返回的祖先链

其他常用 RPC 速查#

RPCRequest 重点字段Response 重点字段
SearchFullTextquerylimitmemory_typeresults[]
SearchByEntitiesentitieslimitmemory_typeresults[]
SearchByVectorembeddinglimitmemory_typeresults[]
TouchMemorymemory_idvalue
ListMemoriesinclude_deleteditems[]
AddRelationedgecreated
ListRelationsmemory_iditems[]
RelationExistsleft_idright_idrelation_typesvalue
GetEvolutionEventsmemory_idlimititems[]
GetAuditEventslimititems[]
HealthChecksnapshot

gRPC 示例:Python 调用#

response = stub.SearchQuery(
    storage_service_pb2.SearchQueryRequest(
        query="为什么选择 SQLite",
        embedding=[0.1, 0.2, 0.3],
        entities=["sqlite"],
        limit=5,
    )
)
python

Python SDK 方法签名#

MemoryClient 暴露的方法集中在 src/agent_memory/client.py。下面列出最常用公开方法的签名、参数和返回值。

核心方法#

方法签名返回值用途
add`add(content: str, *, source_id: str, memory_type: MemoryTypestr = MemoryType.SEMANTIC, importance: float = 0.5, trust_score: float = 0.75, tags: list[str] | None = None, entity_refs: list[str] | None = None, causal_parent_id: str | None = None, supersedes_id: str | None = None)`MemoryItem
getget(memory_id: str)MemoryItem | None查询单条记忆
updateupdate(item: MemoryItem, **changes: object)MemoryItem更新记忆
deletedelete(memory_id: str)bool软删除
searchsearch(query: str, limit: int | None = None)list[SearchResult]融合检索
tracetrace(memory_id: str, max_depth: int = 10)list[MemoryItem]只看祖先链
trace_graphtrace_graph(memory_id: str, max_depth: int = 10)TraceReport返回焦点、祖先、后代、关系、演化事件
ingest_conversationingest_conversation(turns: list[ConversationTurn], source_id: str)list[MemoryItem]从对话批量提取记忆
maintainmaintain()MaintenanceReport执行治理周期
healthhealth()HealthReport读取健康快照
audit_eventsaudit_events(limit: int = 50)list[dict[str, object]]审计日志
evolution_eventsevolution_events(memory_id: str | None = None, limit: int = 50)list[dict[str, object]]演化事件
export_jsonlexport_jsonl(path: str)int导出条数
import_jsonlimport_jsonl(path: str)int导入条数

这些方法已经覆盖了绝大多数应用集成场景。

CLI 命令#

Python CLI:agent-memory#

当前常用子命令包括:

  • store
  • search
  • trace
  • evolution
  • audit
  • health
  • maintain
  • export
  • import

Go CLI:agent-memory-go#

Go 侧当前提供:

  • health
  • store
  • search

Go CLI 更像轻量调试入口;Python CLI 更像完整用户入口。

MCP 工具参数表#

MCP 工具定义在 src/agent_memory/interfaces/mcp_server.py:48。计划要求每个工具补参数表,下面逐个列出。

工具名参数类型说明
memory_storecontentstring记忆正文
memory_storesource_idstring来源标识
memory_storememory_typestring记忆类型,默认 semantic
memory_searchquerystring搜索问题
memory_searchlimitinteger返回条数,默认 5
memory_ingest_conversationturnsobject[]对话轮次列表,每项通常含 rolecontent
memory_ingest_conversationsource_idstring对话来源标识
memory_tracememory_idstring目标记忆 id
memory_tracemax_depthinteger最大追踪深度,默认 10
memory_health-返回健康快照
memory_auditlimitinteger审计条数,默认 50
memory_evolutionmemory_idstring目标记忆 id
memory_evolutionlimitinteger返回条数,默认 50
memory_updatememory_idstring目标记忆 id
memory_updatecontentstring新内容
memory_deletememory_idstring目标记忆 id
memory_maintain-执行一次维护周期
memory_exportpathstring导出 JSONL 路径

MCP 常见返回结构#

工具名返回字段说明
memory_storeidcontenttrust_score新记忆的轻量信息
memory_searchidcontentscorematched_by便于 Agent 直接消费
memory_tracefocusancestorsdescendantsrelationsevolution_events可序列化图结构
memory_health健康快照字段便于外部探针读取
memory_maintainpromoteddemoteddecayed维护周期结果
memory_exportpathexported导出路径与数量

MCP 返回值风格#

MCP 工具返回值整体偏轻量:

  • memory_store 返回 idcontenttrust_score
  • memory_search 返回简化后的结果列表
  • memory_trace 返回可序列化的图结构
  • memory_maintain 返回 MaintenanceReport 的字典形式

这样设计的好处是便于 Agent 工具直接消费,不必处理过于臃肿的原始对象。

认证与错误处理速查#

HTTP 认证#

当前服务模式支持两种材料:

  • X-API-Key: <key>
  • Authorization: Bearer <jwt>

只要命中其中一种即可通过。

gRPC 认证#

对应的 metadata 键是:

  • x-api-key
  • authorization

常见错误返回#

场景REST 表现gRPC 表现
未认证401 unauthorizedUnauthenticated
JSON 解析失败400request 无法解码
内部存储错误500RPC error
没查到对象200 + found=falsefound=false

这个速查表很适合调 SDK 或写集成代码时快速定位问题。

小结#

  • REST 层覆盖了写入、查询、检索、关系、治理与健康检查
  • POST /api/v1/memoriesPOST /api/v1/search/queryGET /api/v1/memories/{id} 三个端点最值得优先掌握
  • gRPC StorageService 与 REST 基本一一对应,适合强类型远程调用
  • Python SDK 负责统一开发体验,MCP 工具则把这套能力进一步暴露给 Agent

延伸阅读#