🧰 扩展教程

Pi 自定义工具与权限控制教程

用窄接口和明确权限,让 Pi Agent 逐步获得可控的实际操作能力。

一、从窄工具开始

自定义工具应只完成一个清晰动作,例如读取指定目录下的文件摘要。不要直接暴露任意 shell、任意路径或任意网络请求。

TOOL_NAME = "read_project_file"
MAX_BYTES = 100_000
ALLOWED_ROOT = "/path/to/project"

上面的路径只是占位符。实际项目应使用配置目录,并在运行前确认目录权限。

二、参数必须再次校验

from pathlib import Path

def safe_path(root: str, requested: str) -> Path:
    base = Path(root).resolve()
    target = (base / requested).resolve()
    if target != base and base not in target.parents:
        raise ValueError("path outside project")
    return target

模型输出的参数不能视为可信输入。服务端或工具实现必须再次校验路径、类型、大小和允许的操作。

三、设置资源边界

四、逐步启用和调试

  1. 先只启用只读工具。
  2. 用合法、缺失和越权参数分别测试。
  3. 确认日志不包含 API Key、Cookie 或完整个人数据。
  4. 再增加受限写入,并保留 Git 差异和回滚方案。

五、验收清单

工具名、参数 schema、权限、超时、错误结构和日志字段都应有明确约定。未知工具、非法路径、超时和重复调用必须得到可预测结果。

Pi 的扩展接口、配置文件和命令可能随版本变化。请以当前 Pi 仓库 README、安装版本和本机帮助输出为准;本文示例不是官方 API 保证。
微信群二维码

扫码加入
Pi Agent 微信交流群

💬