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]()。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述与入门指南
一、项目定位与设计目标
pydantic-ai-backend 是为 pydantic-ai 与 pydantic-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 --> HashlineBackendProtocol 是所有后端实现的统一接口,例如 exists() 方法于 0.2.8 版本作为一等公民加入,用于无歧义地判断文件是否存在 资料来源:src/pydantic_ai_backends/protocol.py。类型定义(如 WriteResult、EditResult、ExecuteResponse)统一在 types.py 中声明 资料来源:src/pydantic_ai_backends/types.py。
三、安装与基础使用
安装
项目使用 uv 进行依赖管理。可选的 extras 包括 docker、daytona 和 kubernetes,用于启用相应的沙箱后端 资料来源: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 提供了 ls、read_file、write_file、edit_file、hashline_edit、glob、grep 和 execute 等代理可调用的工具 资料来源: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(包括 exists、ls_info、read_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-datascience、node-react),通过 get_runtime(name) 获取 RuntimeConfig 资料来源:src/pydantic_ai_backends/backends/docker/runtimes.py。KubernetesPodSandbox(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 沙箱等)均实现统一的 BackendProtocol 与 SandboxProtocol,从而可以在工具层无差别地替换使用。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)。其核心方法涵盖 exists、ls_info、read_bytes、read、write、edit、glob、grep_raw、grep 等读取与查找操作;其中 exists 在 0.2.8 版本中作为一等公民加入,避免了消费者去嗅探 StateBackend._files 等私有状态(社区上下文:0.2.8 发布说明)。所有方法均围绕“绝对 POSIX 风格路径”展开,返回值由 types.py 中的 FileInfo 提供目录项描述。
SandboxProtocol 描述的是带隔离执行能力的扩展后端,通过 execute、async_execute 等方法让 Agent 在沙箱内运行 shell 命令;其返回类型 ExecuteResponse 包含 output、exit_code、truncated 三元组(资料来源: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 定义了协议间通信所用的全部核心数据结构:
| 类型 | 类别 | 用途 |
|---|---|---|
FileData | TypedDict | StateBackend 内部存储单元:content: list[str] 数组 + ISO8601 时间戳 |
FileInfo | TypedDict | ls_info 返回项:name / path / is_dir / size |
WriteResult | dataclass | write() 结果:path 或 error 互斥返回 |
EditResult | dataclass | edit() 结果:额外含 occurrences 用于统计替换次数 |
ExecuteResponse | dataclass | 沙箱命令执行结果:output / exit_code / truncated |
BackgroundHandle | dataclass | 后台长时进程句柄:shell_id / pid / command |
BackgroundOutput | dataclass | 增量输出:stdout / stderr 为自上次读取以来的增量日志 |
资料来源:src/pydantic_ai_backends/types.py:1-120。WriteResult 与 EditResult 都采用“成功路径 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)。具体实现如 DockerSandbox、KubernetesPodSandbox、DaytonaSandbox 均继承自 BaseSandbox,并在构造时通过 RuntimeConfig 描述基础镜像、预装包与工作目录(资料来源:src/pydantic_ai_backends/backends/docker/runtimes.py)。
backends/__init__.py 与顶层 __init__.py 共同提供惰性加载(lazy loading)的公共 API:仅当消费者首次访问 DockerSandbox、KubernetesPodSandbox 等可选导出时,才会触发对应可选依赖(docker、kubernetes 扩展包)的导入,从而让纯内存后端用户免于安装重型依赖。
常见失败模式
- 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-120。WriteResult 与 EditResult 都采用“成功路径 or 错误字符串”的判别式结构,使消费者无需捕获异常即可区分成败,这是协议层强调显式错误传播的体现。
Backend Implementations (State, Local, Composite, Docker, Kubernetes, Daytona)
pydantic-ai-backend 旨在为基于 Pydantic AI 的智能体提供统一的文件存储与沙箱执行能力。整个后端体系围绕"协议驱动 + 可组合"的模式展开:所有后端实现均遵循 BackendProtocol,并通过 CompositeBackend 在路径前缀维度进行路由。mkdocs.yml 将项目定位为 File Storage & Sandbox Bac...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
后端实现(State、Local、Composite、Docker、Kubernetes、Daytona)
概述与设计原则
pydantic-ai-backend 旨在为基于 Pydantic AI 的智能体提供统一的文件存储与沙箱执行能力。整个后端体系围绕"协议驱动 + 可组合"的模式展开:所有后端实现均遵循 BackendProtocol,并通过 CompositeBackend 在路径前缀维度进行路由。mkdocs.yml 将项目定位为 *File Storage & Sandbox Backends for Pydantic AI*,强调面向 AI 智能体的控制台工具集、容器沙箱与权限系统。
关键设计原则可归纳为:
- 协议化抽象:通过
BackendProtocol与SandboxProtocol屏蔽底层存储介质(内存、本地磁盘、容器、远端沙箱)。 - 可选依赖懒加载:Docker、Daytona、Kubernetes 等运行时通过
__init__.py中的_LAZY_IMPORTS按需导入,未安装相应 Extras 时不会失败。 - 可组合性:
CompositeBackend支持把多个后端按路径前缀合并,使单个智能体可同时访问只读仓库、临时写入区与远端容器。 - 类型安全:核心数据模型(
FileData、FileInfo、WriteResult、EditResult、ExecuteResponse等)均在types.py中集中定义,供所有后端复用。
内置文件后端
StateBackend — 内存存储
StateBackend 提供纯内存的文件存储实现,适合测试与临时场景。文件以 dict[str, FileData] 形式保存,FileData 包含 content、created_at、modified_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 #51,0.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.py、protocol.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 指令中。
SessionManager(session.py)则负责多用户场景下的沙箱生命周期:依据 SandboxFactory 回调按 session_id 创建或复用沙箱,并支持空闲回收。
内置运行时(Runtimes)
runtimes.py 通过 RuntimeConfig 描述基础镜像、预装包集合与工作目录,并维护 BUILTIN_RUNTIMES 字典。常见预设包括:
| 名称 | 说明 | 关键包 |
|---|---|---|
python-datascience | 数据科学栈 | numpy、pandas、scikit-learn、seaborn |
python-web | Web 后端栈 | fastapi、uvicorn、sqlalchemy、httpx |
node-minimal | 精简 Node.js | — |
node-react | React/TS 开发 | typescript、vite、react |
通过 get_runtime(name) 可获得对应配置;未找到时抛出 KeyError 并附带可用列表。
KubernetesPodSandbox 与 DaytonaSandbox
0.2.12 引入的 KubernetesPodSandbox(kubernetes.py)提供了与 DockerSandbox 一致的同步方法签名,但底层调度对象换成了 K8s Pod,便于在已有集群中复用现有网络与配额策略(0.2.12)。DaytonaSandbox 则作为可选 Extras 暴露在 __init__.py 的 _LAZY_IMPORTS 中,仅在安装 daytona 依赖后才会被加载。
公共协议、类型与组合模式
所有后端实现共享 protocol.py 中以 @runtime_checkable 修饰的协议定义,方法覆盖 exists、ls_info、read_bytes、read、write、edit、grep_raw、glob_info 等典型文件系统操作。返回值类型集中定义在 types.py:WriteResult、EditResult 携带 error 字段以便上层统一处理失败;ExecuteResponse 同时暴露 output、exit_code 与 truncated 标志;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_bytes:Issue #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...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
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-90、src/pydantic_ai_backends/toolsets/__init__.py:1-30):
| 工具名称 | 用途 | 对应权限操作 |
|---|---|---|
ls | 列出目录内容 | ls |
read_file | 读取文件(图像返回 BinaryContent) | read |
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(权限系统)
类型与规则
权限系统通过 PermissionRule、OperationPermissions、PermissionRuleset 描述基于 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_PATTERNS 与 SYSTEM_PATTERNS 提供常用敏感路径模式;create_ruleset() 允许组合自定义规则。
ConsoleCapability
ConsoleCapability(src/pydantic_ai_backends/capability.py)把工具集、说明文本与权限检查器捆绑为 pydantic-ai 的 AbstractCapability。它在三个钩子中工作(资料来源:src/pydantic_ai_backends/capability.py:50-110):
get_toolset()返回内部ConsoleToolset。get_instructions()返回由get_console_system_prompt(edit_format=...)生成的系统提示。prepare_tools()与before_tool_execute()分别在「工具列表暴露前」与「每次调用前」调用PermissionChecker.check_sync(),按_TOOL_OPERATION_MAP与路径字段(path/file_path)判定是放行、隐藏还是要求ask。get_serialization_name()返回"ConsoleCapability",用于AgentSpecYAML/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),与 SandboxFactory、BaseSandbox 一同用于多会话 / 多租户场景下的沙箱生命周期管理。README.md 在示例章节中展示了 SessionManager 与 Docker 沙箱协作的基础用法(资料来源:README.md:60-100)。它的典型角色是:按用户或线程隔离 Backend 实例、复用或销毁沙箱、与 Capability 中的权限边界共同形成「会话级安全沙箱」。
See Also
来源:https://github.com/vstorm-co/pydantic-ai-backend / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
Upgrade or migration may change expected behavior: 0.2.10
Upgrade or migration may change expected behavior: 0.2.12
Upgrade or migration may change expected behavior: 0.2.9
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 发现、验证与编译记录