Pi编程助手配置系统详解

badlogic 发布于 2026-07-24 阅读 18

本文档详细介绍了Pi编程助手的配置系统,包括全局设置与项目设置的作用域、项目信任机制,以及所有可配置参数(模型与思考、UI与显示、网络、压缩、重试、终端与图像、Shell、会话等)。每个设置都有类型、默认值和说明,并提供了JSON示例。

项目信任

在交互式启动时,如果项目文件夹包含本地设置、资源或项目 .agents/skills,且该文件夹或其父文件夹在 ~/.pi/agent/trust.json 中没有已保存的信任决策,pi 会在信任之前先询问。信任项目后,pi 可以加载 .pi/settings.json.pi 资源、安装缺失的项目包以及执行项目扩展。

非交互模式(-p--mode json--mode rpc)不会显示信任提示。如果没有适用的已保存信任决策,它们将使用全局设置中的 defaultProjectTrust:当设置为 ask(默认)或 never 时,会忽略这些项目资源;当设置为 always 时,则信任它们。传递 --approve/-a--no-approve/-na 以在单次运行中覆盖项目信任。

如果没有适用的扩展或已保存决策,defaultProjectTrust 控制回退行为。在 ~/.pi/agent/settings.json 中将其设置为 "ask""always""never",或通过 /settings 更改。

pi config 和包命令使用相同的项目信任流程,但 pi update 从不提示。传递 --approve 以信任项目本地设置用于单条命令,或传递 --no-approve 以忽略它们。

在交互模式下使用 /trust 为将来的会话保存项目信任决策,包括对直接父文件夹的信任。它只写入 ~/.pi/agent/trust.json;当前会话不会重新加载,请重启 pi 使更改生效。

所有设置

模型与思考

设置项 类型 默认值 描述
defaultProvider 字符串 - 默认提供商(例如 "anthropic""openai"
defaultModel 字符串 - 默认模型 ID
defaultThinkingLevel 字符串 - "off""minimal""low""medium""high""xhigh""max"
hideThinkingBlock 布尔值 false 隐藏输出中的思考块
showCacheMissNotices 布尔值 false 当出现显著的提示缓存未命中时,显示转录通知
thinkingBudgets 对象 - 每个思考级别的自定义 Token 预算

thinkingBudgets

{
  "thinkingBudgets": {
    "minimal": 1024,
    "low": 4096,
    "medium": 10240,
    "high": 32768
  }
}

UI 与显示

设置项 类型 默认值 描述
theme 字符串 "dark" 主题名称("dark""light" 或自定义)
externalEditor 字符串 $VISUAL,然后是 $EDITOR,在 Windows 上是 Notepad,其他系统上是 nano Ctrl+G 外部编辑器命令;优先级高于环境变量
quietStartup 布尔值 false 隐藏启动头部信息
defaultProjectTrust 字符串 "ask" 回退项目信任行为:"ask""always""never"。仅全局设置
collapseChangelog 布尔值 false 更新后显示简化的变更日志
enableInstallTelemetry 布尔值 true 首次安装或变更日志检测到更新后,发送匿名安装/更新版本 ping。这不控制更新检查
enableAnalytics 布尔值 false 选择加入的分析数据共享。目前仅在实验性首次设置(PI_EXPERIMENTAL=1)期间询问
trackingId 字符串 - 分析跟踪标识符,在启用 enableAnalytics 时生成
doubleEscapeAction 字符串 "tree" 双击 Escape 键的操作:"tree""fork""none"
treeFilterMode 字符串 "default" /tree 的默认过滤器:"default""no-tools""user-only""labeled-only""all"
editorPaddingX 数字 0 输入编辑器的水平内边距(0-3)
outputPad 数字 1 用户消息、助手消息和思考的水平内边距(0 或 1)
autocompleteMaxVisible 数字 5 自动完成下拉列表中最多可见项数(3-20)
showHardwareCursor 布尔值 false 当 TUI 为支持 IME 而定位光标时,显示终端光标

对于 VS Code,请包含 --wait 以便编辑器退出后 pi 恢复:

{
  "externalEditor": "code --wait"
}

遥测与更新检查

enableInstallTelemetry 仅控制向 https://pi.dev/api/report-install 发送的匿名安装/更新 ping。选择退出遥测不会禁用更新检查;Pi 仍然可以获取 https://pi.dev/api/latest-version 以查找最新版本。

设置 PI_SKIP_VERSION_CHECK=1 以禁用 Pi 版本更新检查。使用 --offlinePI_OFFLINE=1 以禁用此处描述的所有启动网络操作,包括更新检查、包更新检查和安装/更新遥测。

网络

设置项 类型 默认值 描述
httpProxy 字符串 - HTTP 代理 URL,会应用到 HTTP_PROXYHTTPS_PROXY 环境变量。仅全局设置。
{
  "httpProxy": "http://127.0.0.1:7890"
}

警告

设置项 类型 默认值 描述
warnings.anthropicExtraUsage 布尔值 true 当 Anthropic 订阅认证可能产生额外付费用量时显示警告
{
  "warnings": {
    "anthropicExtraUsage": false
  }
}

压缩

设置项 类型 默认值 描述
compaction.enabled 布尔值 true 启用自动压缩
compaction.reserveTokens 数字 16384 为 LLM 响应预留的 Token
compaction.keepRecentTokens 数字 20000 保留的最近 Token(不进行摘要总结)
{
  "compaction": {
    "enabled": true,
    "reserveTokens": 16384,
    "keepRecentTokens": 20000
  }
}

分支摘要

设置项 类型 默认值 描述
branchSummary.reserveTokens 数字 16384 为分支摘要预留的 Token
branchSummary.skipPrompt 布尔值 false /tree 导航时跳过“是否总结分支?”的提示(默认不做摘要)

重试

设置项 类型 默认值 描述
retry.enabled 布尔值 true 在临时错误时启用自动代理级重试
retry.maxRetries 数字 3 最大代理级重试次数
retry.baseDelayMs 数字 2000 代理级指数退避的基础延迟(2 秒、4 秒、8 秒)
retry.provider.timeoutMs 数字 SDK 默认值 提供商/SDK 请求超时时间(毫秒)
retry.provider.maxRetries 数字 0 提供商/SDK 重试次数
retry.provider.maxRetryDelayMs 数字 60000 服务器请求的最大延迟时间,超出则失败(60 秒)

当提供商请求的重试延迟长于 retry.provider.maxRetryDelayMs 时,请求会立即失败并显示信息性错误,而不是静默等待。将其设置为 0 以禁用限制。

除非明确需要提供商级别的重试,否则请将 retry.provider.maxRetries 保持为 0。将其设置为大于 0 可能使 SDK/提供商重试先于 Pi 处理超出使用限制的错误,这可能会在某些情况下阻塞代理,直到提供商配额重置。

{
  "retry": {
    "enabled": true,
    "maxRetries": 3,
    "baseDelayMs": 2000,
    "provider": {
      "timeoutMs": 3600000,
      "maxRetries": 0,
      "maxRetryDelayMs": 60000
    }
  }
}

消息传递

设置项 类型 默认值 描述
steeringMode 字符串 "one-at-a-time" 引导消息的发送方式:"all""one-at-a-time"
followUpMode 字符串 "one-at-a-time" 后续消息的发送方式:"all""one-at-a-time"
transport 字符串 "auto" 对于支持多种传输方式的提供商,首选传输方式:"sse""websocket""websocket-cached""auto"
httpIdleTimeoutMs 数字 300000 HTTP 头部/主体空闲超时时间(毫秒),也用于具有显式流空闲超时的提供商。设置为 0 以禁用。
websocketConnectTimeoutMs 数字 15000 对于支持 WebSocket 传输的提供商,WebSocket 连接/打开握手超时时间(毫秒)。设置为 0 以禁用。

终端与图片

设置项 类型 默认值 描述
terminal.showImages 布尔值 true 在终端中显示图片(如果支持)
terminal.imageWidthCells 数字 60 终端单元格中首选的内联图片宽度
terminal.clearOnShrink 布尔值 false 内容缩小时清除空行(可能导致屏幕闪烁)
images.autoResize 布尔值 true 将图片调整为最大 2000x2000
images.blockImages 布尔值 false 阻止所有图片发送到 LLM

Shell

设置项 类型 默认值 描述
shellPath 字符串 - 自定义 shell 路径(例如,Windows 上的 Cygwin);支持以 ~ 开头的家目录路径
shellCommandPrefix 字符串 - 每条 bash 命令的前缀(例如 "shopt -s expand_aliases"
npmCommand 字符串数组 - 用于 npm 包查找/安装操作的命令 argv(例如 ["mise", "exec", "node@20", "--", "npm"]
{
  "npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}

npmCommand 用于所有 npm 包管理器操作,包括安装、卸载以及 git 包内的依赖安装。用户范围的 npm 包安装在 ~/.pi/agent/npm/ 下;项目范围的 npm 包安装在 .pi/npm/ 下。请使用 argv 样式条目,完全按照进程启动方式设置。配置了 npmCommand 后,git 包依赖安装将使用普通的 install,以避免在包装器或替代包管理器中使用 npm 特定标志。

会话

设置项 类型 默认值 描述
sessionDir 字符串 - 存储会话文件的目录。接受绝对路径、相对路径以及 ~
{ "sessionDir": ".pi/sessions" }

当多个来源指定了会话目录时,优先级为 --session-dirPI_CODING_AGENT_SESSION_DIR,然后是 settings.json 中的 sessionDir

模型循环

设置项 类型 默认值 描述
enabledModels 字符串数组 - 用于 Ctrl+P 循环的模型模式(格式与 --models CLI 标志相同)
{
  "enabledModels": ["claude-*", "gpt-4o", "gemini-2*"]
}

Markdown

设置项 类型 默认值 描述
markdown.codeBlockIndent 字符串 " " 代码块的缩进

资源

这些设置定义了从何处加载扩展、技能、提示和主题。

~/.pi/agent/settings.json 中的路径相对于 ~/.pi/agent 解析。.pi/settings.json 中的路径相对于 .pi 解析。支持绝对路径和 ~

设置项 类型 默认值 描述
packages 数组 [] 从中加载资源的 npm/git 包
extensions 字符串数组 [] 本地扩展文件路径或目录
skills 字符串数组 [] 本地技能文件路径或目录
prompts 字符串数组 [] 本地提示模板路径或目录
themes 字符串数组 [] 本地主题文件路径或目录
enableSkillCommands 布尔值 true 将技能注册为 /skill:name 命令

数组支持 glob 模式和排除项。使用 !pattern 来排除。使用 +path 强制包含精确路径,使用 -path 强制排除精确路径。

packages

字符串形式加载包中所有资源:

{
  "packages": ["pi-skills", "@org/my-extension"]
}

对象形式过滤要加载的资源:

{
  "packages": [
    {
      "source": "pi-skills",
      "skills": ["brave-search", "transcribe"],
      "extensions": []
    }
  ]
}

有关包管理的详细信息,请参阅 packages.md

示例

{
  "defaultProvider": "anthropic",
  "defaultModel": "claude-sonnet-4-20250514",
  "defaultThinkingLevel": "medium",
  "theme": "dark",
  "compaction": {
    "enabled": true,
    "reserveTokens": 16384,
    "keepRecentTokens": 20000
  },
  "retry": {
    "enabled": true,
    "maxRetries": 3
  },
  "enabledModels": ["claude-*", "gpt-4o"],
  "warnings": {
    "anthropicExtraUsage": true
  },
  "packages": ["pi-skills"]
}

项目覆盖

项目设置(.pi/settings.json)会覆盖全局设置。嵌套对象会被合并:

// ~/.pi/agent/settings.json(全局)
{
  "theme": "dark",
  "compaction": { "enabled": true, "reserveTokens": 16384 }
}

// .pi/settings.json(项目)
{
  "compaction": { "reserveTokens": 8192 }
}

// 结果
{
  "theme": "dark",
  "compaction": { "enabled": true, "reserveTokens": 8192 }
}
  • 原文链接: github.com/badlogic/pi-m...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论