Skip to main content
这一页用最小 Server。没有生成模型,也不需要向量搜索。 先做一件能当场验证的事:写出一条项目决策,搜到它,再把它装进这一次请求的 。然后修订、停用,并确认历史还在。 第一条闭环:写出 Memory,搜到它,再拿到带 Citation 的 PreparedContext。
接口字段和错误码以 官方文档 的最新发布版本为准。这页帮你把第一条闭环跑出来。

四个入口,同一套数据

HTTP、Python Client、MCP 和 CLI 都连同一个 Server。覆盖面不一样。 本地 Server 也可以打开接口说明:
/docs 是公开的接口说明页。开了认证它仍能打开。/openapi.json 和实际调用需要 Bearer 请求头。不要把令牌放进 URL。完整字段仍以 官方文档 为准。

准备示例项目

上一页已经安装了客户端附加依赖。新建 api_tour.py,使用下面的完整脚本。
运行:
每次运行使用唯一 Scope,避免上一次教程数据让重复写入、条目计数或 Revision 断言失效。真实项目应改用稳定的项目 Scope,不要用随机值。

这段脚本在证明什么

写下 Memory,不需要先有 Source

remember_memory 直接写下你已经确认的长期知识。示例里 source_refs 通常是空的。 首次有效写入返回:
  • 精确 Memory Artifact 版本引用;
  • 逻辑 entry_id;
  • 精确 entry_version_id;
  • 当前条目内容和状态。
完全重复的启用状态内容是无变更。它返回当前 Memory 版本引用,但 entry 是 null。所以不要假定每次 remember_memory 都有 response.entry.citation。

搜索为空,有两种正常情况

Scope 从未有过 Memory:
Scope 有 Memory,但查询没匹配:
两者都是 HTTP 200 下的正常结果。

PreparedContext 已经是最终封装

prepared.content 已包含信任标记、边界和 Citation。Agent 可以把它当作不可信历史证据放进这一次请求,不必再拼搜索命中。 status="empty" 时:
status="ready" 时,实际 UTF-8 字节必须等于 content_bytes,并且不超过请求的 max_bytes。

读取历史和改内容,用的不是同一套版本规则

旧 Citation 还能用 get_memory_entry 读历史。 revise_memory_entry 和 retire_memory_entry 只接受当前头版本 Citation。Memory 一改,Revision 往前走,旧 Citation 再改会返回 HTTP 409 revision_conflict。 下一步用修改响应里的新 Citation。

停用不等于删除

停用后:
  • 默认列出不再显示条目;
  • 启用状态搜索 / 召回不再选择它;
  • include_inactive=True 仍能审计;
  • 精确历史读取仍然有效。

出错时看什么

Python Client 保留 HTTP 状态、稳定错误 code、Server 消息和 X-PowerContext-Request-ID。
常见状态: 遇到 409,先重新读取当前值,再决定要不要重试。不要猜 Revision。

MCP 和 HTTP 覆盖面不一样

MCP 是给 Agent 明确调用的工具。HTTP 才是完整接口。 POST /v1/context/prepare 和 Python Client 的 prepare_context 不会作为 MCP 工具出现。最终 PreparedContext 通常由 Hook 或框架适配器在请求时准备。MCP 也不等于每个集成自己的自动召回、采集和刷新。 要连上客户端、核对自己能调哪些工具,看用 MCP 连接 Server。

怎么知道跑通了

终端里应能看到这几件事:
  • 第一次写入返回精确条目 Citation。
  • 重复写入是 entry=None 的无变更。
  • 全文搜索 / auto 能找到这条启用状态条目。
  • PreparedContext 是 ready,字节数对得上。
  • 修订后,旧 Citation 还能精确读到。
  • 用旧 Citation 再改,返回 409。
  • 停用后,默认列表是空的;带上停用状态,历史还在。
对不上时,先对排错。

下一步

用 Dashboard 核对数字

Dashboard 不显示 Memory 正文。配上刚才那个 Scope,核对 total=1、active=0、inactive=1。

Source 与 Memory

下一条路是先采集 Source,再抽取 Memory。采集成功不等于留下知识。