Doramagic 项目包 · 项目说明书

pydantic-ai-backend 项目

Pydantic AI 的文件存储与沙箱后端:提供文件操作控制台、基于 Docker 隔离的安全执行沙箱,以及带预设的权限系统来管控访问。支持内存、本地和容器化存储,助力智能体在多用户场景下实现安全处理与测试。

Overview and Getting Started

pydantic-ai-backend 是为 pydantic-ai 与 pydantic-deep 等智能体框架提供的文件存储与沙箱执行后端库。项目的核心目标是让 AI 代理能够以统一、可插拔的方式进行文件读写、代码执行与权限管理,从而支持"环境即工具"(Environment as a Tool)等高级代理模式 资料来源:[README.md]()。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 安装

继续阅读本节完整说明和来源证据。

章节 最小工作示例

继续阅读本节完整说明和来源证据。

章节 1. 协议驱动的可替换性

继续阅读本节完整说明和来源证据。

概述与入门指南

一、项目定位与设计目标

pydantic-ai-backend 是为 pydantic-aipydantic-deep 等智能体框架提供的文件存储与沙箱执行后端库。项目的核心目标是让 AI 代理能够以统一、可插拔的方式进行文件读写、代码执行与权限管理,从而支持"环境即工具"(Environment as a Tool)等高级代理模式 资料来源:README.md

该项目的关键设计原则是 基于协议的后端抽象:所有后端都实现 BackendProtocol,以便在不同存储介质之间无缝切换 资料来源:CLAUDE.md。同时,它还提供了:

  • 多种后端实现:内存态 StateBackend、本地文件系统 LocalBackend/FilesystemBackend、Docker 沙箱、D
  • 复合路由CompositeBackend 支持基于路径前缀的多后端路由 资料来源:CLAUDE.md
  • 沙箱抽象:通过 BaseSandbox 统一 Docker、Kubernetes Pod 与 Daytona 等隔离环境
  • 权限系统:基于规则集的 PermissionChecker 控制代理对敏感路径和操作的访问
  • Hashline 编辑协议:受 Can Bölük 启发,使用 行号:内容哈希 引用避免空白匹配错误并减少输出 token 资料来源:src/pydantic_ai_backends/hashline.py

二、整体架构

下图展示了系统的核心组件及其关系:

graph TB
    Agent["Pydantic AI Agent"]
    Toolset["ConsoleToolset<br/>create_console_toolset()"]
    Protocol["BackendProtocol<br/>(exists, ls_info, read_bytes...)"]
    Adapter["Async Adapter<br/>ensure_async()"]
    
    State["StateBackend<br/>(内存)"]
    Local["LocalBackend<br/>(本地文件系统)"]
    Composite["CompositeBackend<br/>(路径前缀路由)"]
    Docker["DockerSandbox<br/>(隔离执行)"]
    
    Perm["PermissionChecker<br/>(规则集)"]
    Hashline["Hashline Editor<br/>(行级哈希编辑)"]
    
    Agent --> Toolset
    Toolset --> Protocol
    Toolset --> Perm
    Protocol -.实现.-> State
    Protocol -.实现.-> Local
    Protocol -.实现.-> Composite
    Protocol -.实现.-> Docker
    Adapter -.包装.-> Protocol
    Toolset --> Hashline

BackendProtocol 是所有后端实现的统一接口,例如 exists() 方法于 0.2.8 版本作为一等公民加入,用于无歧义地判断文件是否存在 资料来源:src/pydantic_ai_backends/protocol.py。类型定义(如 WriteResultEditResultExecuteResponse)统一在 types.py 中声明 资料来源:src/pydantic_ai_backends/types.py

三、安装与基础使用

安装

项目使用 uv 进行依赖管理。可选的 extras 包括 dockerdaytonakubernetes,用于启用相应的沙箱后端 资料来源:CLAUDE.md

# 同步所有依赖(含所有 extras 与开发依赖)
uv sync --all-extras --group dev

# 运行测试与覆盖率
uv run pytest
uv run coverage run -m pytest && uv run coverage report

# 代码检查
uv run ruff check .
uv run pyright

最小工作示例

from dataclasses import dataclass
from pydantic_ai_backends import LocalBackend, create_console_toolset

@dataclass
class MyDeps:
    backend: LocalBackend

# 创建工具集(默认 str_replace 编辑格式)
toolset = create_console_toolset()
deps = MyDeps(backend=LocalBackend("/workspace"))

# 使用 hashline 格式以获得更好的编辑准确率
toolset = create_console_toolset(edit_format="hashline")

create_console_toolset 提供了 lsread_filewrite_fileedit_filehashline_editglobgrepexecute 等代理可调用的工具 资料来源:src/pydantic_ai_backends/toolsets/console.py。当启用 document_support=True 时,read_file 会将 PDF 返回为 pydantic_ai.BinaryContent,以供具备文档理解能力的模型使用 资料来源:src/pydantic_ai_backends/toolsets/console.py

四、关键概念与模式

1. 协议驱动的可替换性

任何实现了 BackendProtocol(包括 existsls_inforead_bytes 等方法)的类都可以作为代理的文件后端 资料来源:src/pydantic_ai_backends/protocol.py。这使得测试时使用 StateBackend(内存)、开发时使用 LocalBackend、生产时使用 DockerSandbox 时,业务代码无需修改。

2. 异步适配器

0.2.14 版本引入的 ensure_async() 适配器允许对任意同步后端进行 await 调用,统一异步 I/O 编程模型 资料来源:src/pydantic_ai_backends/__init__.py。社区问题 #54 推动了公共 read_bytes 接口的规范化,使包装后端(如 BranchOverlay)与适配器无缝协作。

3. 复合路由

CompositeBackend 根据路径前缀将操作分发到不同的子后端,例如 /workspace/* 路由到本地文件系统、/sandbox/* 路由到 Docker 容器。0.2.6 版本修复了尾部斜杠的匹配问题(如 /foo 等同于 /foo/) 资料来源:CLAUDE.md

4. 沙箱与运行时

内置的 BUILTIN_RUNTIMES 字典提供了多种预配置的运行时镜像(如 python-datasciencenode-react),通过 get_runtime(name) 获取 RuntimeConfig 资料来源:src/pydantic_ai_backends/backends/docker/runtimes.pyKubernetesPodSandbox(0.2.12 加入)允许在 K8s Pod 中运行代理的 shell 工具 资料来源:src/pydantic_ai_backends/__init__.py

5. Hashline 编辑

Hashline 格式将每行内容附加 2 字符 MD5 哈希前缀(如 1:a3|function hello() {),让模型通过 行号:哈希 引用目标行而非复制精确文本。这显著降低了空白匹配错误并减少输出 token 资料来源:src/pydantic_ai_backends/hashline.py

五、已知问题与最佳实践

  • Windows 行尾符号问题:0.2.13 版本修复了 LocalBackend.write() 在 Windows 下将 \r\n 翻倍的问题(#51)。建议升级到 ≥ 0.2.13 资料来源:src/pydantic_ai_backends/__init__.py
  • 依赖管理:项目使用 Renovate 自动化更新依赖,配置见 renovate.json 资料来源:renovate.json
  • 异步可取消执行LocalBackend.async_execute()(0.2.7)使用 asyncio.create_subprocess_exec,调用任务被取消时能立即终止子进程 资料来源:src/pydantic_ai_backends/__init__.py
  • 示例项目examples/predictive_analytics/ 展示了"环境即工具"的完整模式——主代理按需委派子代理在 Docker 沙箱中执行 sklearn 预测 资料来源:examples/predictive_analytics/README.md

See Also

  • Backend Protocol Reference — 完整接口契约
  • Sandbox Backends — Docker / Kubernetes / Daytona 沙箱详解
  • Permissions System — 规则集与权限检查
  • Hashline Editing — Hashline 格式与算法细节
  • Console Toolset — 代理可调用的工具集合
  • GitHub Repository
  • Documentation Site

来源:https://github.com/vstorm-co/pydantic-ai-backend / 项目说明书

Architecture, Protocols and Types

pydantic-ai-backend 是一套面向 AI Agent 的文件存储与沙箱执行后端,其核心设计理念是基于协议(Protocol)的可插拔后端。所有后端(内存、文件系统、组合路由、Docker 沙箱、Kubernetes Pod 沙箱、Daytona 沙箱等)均实现统一的 BackendProtocol 与 SandboxProtocol,从而可以在工具层无差别地...

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

pydantic-ai-backend 是一套面向 AI Agent 的文件存储与沙箱执行后端,其核心设计理念是基于协议(Protocol)的可插拔后端。所有后端(内存、文件系统、组合路由、Docker 沙箱、Kubernetes Pod 沙箱、Daytona 沙箱等)均实现统一的 BackendProtocolSandboxProtocol,从而可以在工具层无差别地替换使用。types.py 中定义的 dataclass 与 TypedDict 则是贯穿整库的“公共语言”,用于在协议调用之间传递结构化结果。资料来源:CLAUDE.md:1-9

flowchart LR
    A[Agent / Toolset] -->|BackendProtocol| B[StateBackend]
    A -->|BackendProtocol| C[LocalBackend]
    A -->|BackendProtocol| D[CompositeBackend]
    A -->|BackendProtocol| E[AsyncBackendProtocol]
    E -->|ensure_async| B
    E -->|ensure_async| C
    A -->|SandboxProtocol| F[BaseSandbox]
    F --> G[DockerSandbox]
    F --> H[KubernetesPodSandbox]
    F --> I[DaytonaSandbox]

协议层(Protocols)

BackendProtocol 是文件后端的契约入口,使用 @runtime_checkable 装饰,因此支持 isinstance 检查(资料来源:src/pydantic_ai_backends/protocol.py:1-50)。其核心方法涵盖 existsls_inforead_bytesreadwriteeditglobgrep_rawgrep 等读取与查找操作;其中 exists 在 0.2.8 版本中作为一等公民加入,避免了消费者去嗅探 StateBackend._files 等私有状态(社区上下文:0.2.8 发布说明)。所有方法均围绕“绝对 POSIX 风格路径”展开,返回值由 types.py 中的 FileInfo 提供目录项描述。

SandboxProtocol 描述的是带隔离执行能力的扩展后端,通过 executeasync_execute 等方法让 Agent 在沙箱内运行 shell 命令;其返回类型 ExecuteResponse 包含 outputexit_codetruncated 三元组(资料来源:src/pydantic_ai_backends/types.py:1-80)。async_execute 在 0.2.7 中加入,使用 asyncio.create_subprocess_exec,确保 Agent 在取消任务时能立即终止子进程(社区上下文:0.2.7 发布说明)。

AsyncBackendProtocol 是与同步 BackendProtocol 平行的异步契约,于 0.2.14 引入(社区上下文:0.2.14 发布说明)。adapter.py 中的 ensure_async 函数负责把任意同步后端透明包装为异步实现,使调用方可以统一 await 后端 I/O——无论底层是同步还是异步。但社区反馈显示该适配器原先会通过私有方法 _read_bytes 调用,这导致像 BranchOverlay 这种只暴露 read_bytes 公共方法的包装后端在适配后会失败;该问题在 Issue #54 中被提出(社区上下文:Top Community Issues #54)。

类型系统(Types)

types.py 定义了协议间通信所用的全部核心数据结构:

类型类别用途
FileDataTypedDictStateBackend 内部存储单元:content: list[str] 数组 + ISO8601 时间戳
FileInfoTypedDictls_info 返回项:name / path / is_dir / size
WriteResultdataclasswrite() 结果:patherror 互斥返回
EditResultdataclassedit() 结果:额外含 occurrences 用于统计替换次数
ExecuteResponsedataclass沙箱命令执行结果:output / exit_code / truncated
BackgroundHandledataclass后台长时进程句柄:shell_id / pid / command
BackgroundOutputdataclass增量输出:stdout / stderr 为自上次读取以来的增量日志

资料来源:src/pydantic_ai_backends/types.py:1-120WriteResultEditResult 都采用“成功路径 or 错误字符串”的判别式结构,使消费者无需捕获异常即可区分成败,这是协议层强调显式错误传播的体现。

适配器与扩展点

adapter.ensure_async 是协议层之上的关键扩展点(资料来源:src/pydantic_ai_backends/adapter.py)。其工作流程是:检测目标对象是否已实现 AsyncBackendProtocol;若未实现,则以同步 BackendProtocol 为底层代理,生成一个异步包装器;调用 await 方法时内部回退到同步实现。这允许 0.2.15 中新增的 AsyncCompositeBackend同一组合树中混合同步与异步子后端(社区上下文:0.2.15 发布说明)。

backends/base.py 提供了沙箱层的抽象基类 BaseSandbox 与扩展名常量 CODE_EXT(18 种编程语言)、TEXT_EXT(10 种文本格式),供所有具体沙箱实现共享(资料来源:src/pydantic_ai_backends/backends/base.py:1-40)。具体实现如 DockerSandboxKubernetesPodSandboxDaytonaSandbox 均继承自 BaseSandbox,并在构造时通过 RuntimeConfig 描述基础镜像、预装包与工作目录(资料来源:src/pydantic_ai_backends/backends/docker/runtimes.py)。

backends/__init__.py 与顶层 __init__.py 共同提供惰性加载(lazy loading)的公共 API:仅当消费者首次访问 DockerSandboxKubernetesPodSandbox 等可选导出时,才会触发对应可选依赖(dockerkubernetes 扩展包)的导入,从而让纯内存后端用户免于安装重型依赖。

常见失败模式

  • Windows 文本模式双重换行LocalBackend.write() 早期依赖 Path.write_text(),在 Windows 文本模式下把 LLM 已含 \r\n 的内容二次转义为 \r\r\n。该 Bug 已在 0.2.13 中修复,改用二进制写入(社区上下文:Bug Report #51、0.2.13 发布说明)。
  • 路径尾斜杠不匹配CompositeBackend 早期会把 /foo/foo/ 视为不同路由,导致 Agent 查询无尾斜杠路径时静默落到默认后端。0.2.6 中改为对齐 shell 语义(社区上下文:0.2.6 发布说明)。
  • 私有方法代理失败:当 ensure_async 包装一个仅暴露公共 read_bytes 而未实现 _read_bytes 的后端时,调用会抛 AttributeError,Issue #54 正在跟踪该兼容性缺口。

See Also

  • Backends 模块概览
  • Console Toolset 使用指南
  • Permissions & Ruleset
  • Sandbox & Runtimes

资料来源:src/pydantic_ai_backends/types.py:1-120WriteResultEditResult 都采用“成功路径 or 错误字符串”的判别式结构,使消费者无需捕获异常即可区分成败,这是协议层强调显式错误传播的体现。

Backend Implementations (State, Local, Composite, Docker, Kubernetes, Daytona)

pydantic-ai-backend 旨在为基于 Pydantic AI 的智能体提供统一的文件存储与沙箱执行能力。整个后端体系围绕"协议驱动 + 可组合"的模式展开:所有后端实现均遵循 BackendProtocol,并通过 CompositeBackend 在路径前缀维度进行路由。mkdocs.yml 将项目定位为 File Storage & Sandbox Bac...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 StateBackend — 内存存储

继续阅读本节完整说明和来源证据。

章节 LocalBackend — 真实文件系统

继续阅读本节完整说明和来源证据。

章节 CompositeBackend 与 AsyncCompositeBackend

继续阅读本节完整说明和来源证据。

后端实现(State、Local、Composite、Docker、Kubernetes、Daytona)

概述与设计原则

pydantic-ai-backend 旨在为基于 Pydantic AI 的智能体提供统一的文件存储与沙箱执行能力。整个后端体系围绕"协议驱动 + 可组合"的模式展开:所有后端实现均遵循 BackendProtocol,并通过 CompositeBackend 在路径前缀维度进行路由。mkdocs.yml 将项目定位为 *File Storage & Sandbox Backends for Pydantic AI*,强调面向 AI 智能体的控制台工具集、容器沙箱与权限系统。

关键设计原则可归纳为:

  1. 协议化抽象:通过 BackendProtocolSandboxProtocol 屏蔽底层存储介质(内存、本地磁盘、容器、远端沙箱)。
  2. 可选依赖懒加载:Docker、Daytona、Kubernetes 等运行时通过 __init__.py 中的 _LAZY_IMPORTS 按需导入,未安装相应 Extras 时不会失败。
  3. 可组合性CompositeBackend 支持把多个后端按路径前缀合并,使单个智能体可同时访问只读仓库、临时写入区与远端容器。
  4. 类型安全:核心数据模型(FileDataFileInfoWriteResultEditResultExecuteResponse 等)均在 types.py 中集中定义,供所有后端复用。

内置文件后端

StateBackend — 内存存储

StateBackend 提供纯内存的文件存储实现,适合测试与临时场景。文件以 dict[str, FileData] 形式保存,FileData 包含 contentcreated_atmodified_at 三个字段 (types.py)。其 exists() 方法自 0.2.8 起成为协议首类成员,约定"仅对解析为既有文件的路径返回 True"(0.2.8)。StateBackend 还提供 _files_not_hidden 属性,自动过滤以 . 开头的隐藏路径,便于构建类似 shell 的 ls 语义。

LocalBackend — 真实文件系统

LocalBackend 把文件操作映射到本地磁盘上的根目录,继承 BackendProtocol 的全部方法。它对 write() 做了 Windows 兼容性修复:在 0.2.13 版本之前,Path.write_text() 在 Windows 文本模式下会把 \n 翻译为 \r\n,导致来自 LLM 的 \r\n 内容被双重转换(Issue #510.2.13)。修复后写入采用二进制模式,仅在显式要求时执行平台换行转换。

0.2.7 起,LocalBackend.async_execute() 使用 asyncio.create_subprocess_exec 提供可取消的异步 shell 执行能力(0.2.7),对长任务协作式取消尤为关键。

CompositeBackend 与 AsyncCompositeBackend

CompositeBackend 是路径前缀路由器,将请求分发到已注册的子后端。其默认行为是首个命中的路由生效,未命中则回落到默认后端。0.2.6 修复了尾部斜杠匹配:以前 /foo 无法匹配注册为 /foo/ 的路由,现在已与 shell 语义一致(0.2.6)。

0.2.14 引入 async 适配器层(adapter.pyprotocol.py),允许以 await 形式调用任意后端(0.2.14)。紧接着 0.2.15 推出 AsyncCompositeBackend,在异步路径前缀维度统一调度混合的同步/异步子后端(0.2.15)。

graph LR
    A[Agent 工具调用] --> B{CompositeBackend<br/>路径前缀匹配}
    B -->|/src/*| C[StateBackend<br/>内存工作区]
    B -->|/repo/*| D[LocalBackend<br/>只读仓库]
    B -->|/sandbox/*| E[DockerSandbox<br/>隔离执行]
    C --> F[结果聚合返回]
    D --> F
    E --> F

沙箱实现

BaseSandbox 与 DockerSandbox

backends/docker/sandbox.py 中的 BaseSandbox 是沙箱基类,统一了命令执行、文件传输、PDF/图像处理等行为。DockerSandbox 在该基类上实现:动态构建镜像、拷贝脚本、执行命令并解析输出。模块内通过严格的正则(_PACKAGE_NAME_RE_ENV_KEY_RE)校验包名与环境变量名,防止恶意值注入到 Dockerfile 的 RUN 指令中。

SessionManagersession.py)则负责多用户场景下的沙箱生命周期:依据 SandboxFactory 回调按 session_id 创建或复用沙箱,并支持空闲回收。

内置运行时(Runtimes)

runtimes.py 通过 RuntimeConfig 描述基础镜像、预装包集合与工作目录,并维护 BUILTIN_RUNTIMES 字典。常见预设包括:

名称说明关键包
python-datascience数据科学栈numpy、pandas、scikit-learn、seaborn
python-webWeb 后端栈fastapi、uvicorn、sqlalchemy、httpx
node-minimal精简 Node.js
node-reactReact/TS 开发typescript、vite、react

通过 get_runtime(name) 可获得对应配置;未找到时抛出 KeyError 并附带可用列表。

KubernetesPodSandbox 与 DaytonaSandbox

0.2.12 引入的 KubernetesPodSandboxkubernetes.py)提供了与 DockerSandbox 一致的同步方法签名,但底层调度对象换成了 K8s Pod,便于在已有集群中复用现有网络与配额策略(0.2.12)。DaytonaSandbox 则作为可选 Extras 暴露在 __init__.py_LAZY_IMPORTS 中,仅在安装 daytona 依赖后才会被加载。

公共协议、类型与组合模式

所有后端实现共享 protocol.py 中以 @runtime_checkable 修饰的协议定义,方法覆盖 existsls_inforead_bytesreadwriteeditgrep_rawglob_info 等典型文件系统操作。返回值类型集中定义在 types.pyWriteResultEditResult 携带 error 字段以便上层统一处理失败;ExecuteResponse 同时暴露 outputexit_codetruncated 标志;BackgroundHandle/BackgroundOutput/BackgroundProcessInfo 则支撑长生命周期进程的分块读取。

toolsets/console.py 中的 create_console_toolset() 会将上述后端包装为 Pydantic AI 函数工具集:默认返回带行号的文本,但可通过 image_support/document_support 参数让 read_file 直接产出 BinaryContent,供具备视觉/文档理解能力的模型消费(0.2.11)。在 0.2.10 中,项目把 108 处双反引号代码块转换为单反引号 Markdown,并提升 12 处函数级 import 到模块顶部,以匹配 mkdocstrings 的 Markdown 渲染器。

常见问题与社区反馈

  • Windows 双重回车LocalBackend.write() 在 0.2.13 之前的 Windows 路径下会因文本模式转换产生 \r\r\n,已在 Issue #51 修复。
  • CompositeBackend 路由匹配:0.2.6 之前 /foo 无法命中 /foo/,导致 LLM 查询静默落到默认后端;现版本已对齐 shell 语义。
  • Async 适配器 read_bytesIssue #54 报告包装器(如 BranchOverlay)只暴露 read_bytes 公共方法而没有 _read_bytes,导致 ensure_async() 失败。0.2.14 起协议侧统一支持 async 适配,0.2.15 的 AsyncCompositeBackend 进一步覆盖混合后端场景。

See Also

  • Console Toolset
  • Sandbox Protocols & Permissions
  • Hashline 编辑格式
  • 项目主页

来源:https://github.com/vstorm-co/pydantic-ai-backend / 项目说明书

Console Toolset, Permissions, Capability and Session Manager

pydantic-ai-backend 在 pydantic-ai 与多种文件系统 / 沙箱后端之间扮演「控制平面」的角色。四个组件层层叠加:ConsoleToolset 暴露给大模型的工具集合;Permissions 提供基于规则的操作授权;ConsoleCapability 把工具集与权限封装为 pydantic-ai 的能力(capability);SessionMa...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 工具列表与说明

继续阅读本节完整说明和来源证据。

章节 关键配置参数

继续阅读本节完整说明和来源证据。

章节 Hashline 编辑格式

继续阅读本节完整说明和来源证据。

Console Toolset、Permissions、Capability 与 Session Manager

概述

pydantic-ai-backend 在 pydantic-ai 与多种文件系统 / 沙箱后端之间扮演「控制平面」的角色。四个组件层层叠加:ConsoleToolset 暴露给大模型的工具集合;Permissions 提供基于规则的操作授权;ConsoleCapability 把工具集与权限封装为 pydantic-ai 的能力(capability);SessionManager 则在多会话场景下负责会话生命周期。资料来源:src/pydantic_ai_backends/__init__.py:1-90

仓库的文档结构由 mkdocs.yml 编排,"Concepts → Console Toolset"、"Examples"、"API Reference → Capability / Backends / Permissions" 等条目均指向本页涵盖的模块(资料来源:mkdocs.yml:1-150)。

Console Toolset(控制台工具集)

工具列表与说明

create_console_toolset() 是工厂函数,构造一个 FunctionToolset[ConsoleDeps],为代理提供一组语义清晰的工具。下表列出默认暴露的工具(资料来源:src/pydantic_ai_backends/toolsets/console.py:1-90src/pydantic_ai_backends/toolsets/__init__.py:1-30):

工具名称用途对应权限操作
ls列出目录内容ls
read_file读取文件(图像返回 BinaryContentread
write_file创建/覆盖文件write
edit_file基于字符串替换的局部编辑edit
hashline_edit基于内容哈希的精确编辑edit
glob按模式匹配文件路径glob
grep在文件中搜索文本grep
execute执行 shell 命令(可选)execute

关键配置参数

工厂函数提供丰富的开关(资料来源:src/pydantic_ai_backends/toolsets/console.py:90-180):

  • include_execute:是否暴露 execute 工具(需后端支持 execute())。
  • include_background:是否启用后台执行支持。
  • require_write_approval / require_execute_approval:在未提供 permissions 时,是否要求用户确认。
  • permissions:传入 PermissionRuleset,会覆盖上述两个布尔开关。
  • image_support / max_image_bytes:开启后 read_file 会将 png/jpg/jpeg/gif/webp 转为 BinaryContent 供多模态模型消费(README 中亦示例)。
  • document_support / max_document_bytes:0.2.11 起新增 PDF 文档支持(社区上下文:0.2.11)。
  • edit_format:可选 "str_replace"(默认)或 "hashline"

Hashline 编辑格式

edit_format="hashline" 时,每行内容前会拼接 编号:两位哈希| 前缀,例如 2:f1| return "world";。模型通过「行号 + 哈希」定位修改位置,避免空白匹配错误并节省输出 token(资料来源:src/pydantic_ai_backends/hashline.py:1-60)。apply_hashline_edit()apply_hashline_edit_with_summary()hashline_edit 工具内部被调用以原子化地应用修改(资料来源:src/pydantic_ai_backends/toolsets/console.py:180-260)。

Permission System(权限系统)

类型与规则

权限系统通过 PermissionRuleOperationPermissionsPermissionRuleset 描述基于 fnmatch 模式(支持 ** 递归)的匹配规则。PermissionAction 取值为 "allow" | "deny" | "ask"PermissionOperation 涵盖 read / write / edit / execute / glob / grep / ls。规则按顺序求值,首条命中即生效(资料来源:src/pydantic_ai_backends/permissions/types.py:1-90)。

内置预设

src/pydantic_ai_backends/permissions/presets.py 暴露了四个开箱即用的规则集(资料来源:src/pydantic_ai_backends/permissions/__init__.py:30-50):

预设名称语义
DEFAULT_RULESET允许读取(除机密外)、写/执行需 ask
PERMISSIVE_RULESET允许大多数操作,仅拦截危险命令
READONLY_RULESET仅允许读取类操作
STRICT_RULESET所有操作均需批准

SECRETS_PATTERNSSYSTEM_PATTERNS 提供常用敏感路径模式;create_ruleset() 允许组合自定义规则。

ConsoleCapability

ConsoleCapabilitysrc/pydantic_ai_backends/capability.py)把工具集、说明文本与权限检查器捆绑为 pydantic-ai 的 AbstractCapability。它在三个钩子中工作(资料来源:src/pydantic_ai_backends/capability.py:50-110):

  1. get_toolset() 返回内部 ConsoleToolset
  2. get_instructions() 返回由 get_console_system_prompt(edit_format=...) 生成的系统提示。
  3. prepare_tools()before_tool_execute() 分别在「工具列表暴露前」与「每次调用前」调用 PermissionChecker.check_sync(),按 _TOOL_OPERATION_MAP 与路径字段(path / file_path)判定是放行、隐藏还是要求 askget_serialization_name() 返回 "ConsoleCapability",用于 AgentSpec YAML/JSON 持久化。
from pydantic_ai import Agent
from pydantic_ai_backends import ConsoleCapability
from pydantic_ai_backends.permissions import READONLY_RULESET

agent = Agent(
    "openai:gpt-4.1",
    capabilities=[ConsoleCapability(permissions=READONLY_RULESET)],
)

Session Manager

SessionManager 出现在顶层导出表(资料来源:src/pydantic_ai_backends/__init__.py:40-60),与 SandboxFactoryBaseSandbox 一同用于多会话 / 多租户场景下的沙箱生命周期管理。README.md 在示例章节中展示了 SessionManager 与 Docker 沙箱协作的基础用法(资料来源:README.md:60-100)。它的典型角色是:按用户或线程隔离 Backend 实例、复用或销毁沙箱、与 Capability 中的权限边界共同形成「会话级安全沙箱」。

See Also

来源:https://github.com/vstorm-co/pydantic-ai-backend / 项目说明书

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

medium 失败模式:installation: 0.2.10

Upgrade or migration may change expected behavior: 0.2.10

medium 失败模式:installation: 0.2.12

Upgrade or migration may change expected behavior: 0.2.12

medium 失败模式:installation: 0.2.9

Upgrade or migration may change expected behavior: 0.2.9

medium 失败模式:installation: Bug Report: `LocalBackend.write()` doubles carriage returns on Windows

Developers may fail before the first successful local run: Bug Report: `LocalBackend.write()` doubles carriage returns on Windows

Pitfall Log / 踩坑日志

项目:vstorm-co/pydantic-ai-backend

摘要:发现 20 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:安装坑 - 失败模式:installation: 0.2.10。

1. 安装坑 · 失败模式:installation: 0.2.10

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this installation risk before relying on the project: 0.2.10
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.10
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.10 | 0.2.10

2. 安装坑 · 失败模式:installation: 0.2.12

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this installation risk before relying on the project: 0.2.12
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.12
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.12 | 0.2.12

3. 安装坑 · 失败模式:installation: 0.2.9

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this installation risk before relying on the project: 0.2.9
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.9
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.9 | 0.2.9

4. 安装坑 · 失败模式:installation: Bug Report: `LocalBackend.write()` doubles carriage returns on Windows

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this installation risk before relying on the project: Bug Report: LocalBackend.write() doubles carriage returns on Windows
  • 对用户的影响:Developers may fail before the first successful local run: Bug Report: LocalBackend.write() doubles carriage returns on Windows
  • 证据:failure_mode_cluster:github_issue | https://github.com/vstorm-co/pydantic-ai-backend/issues/51 | Bug Report: LocalBackend.write() doubles carriage returns on Windows

5. 安装坑 · 失败模式:installation: Dependency Dashboard

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this installation risk before relying on the project: Dependency Dashboard
  • 对用户的影响:Developers may fail before the first successful local run: Dependency Dashboard
  • 证据:failure_mode_cluster:github_issue | https://github.com/vstorm-co/pydantic-ai-backend/issues/41 | Dependency Dashboard

6. 安装坑 · 来源证据:Bug Report: `LocalBackend.write()` doubles carriage returns on Windows

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Bug Report: LocalBackend.write() doubles carriage returns on Windows
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 证据:community_evidence:github | https://github.com/vstorm-co/pydantic-ai-backend/issues/51 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

7. 安装坑 · 来源证据:Dependency Dashboard

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Dependency Dashboard
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 证据:community_evidence:github | https://github.com/vstorm-co/pydantic-ai-backend/issues/41 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

8. 配置坑 · 失败模式:configuration: 0.2.8

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this configuration risk before relying on the project: 0.2.8
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.8
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.8 | 0.2.8

9. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 证据:capability.assumptions | https://github.com/vstorm-co/pydantic-ai-backend | README/documentation is current enough for a first validation pass.

10. 运行坑 · 失败模式:runtime: 0.2.14

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this runtime risk before relying on the project: 0.2.14
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.14
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.14 | 0.2.14

11. 运行坑 · 失败模式:runtime: 0.2.15

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this runtime risk before relying on the project: 0.2.15
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.15
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.15 | 0.2.15

12. 运行坑 · 失败模式:runtime: 0.2.7

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this runtime risk before relying on the project: 0.2.7
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.7
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.7 | 0.2.7

13. 维护坑 · 失败模式:migration: 0.2.6

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:Developers should check this migration risk before relying on the project: 0.2.6
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.6
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.6 | 0.2.6

14. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 证据:evidence.maintainer_signals | https://github.com/vstorm-co/pydantic-ai-backend | last_activity_observed missing
  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 证据:downstream_validation.risk_items | https://github.com/vstorm-co/pydantic-ai-backend | no_demo; severity=medium

16. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 证据:risks.scoring_risks | https://github.com/vstorm-co/pydantic-ai-backend | no_demo; severity=medium

17. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 证据:evidence.maintainer_signals | https://github.com/vstorm-co/pydantic-ai-backend | issue_or_pr_quality=unknown

18. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 证据:evidence.maintainer_signals | https://github.com/vstorm-co/pydantic-ai-backend | release_recency=unknown

19. 维护坑 · 失败模式:maintenance: 0.2.11

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: 0.2.11
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.11
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.11 | 0.2.11

20. 维护坑 · 失败模式:maintenance: 0.2.13

  • 严重度:low
  • 证据强度:source_linked
  • 发现:Developers should check this maintenance risk before relying on the project: 0.2.13
  • 对用户的影响:Upgrade or migration may change expected behavior: 0.2.13
  • 证据:failure_mode_cluster:github_release | https://github.com/vstorm-co/pydantic-ai-backend/releases/tag/0.2.13 | 0.2.13

来源:Doramagic 发现、验证与编译记录