How to

Pydantic AI 适配器预览

仓库中包含一个预览适配器,用于让 Pydantic AI Agent 通过运行中的 PowerContext Server 共享持久化 Memory。目前 还没有受支持的独立安装方式。

使用前检查可用状态

powercontext-pydantic-ai 目前没有发布到 PyPI。它的源码包还要求正式版本 powercontext[client]>=0.0.3,而当前公开包和 master 的开发版本都不满足该约束。因此,旧的 PyPI 命令和直接从 Git subdirectory 安装都会在依赖解析时失败。

请等待根包和适配器发布兼容版本后再把它加入应用。仓库贡献者可以通过根目录开发环境运行适配器测试;后续内容仅用于 说明预览 API,不能作为受支持的安装路径。

挂载预览 Capability

下面的示例使用 OpenAI。使用其他 Provider 时,请安装匹配的 pydantic-ai-slim Provider extra,并修改模型字符串。

把 Capability 加到 Agent:

from pydantic_ai import Agent
from powercontext_pydantic_ai import PowerContext

agent = Agent(
    "openai:gpt-5.2",
    capabilities=[PowerContext()],
)

该 Capability 提供 powercontext_searchpowercontext_rememberpowercontext_context。它还会从最新文本 User Prompt 请求 prepare_context,并在一个 run 内最多前置一次不可信证据块。即使新 run 复用旧 message history,也会重新准备 Context。

如果只需要工具,不需要自动准备与采集,可以只挂载 Toolset:

from pydantic_ai import Agent
from powercontext_pydantic_ai import PowerContextToolset

agent = Agent("openai:gpt-5.2", toolsets=[PowerContextToolset()])

设置环境变量

export POWERCONTEXT_PYDANTIC_AI_BASE_URL=http://127.0.0.1:8000
export POWERCONTEXT_PYDANTIC_AI_TOKEN=opaque-server-token
变量默认值校验与行为
POWERCONTEXT_PYDANTIC_AI_BASE_URLhttp://127.0.0.1:8000HTTP(S),不能含凭证、query 或 fragment
POWERCONTEXT_PYDANTIC_AI_TOKEN未设置SecretStr 保存的裸可打印 Token
POWERCONTEXT_PYDANTIC_AI_SCOPE_ID未设置最多 256 个字符的已有 Server Scope;未设置时选择 Server 默认 Scope
POWERCONTEXT_PYDANTIC_AI_TIMEOUT10正秒数
POWERCONTEXT_PYDANTIC_AI_MAX_BYTES800051232768 Context 字节
POWERCONTEXT_PYDANTIC_AI_CAPTURE_EVENTSfalse显式同意采集可见事件
POWERCONTEXT_PYDANTIC_AI_CAPTURE_CHECKPOINT_EVERY51100 个成功事件 Flush
POWERCONTEXT_PYDANTIC_AI_CAPTURE_MAX_BYTES8192每个事件 51232768 UTF-8 字节

Codex 与 Claude Code 插件的相关设置接收完整 authorization 值,而本适配器只接收裸 Token。不要带 Bearer ,也不要传完整 Authorization Header;公共 Client 会补上 scheme。

PowerContextPowerContextToolset 都接受 PowerContextSettings、稳定的 id(默认 powercontext), 以及固定或回调形式的 scope_id

from pydantic_ai import RunContext
from powercontext_pydantic_ai import PowerContext, PowerContextSettings

settings = PowerContextSettings(timeout=5, max_bytes=4096)


def tenant_scope(ctx: RunContext[dict[str, str]]) -> str:
    return f"tenant:{ctx.deps['tenant_id']}"


capability = PowerContext(settings=settings, scope_id=tenant_scope)

回调在每个 Agent run 内只执行一次。Scope 优先级是构造器字符串或回调,其次是环境变量 SCOPE_ID。适配器在每个 run 内只把该显式 ID(未配置时为 None)发送给 resolve_scope_binding 一次,并在该 run 的 Recall、Capture、 Flush 和工具调用中复用 Server 返回的 Scope ID。显式 ID 必须对应 Server 中已有的 Scope;未配置时选择 Server 默认 Scope。适配器不会读取 cwd、Git 元数据或路径来创建 Scope ID。

决定是否采集事件

Capture 默认关闭。只有在允许把初始用户文本、可见模型文本和工具调用、已完成的工具参数与结果发送到指定 scope 时,才设置 POWERCONTEXT_PYDANTIC_AI_CAPTURE_EVENTS=true。Thinking/reasoning 内容不会采集。事件会清洗敏感键、 已知环境凭证和 Codex 凭证,按配置的字节上限渲染,并使用 powercontext.pydantic-ai-capture-event/v1 schema。

每次成功 Capture 都会推进 run-local Source position。达到配置数量时执行 checkpoint Flush,after_run 会 Flush 剩余 Source;并发工具结果在 run-local lock 下获得唯一序号。Recall、Capture 和 Flush 遇到 Server 故障时 fail-open; 显式工具失败则转换为 ModelRetry。HTTP 401 或 403 首次出现时只记录一条不含凭证的配置告警。

凭证清洗不能保证普通项目内容不敏感,请同时保护 Server、scope、数据库和日志。

与 MCP 备选方案比较

连接 PowerContext MCP 不需要额外适配器包,但对 Pydantic AI 来说能力较低。MCP 提供显式工具,不会自动调用 prepare_context,也不会采集轨迹或在 checkpoint/run 结束时 Flush。

预览版只支持普通 Pydantic AI run;Temporal、DBOS、Prefect 等 durable execution 尚未验证。Handoff、Candidate Review、Experience 与 Skill operation 不在本适配器范围内。

On this page