mirror of
https://github.com/tradecatlabs/vibe-coding-cn.git
synced 2026-11-02 11:26:32 +00:00
docs: getting-started - 中性化 Pi CLI 安装指南文案 (#245)
This commit is contained in:
@@ -9,15 +9,15 @@
|
||||
| 文件 | 职责 |
|
||||
|---|---|
|
||||
| `getting-started-README.md` | 入门索引 |
|
||||
| `god.md` | 《道成了肉身》:以经文题名组织,要求全文复制到网页版 Chat AI 并逐轮引导,直到本文范围内的 Pi CLI、OpenAI GPT 与本机 Bash 配置/使用验证完成 |
|
||||
| `god.md` | Pi CLI 安装与配置指南:用户全文复制给网页版 Chat AI,按步引导并核验 Pi CLI、OpenAI GPT 与本机 Bash |
|
||||
| `first-project.md` | 《如何完成工作》:围绕自选目标按需选择方法、实施或观察并以证据验收;不预设具体任务或固定流程 |
|
||||
| `getting-started-AGENTS.md` | 本组维护规则 |
|
||||
|
||||
## 修改规则
|
||||
|
||||
- 根`README.md`是唯一主页;`getting-started-README.md`只做导航,不复制完整教程。
|
||||
- `god.md` 本身就是给网页版 Chat AI 的完整提示词:文件头要求用户全文复制并逐轮互动;网页 AI 首轮简短说明路线;系统不明时才问系统,已提供的系统/终端信息直接复用;实际终端未确认或未就绪时指导打开/确认本机终端(Android 使用 Termux;仅在 Termux 未安装时才说明其官方来源与安装影响并等待用户明确决定),若用户尚无检查结果且系统、实际终端已明确且已打开,可直接安排 M0 只读版本检查;已回报目标终端的版本号则复用证据并跳过,已回报错误则按对应错误分支处理、不重复初始检查(仅允许明确规定的条件性重试);Android/Termux 按 Pi 官方 Termux 指南引导,不套用桌面安装命令。再从 M0 引导到 M4,按需检查/安装 Pi CLI、准备网络、连接 OpenAI GPT、验证本机 Bash;若 CLI 已验证可用则跳过安装专用网络检查与安装步骤。安装阶段只核对当前安装路线所需目标,不逐项探测未触发的安装源;短网络探测须设置连接和总时限,并说明超时不等于不可达;OpenAI 模型网络检查仅在 M4.1 按所选登录路线与实际故障执行;Pi 的 OpenAI GPT 路线区分 ChatGPT 订阅 OAuth(provider `openai-codex`)和 OpenAI API Key,不得将 ChatGPT 订阅等同 API 额度;用户另选本地模型时按请求可另行指导,但不计作 OpenAI GPT 验证或满足完成标准第 2 项;仅 API Key 路线可探测 `api.openai.com`,订阅 OAuth 不用该端点代测。安装路线默认优先对应系统的官方安装器,且每轮只展示一条当前路线。完成标准第 2 项只计 Pi 会话中所选 OpenAI GPT 模型对简单问题的实际回答,网页版 Chat AI 自身回复不算;必须等全部完成标准有真实证据后才报告完成,不得停在版本号、模型回答或单次命令检查。网页 AI 只核对用户回报,不能冒充本机执行。Chat/Work 是使用方式的教学分类,不是 Pi 的正式模式;本文完成范围限 Pi CLI、OpenAI GPT 与本机 Bash 通路,不承诺所有扩展、项目任务或自动化,不另维护重复提示词或项目开发步骤。
|
||||
- `god.md` 使用正常 Markdown 排版,标题、段落和链接直接渲染;粗体标记 `**...**` 与紧邻的中文正文之间保留空格,并通过提示词契约测试确认真实渲染;仅命令和对话示例保留独立代码块,不用外层围栏包住全文。整篇使用 GitHub 文件页右上角的原生全文复制按钮。移除折叠标签、HTML 锚点和页内章节链接;入站链接及历史重定向直接指向 `god.md`,文集链接不生成失效片段。修改时保留经文、操作流程、安全边界和完成标准。经文仅用已核验的《圣经》和合本简体(CUVS)原句,注明书卷、章节、版本与原页;连续节录须注明,不拼接或改写。保留原语境,技术对应另作说明,不以引用或比喻增加执行授权、权限或效果承诺。
|
||||
- `god.md` 本身就是给网页版 Chat AI 的完整提示词:文件头要求用户全文复制并逐轮互动;网页 AI 首轮简短说明路线;系统不明时才问系统,已提供的系统/终端信息直接复用;实际终端未确认或未就绪时指导打开/确认本机终端(Android 使用 Termux;仅在 Termux 未安装时才说明其官方来源与安装影响并等待用户明确决定),若用户尚无检查结果且系统、实际终端已明确且已打开,可直接安排 M0 只读版本检查;已回报目标终端的版本号则复用证据并跳过,已回报错误则按对应错误分支处理、不重复初始检查(仅允许明确规定的条件性重试);Android/Termux 按 Pi 官方 Termux 指南引导,不套用桌面安装命令。再从 M0 引导到 M4,按需检查/安装 Pi CLI、准备网络、连接 OpenAI GPT、验证本机 Bash;若 CLI 已验证可用则跳过安装专用网络检查与安装步骤。安装阶段只核对当前安装路线所需目标,不逐项探测未触发的安装源;短网络探测须设置连接和总时限,并说明超时不等于不可达;OpenAI 模型网络检查仅在 M4.1 按所选登录路线与实际故障执行;Pi 的 OpenAI GPT 路线区分 ChatGPT 订阅 OAuth(provider `openai-codex`)和 OpenAI API Key,不得将 ChatGPT 订阅等同 API 额度;用户另选本地模型时按请求可另行指导,但不计作 OpenAI GPT 验证或满足完成标准第 2 项;仅 API Key 路线可探测 `api.openai.com`,订阅 OAuth 不用该端点代测。安装路线默认优先对应系统的官方安装器,且每轮只展示一条当前路线。完成标准第 2 项只计 Pi 会话中所选 OpenAI GPT 模型对简单问题的实际回答,网页版 Chat AI 自身回复不算;必须等全部完成标准有真实证据后才报告完成,不得停在版本号、模型回答或单次命令检查。网页 AI 只核对用户回报,不能冒充本机执行。本文完成范围限 Pi CLI、OpenAI GPT 与本机 Bash 通路,不承诺所有扩展、项目任务或自动化,不另维护重复提示词或项目开发步骤。
|
||||
- `god.md` 使用正常 Markdown 排版,标题、段落和链接直接渲染;粗体标记 `**...**` 与紧邻的中文正文之间保留空格,并通过提示词契约测试确认真实渲染;仅命令和对话示例保留独立代码块,不用外层围栏包住全文。整篇使用 GitHub 文件页右上角的原生全文复制按钮。移除折叠标签、HTML 锚点和页内章节链接;入站链接及历史重定向直接指向 `god.md`,文集链接不生成失效片段。修改时移除宗教话语,改用简洁、中性的技术描述,并保留操作流程、安全边界和完成标准;不使用宗教标题、经文引用或宗教隐喻,也不因此改变授权或效果边界。
|
||||
- 安装方式、Node.js 版本要求、系统支持和 provider 流程以 Pi 当前官方文档与安装入口为准;链接及命令须明确系统、终端、影响和成功判断。官方资料未说明的内容标为未知,不猜测。
|
||||
- 区分 `pi --version`、模型授权/可用和项目任务完成;不把 CLI 安装说成模型已接通或项目环境已就绪。模型授权前,M4.0 先说明目录资源加载、会话保存与信任提示的影响,再引导用户在目标终端用 `pi` 进入交互界面;`/login`、`/model` 和问题在 Pi 输入框而非系统终端或网页版 AI 输入。已有目标目录的 Pi 会话直接复用,M4.2 不要求重新启动;空目录不是沙箱。M4.1 复用目标环境、路线与模型均未变化且无新失败信号的 GPT 成功回答,不重复登录或提问;已配置但无回答时仍须实际验证,只有缺少授权或实际鉴权失败才处理登录,不能将网络超时、限额或模型不可用直接归因于凭据失效,不为常规验证退出账号、删除或覆盖凭据。
|
||||
- 不把 WSL、Git、Python、编辑器、代理或项目依赖设为 Pi CLI 安装的通用前置条件。Windows 原生 Git Bash 是内置 Bash 工具的命令环境,不是 CLI 安装本身的要求。
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
## 字多不看
|
||||
|
||||
- [道成了肉身:Pi CLI 安装配置提示词](god.md)需全文复制到网页版 Chat AI 并逐轮互动:先确认操作系统和终端,再检查现有 Pi;只有没有可用 CLI 且用户同意时才按本机路线准备网络、安装并验证。之后再配置 OpenAI GPT 与 Bash;每轮只做一项,不能只凭版本号或模型回答结项。需要代理时按用户选择走 FlClash。
|
||||
- `pi --version` 只证明 CLI 可用;模型回答不等于 Work 执行能力,必须另看真实工具调用。项目依赖和具体工作不属于安装验收;[如何完成工作](first-project.md)是独立可选指南。
|
||||
- [Pi CLI 安装与配置指南](god.md)需全文复制到网页版 Chat AI 并逐轮互动:先确认操作系统和终端,再检查现有 Pi;只有没有可用 CLI 且用户同意时才按本机路线准备网络、安装并验证。之后再配置 OpenAI GPT 与 Bash;每轮只做一项,不能只凭版本号或模型回答结项。需要代理时按用户选择走 FlClash。
|
||||
- `pi --version` 只证明 CLI 可用;模型回答不证明本机工具可用或具体工作已完成,必须另看真实工具调用。项目依赖和具体工作不属于安装验收;[如何完成工作](first-project.md)是独立可选指南。
|
||||
- [如何完成工作](first-project.md)是独立可选指南,不是安装条件。
|
||||
|
||||
## 快速导航
|
||||
|
||||
| 文档 | 定位 |
|
||||
|:---|:---|
|
||||
| <a id="learning-map"></a>[道成了肉身:Pi CLI 安装配置提示词](god.md) | 网页 Chat AI 先确认操作系统/终端并检查现有 Pi;必要时按本机路线处理安装网络、安装并验证 CLI,再继续 OpenAI GPT 与本机 Bash。 |
|
||||
| <a id="learning-map"></a>[Pi CLI 安装与配置指南](god.md) | 网页 Chat AI 先确认操作系统/终端并检查现有 Pi;必要时按本机路线处理安装网络、安装并验证 CLI,再继续 OpenAI GPT 与本机 Bash。 |
|
||||
| <a id="first-project"></a>[如何完成工作](first-project.md) | 可选指南:围绕自选目标选择必要方法、实施或观察并以证据验收;不预设具体任务或固定流程。 |
|
||||
| <a id="vibe-coding-experience"></a>[Vibe Coding 经验](context/gongfa/README.md#doc-vibe-coding-experience) | 功法文集:理解人机分工、验证和质量边界。 |
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
### 细粒度目录
|
||||
|
||||
- [道成了肉身:Pi CLI 安装配置提示词](god.md) - 全文复制给网页版 Chat AI;从操作系统、本机终端(Android 使用 Termux)和现有 Pi 检查开始,按本机路线逐步准备安装网络、安装并验证 CLI,再继续模型和 Bash 验收。
|
||||
- [Pi CLI 安装与配置指南](god.md) - 全文复制给网页版 Chat AI;从操作系统、本机终端(Android 使用 Termux)和现有 Pi 检查开始,按本机路线逐步准备安装网络、安装并验证 CLI,再继续模型和 Bash 验收。
|
||||
- [如何完成工作](first-project.md) - 可选指南:围绕自选目标编排必要方法并以证据验收;不预设具体任务或固定流程。
|
||||
- [Vibe Coding 经验](context/gongfa/README.md#doc-vibe-coding-experience) - 功法文集:理解人机分工、验证和质量边界。
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
|
||||
## 使用方式
|
||||
|
||||
- 完全新手将[道成了肉身:Pi CLI 安装配置提示词](god.md)全文复制到可用的网页版 AI;AI 首轮先问操作系统,不熟悉终端时先指导打开本机终端(Android 使用 Termux),再逐轮互动。已有 Pi 的用户先运行 `pi --version`,成功就复用证据、不重装。
|
||||
- 完全新手将[Pi CLI 安装与配置指南](god.md)全文复制到可用的网页版 AI;AI 首轮先问操作系统,不熟悉终端时先指导打开本机终端(Android 使用 Termux),再逐轮互动。已有 Pi 的用户先运行 `pi --version`,成功就复用证据、不重装。
|
||||
- 网页 Chat AI 负责安装引导和核对回报,用户在本机 Pi 中发起工具验证;网页 AI 不冒充已操作用户设备,项目工具配置不属于本篇范围。
|
||||
- 需要处理一项具体工作时,可按需阅读[如何完成工作](first-project.md),围绕目标选择必要方法并用证据验收;想了解通用协作原则时按需读[Vibe Coding 经验](context/gongfa/README.md#doc-vibe-coding-experience)。
|
||||
|
||||
## 正文
|
||||
|
||||
本组文件的网络核对、Pi CLI 检查与必要安装、OpenAI GPT 配置和本机 Bash 使用验收统一维护于可全文复制的[道成了肉身:Pi CLI 安装配置提示词](god.md)。先按安装阶段检查当前路线所需网络并验证 CLI,再进入模型网络与授权;网页 Chat AI 每轮等待用户回报。只读命令检查不证明其他工具、具体工作或自动化;[如何完成工作](first-project.md)是独立可选指南。
|
||||
本组文件的网络核对、Pi CLI 检查与必要安装、OpenAI GPT 配置和本机 Bash 使用验收统一维护于可全文复制的[Pi CLI 安装与配置指南](god.md)。先按安装阶段检查当前路线所需网络并验证 CLI,再进入模型网络与授权;网页 Chat AI 每轮等待用户回报。只读命令检查不证明其他工具、具体工作或自动化;[如何完成工作](first-project.md)是独立可选指南。
|
||||
|
||||
+6
-28
@@ -1,10 +1,6 @@
|
||||
# 道成了肉身
|
||||
# Pi CLI 安装与配置指南
|
||||
|
||||
> **使用前:** 请将本文全文复制给可用的网页版 Chat AI,并与它逐轮交互;可使用 GitHub 文件页右上角的全文复制按钮。AI 应依次引导你完成本文范围内的 Pi CLI 检查/安装、必要网络准备、OpenAI GPT 授权与模型选择、工具配置及一次安全的实际使用验证;每次只推进一个动作,并等待你的决定和执行结果。不得在 `pi --version`、单次模型回答或单个命令测试后提前宣告完成;只有下文全部完成标准均有真实证据,才报告本文流程完成。本文所说“完成”仅指 Pi CLI + OpenAI GPT + 本机 Bash 通路,不代表全部可选扩展、项目任务或自动化均已配置。网页版 AI 不能操作本机、代用户授权或索取凭据;若遇阻,说明已完成项、证据和待决问题。
|
||||
>
|
||||
> “道成了肉身,住在我们中间,充充满满的有恩典有真理。我们也见过他的荣光,正是父独生子的荣光。”
|
||||
>
|
||||
> ——《约翰福音》1:14,[和合本CUVS](https://www.biblegateway.com/passage/?search=John%201%3A14&version=CUVS)
|
||||
|
||||
## 字多不看
|
||||
|
||||
@@ -16,18 +12,12 @@
|
||||
- 确认没有可复用安装后,先说明影响并等你明确决定;只检查本系统官方安装路线所需网络,目标不可达且你选择代理时才处理代理,再按该路线安装。
|
||||
- 安装后再用 `pi --version` 验证。版本号只证明 CLI 可用;OpenAI GPT 与本机 Bash 的配置及使用验证随后另行完成。
|
||||
|
||||
**本文比喻(非经文):** Chat 模式,让你获得与神对话的能力;Work 模式,让神的能力为你所用。本文以此代称模型对话与工具执行,不是 Pi 官方模式、权限授权或自动化承诺。
|
||||
|
||||
## 给网页版 Chat AI 的任务
|
||||
|
||||
用户会把本文全文复制给你。首轮简短说明流程,复用已知信息:系统未知只问系统;终端未就绪先帮用户打开。系统和终端已明确且没有检查结果时,安排 M0 的只读检查;已有结果直接复用。之后按 M0→M4 逐轮引导,每轮只给当前平台、当前阶段的一个动作,说明用途、影响和成功信号,等待回报后再继续;不一次展示全部路线。你只能引导并核对回报,不能访问或操作设备、代授权或声称已执行。用户停止则只汇报已证实项并停止;只有 `pi --version` 有版本号、Pi 中所选 OpenAI GPT 的实际回答、Pi 调用本机 Bash 的只读命令并得到结果这三项本机证据齐备,才报告流程完成;缺项时只报已证实项与缺项。系统不明时可直接这样问:
|
||||
|
||||
> 我会先确认你准备使用的系统和终端,再检查 Pi 是否已可用;已安装就不重装。你现在使用 Windows、macOS、Linux 还是 Android/Termux?如果不知道终端怎么打开,告诉我即可。
|
||||
|
||||
> “凡事都要规规矩矩的按着次序行。”——《哥林多前书》14:40,[和合本CUVS](https://www.biblegateway.com/passage/?search=1%20Corinthians%2014%3A40&version=CUVS)
|
||||
>
|
||||
> 经文原在讨论教会聚会的秩序;这里仅借其提醒按步骤引导,不改变授权边界。
|
||||
|
||||
- 用户不知道终端时按系统简短指引打开:Windows 用 PowerShell(不默认 WSL),macOS 用 Terminal,Linux 用桌面终端,Android 用 Termux。发命令前确认实际 shell;PowerShell、WSL、Linux shell 不混用。只给当前平台/阶段所需路线。
|
||||
- 绝不索取或转发密码、API Key、Token、cookie、私钥、个人订阅 URL、`auth.json`、OAuth 授权链接/码、设备码、回调 URL、完整 PATH、截图或未脱敏日志。用户误贴凭据时不引用、不使用,提醒其已暴露并建议走官方流程撤销/轮换。
|
||||
- Pi 按启动账户权限运行,不是沙箱;不得建议管理员/root。安装/更新/修复/迁移/卸载、系统或配置变更、外部服务访问、删除/覆盖前,先说明目标、影响和恢复方式,等用户明确同意;只读检查不需额外请示。
|
||||
@@ -77,11 +67,7 @@ Termux若按官方npm路线刚安装后仍找不到`pi`,按[官方故障排查
|
||||
|
||||
分发可能访问 `pi.dev`、npm、Node.js、系统包源;Termux 另需其包源,Windows 可选 Git Bash 路线可能访问 GitHub。只在真实失败时核对对应目标。
|
||||
|
||||
## M2:预备行各样的善事(安装 Pi CLI)
|
||||
|
||||
> “合乎主用,预备行各样的善事”——《提摩太后书》2:21(节录),[和合本CUVS](https://www.biblegateway.com/passage/?search=2%20Timothy%202%3A21&version=CUVS)
|
||||
>
|
||||
> 经文以器皿比喻人的预备与品行;这里只借其题名,不把安装软件等同于信仰或圣洁。
|
||||
## M2:安装 Pi CLI
|
||||
|
||||
仅在 M0 确认没有可复用 CLI 且用户同意安装/修复后进入本节。默认给当前系统的官方路线,每轮只给一步。Termux 更新、依赖和 Pi 安装逐项说明影响并等同意;Nix 仅供已有用户选择,npm 仅按用户明确要求。安装脚本会下载并执行代码:只从官方域名、在交互式普通用户终端运行;不得由 CI、脚本、非交互 shell 或管理员/root 执行。
|
||||
|
||||
@@ -131,11 +117,7 @@ Windows 安装器的 Node.js/npm 预检未通过并询问 `Install standalone No
|
||||
|
||||
复用 M0 的版本号;否则安装/修复后在目标终端运行 `pi --version`。它只证明 CLI 可用,不证明模型或工具接通。仍找不到则回 M0 核对安装渠道,不重复查 PATH 或盲目重装。
|
||||
|
||||
## M4:恩赐原有分别(配置模型并验证本机能力)
|
||||
|
||||
> “恩赐原有分别,圣灵却是一位。职事也有分别,主却是一位。功用也有分别,神却是一位,在众人里面运行一切的事。”——《哥林多前书》12:4–6,[和合本CUVS](https://www.biblegateway.com/passage/?search=1%20Corinthians%2012%3A4-6&version=CUVS)
|
||||
>
|
||||
> 经文原在说明教会中恩赐、职事与功用的分别;这里分别核实模型回答与工具执行,不以一项代替另一项。
|
||||
## M4:配置模型并验证本机能力
|
||||
|
||||
### M4.0:进入 Pi 交互界面
|
||||
|
||||
@@ -205,11 +187,7 @@ Pi 的[模型配置](https://pi.dev/docs/latest/models#configure-a-compatible-en
|
||||
|
||||
尚无可复用成功回答时,补齐授权和模型确认后,分轮让用户在 Pi 中提出无需改文件的简单问题;已完成的动作不重复。成功证据只能是 Pi 会话中所选 OpenAI GPT 的实际回答;网页版 AI 回复、CLI 版本、浏览器可达或 FlClash 已连接都不算。本地模型不计 OpenAI GPT,也不静默切换。按路线和脱敏错误排障,不因超时/限额/模型不可用重装 CLI或推断凭据失效。
|
||||
|
||||
### M4.2:凡事察验(完成一次实际工具使用验证)
|
||||
|
||||
> “凡事察验”——《帖撒罗尼迦前书》5:21(节录),[和合本CUVS](https://www.biblegateway.com/passage/?search=1%20Thessalonians%205%3A19-22&version=CUVS)
|
||||
>
|
||||
> 原文处于关于圣灵感动与先知讲论的劝勉中;这里以真实工具调用为证,不把模型自称完成当作执行。
|
||||
### M4.2:验证实际工具调用
|
||||
|
||||
沿用 M4.1 已验证模型的 Pi 会话,不为工具验证重新启动;让用户在 Pi 输入框中发送:
|
||||
|
||||
@@ -234,9 +212,9 @@ Pi 的[模型配置](https://pi.dev/docs/latest/models#configure-a-compatible-en
|
||||
|
||||
卸载不属于本任务。用户另行明确要求后,按安装渠道和当前[官方 Quickstart](https://pi.dev/docs/latest/quickstart)说明:npm 用 `npm uninstall -g @earendil-works/pi-coding-agent`;Nix 用 `nix profile remove pi`。官方安装器的 **Uninstall Pi** 仅适用于其托管安装路线:它会根据当前 `pi` 命令的安装标记定位实际托管安装根目录并递归删除该目录。默认新安装根目录为 `$PI_CODING_AGENT_DIR/install`(未设置该变量时是 `$HOME/.pi/agent/install`),已有或自定义安装可能位于其他位置。选择前先在本机核对实际目录并保留需保存的内容;路径或内容不确定时选 **Do nothing** 并暂停,不要把目录清单发给网页 AI。该删除只针对 Pi 托管安装根目录;它不删除默认 `~/.pi/agent/` 中该根目录以外的配置、凭据、会话等数据。清理这些数据须另行说明影响并等用户决定。
|
||||
|
||||
## 经文与技术边界
|
||||
## 技术边界
|
||||
|
||||
《约翰福音》1:14 原指基督的道成肉身。这里只借叙事意象说明从模型回答到工具行动;不把 AI 认作神,也不把软件对应为圣父、圣子、圣灵。模型产生工具请求,Pi 调用工具并回传真实结果;Pi 是 Agent Harness,规则、知识与扩展是按需加载的资源,云端模型也不是被安装在本机。技术说明与命令不改变经文原义或授权。
|
||||
模型生成工具请求,Pi 调用本机工具并返回实际结果。Pi 是 Agent Harness;规则、知识与扩展是按需加载的资源。云端模型运行在服务商提供的远端服务上,不是安装在本机的软件。本文的技术说明不改变工具权限或用户授权边界。
|
||||
|
||||
## 官方资料
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ GEOFlow 的关键启发是:GEO 不是关键词堆砌,而是内容工程链
|
||||
- .github/context/README.md:知识库总索引,提供新手、开发者、思维模型和 AI Agent 读取路径。
|
||||
- .github/getting-started-README.md:入门索引,链接可全文复制给网页版 AI 的 Pi CLI 提示词(先确认系统/终端并检查现有 Pi;必要时按安装路线核对网络、安装并验证 CLI,再接通 OpenAI GPT)与独立可选的《如何完成工作》指南;通用Vibe Coding经验正文见 .github/context/gongfa/README.md#doc-vibe-coding-experience。
|
||||
- .github/context/gongfa/README.md#doc-vibe-coding-experience:Vibe Coding 的核心经验入口,包含通用语言能力、人机分工、机器门禁和入门铁律。
|
||||
- .github/god.md:《道成了肉身》,以《圣经》和合本原句组织叙事、区分经文原义与技术说明的 Pi CLI 提示词;先确认系统/终端并检查现有 Pi;缺少 CLI 时才核对当前安装路线网络、按本机系统安装并验证,然后由网页 Chat 引导 Pi 连接 OpenAI GPT,再由本机 Pi 的实际工具调用验证基础 Work 通路。OpenAI API 网络检查延至模型配置阶段;用户选择 FlClash 路线后,默认目标配置启用 TUN、系统代理和全局模式,启用前说明流量/隐私影响及恢复方式并等用户确认。订阅 URL 属于凭据。Chat/Work 是使用方式分类,不是 Pi 的正式模式;模型回答不等于工具执行,一次命令检查不证明所有工作自动化,验收后停止,不展开项目任务。
|
||||
- .github/god.md:Pi CLI 安装与配置指南,用户全文复制给网页版 Chat AI,按阶段引导检查或安装 Pi CLI、连接 OpenAI GPT,并由用户在本机验证 Bash 工具调用。引导过程逐步等待用户回报,不代替用户操作或授权;CLI 版本、模型回答和 Bash 调用是不同证据,只有三项均有真实结果才报告本文范围内流程完成。OpenAI API 网络检查仅在模型配置阶段且出现真实故障时进行;用户选择 FlClash 路线后,启用 TUN、系统代理和全局模式前先说明流量/隐私影响及恢复方式并等待确认。订阅 URL 属于凭据。本文不承诺所有扩展、具体项目任务或自动化已配置。
|
||||
- 原 Codex 全局配置基线及安装/恢复脚本已按用户要求移除;历史 Codex 研究资料仅保存在本机副本,不作为 Pi 安装路线。
|
||||
- .github/first-project.md:《如何完成工作》可选指南:围绕自选目标按需编排方法、实施或观察并以证据验收;不预设具体任务或固定流程。
|
||||
- .github/context/gongfa/README.md:按理解、求解、设计、实现、验证、转化和内容身份导航的统一功法文集。
|
||||
|
||||
@@ -66,12 +66,12 @@ reading_paths:
|
||||
selection_rules:
|
||||
faqi: 需要理解 Vibe Coding 工具/依赖分类、重要性分级或效能边界时,读法器体系说明,再核生成总表与登记事实。
|
||||
gongfa: 需要认知模型、问题求解、工程准则、架构模板、方法、流程、门禁或研究转化时统一读取;文集与独立功法记录分开。
|
||||
getting-started: 需要先由网页 Chat 引导准备 Pi、接通模型,再通过本机工具调用验证基础 Work 通路时读取;《如何完成工作》是独立可选指南,通用经验链接到功法。
|
||||
getting-started: 需要准备 Pi CLI、连接所选模型并验证本机工具调用时读取;《如何完成工作》是独立可选指南,通用经验链接到功法。
|
||||
documents:
|
||||
getting-started:
|
||||
- path: .github/god.md
|
||||
title: 道成了肉身:Pi CLI 安装配置提示词
|
||||
role: 可全文复制到网页版 Chat AI,逐步引导本机准备和模型授权,再由本机 Pi 的真实工具调用验证基础 Work 通路;区分对话能力、执行证据与业务任务完成,验收后停止
|
||||
title: Pi CLI 安装与配置指南
|
||||
role: 可全文复制给网页版 Chat AI,逐步引导检查或安装 Pi CLI、连接 OpenAI GPT,并由用户在本机验证 Bash 工具调用;区分 CLI 可用、模型回答、工具执行和具体工作完成,验收后停止
|
||||
- path: .github/first-project.md
|
||||
title: 如何完成工作
|
||||
role: 可选工作指南:围绕自选目标按需选择方法,实施或观察并以证据验收;不预设具体任务或固定流程
|
||||
|
||||
@@ -486,7 +486,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_termux_pkg_upgrade_scope_is_explicit(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
guidance = next((line for line in m2.splitlines() if line.startswith('**Android/Termux:**')), '')
|
||||
required = (
|
||||
'Pi 官方 Termux 指南的 `pkg update && pkg upgrade`',
|
||||
@@ -499,7 +499,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_termux_pkg_upgrade_keeps_interactive_confirmation(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
guidance = next((line for line in m2.splitlines() if line.startswith('**Android/Termux:**')), '')
|
||||
required = (
|
||||
'保留交互确认,不要追加自动确认选项',
|
||||
@@ -533,7 +533,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_defers_pi_start_until_m40_review(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
self.assertIn(
|
||||
'安装完成后若出现 `Start pi now? [Y/n]`,明确输入 `n`,不要按 Enter 接受默认启动;先按 M3 核验版本,再到 M4.0 说明目录资源和信任影响后,由用户决定是否启动 Pi。',
|
||||
m2,
|
||||
@@ -541,7 +541,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_windows_user_path_prompt_requires_explicit_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
windows = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[1].split(
|
||||
'**仅供已选择的备用路线:**', 1
|
||||
)[0]
|
||||
@@ -558,7 +558,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_windows_node_install_prompt_discloses_side_effects_and_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
windows = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[1].split(
|
||||
'**仅供已选择的备用路线:**', 1
|
||||
)[0]
|
||||
@@ -579,7 +579,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_windows_portable_git_discloses_recursive_replacement_risk(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
windows = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[1].split(
|
||||
'**仅供已选择的备用路线:**', 1
|
||||
)[0]
|
||||
@@ -596,7 +596,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_windows_node_install_discloses_replacement_of_managed_directory(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
windows = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[1].split(
|
||||
'**仅供已选择的备用路线:**', 1
|
||||
)[0]
|
||||
@@ -613,7 +613,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_macos_homebrew_node_upgrade_requires_explicit_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
posix = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[0]
|
||||
required = (
|
||||
'macOS 安装器在 Node.js/npm 预检未通过',
|
||||
@@ -629,7 +629,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_posix_standalone_node_replacement_requires_local_check(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
posix = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[0]
|
||||
required = (
|
||||
'POSIX 安装器在 Node.js/npm 预检未通过',
|
||||
@@ -646,7 +646,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_uninstall_managed_root_deletion_requires_local_target_check(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
uninstall = prompt.split('## 可选:用户明确要求卸载时', 1)[1].split('## 经文与技术边界', 1)[0]
|
||||
uninstall = prompt.split('## 可选:用户明确要求卸载时', 1)[1].split('## 技术边界', 1)[0]
|
||||
required = (
|
||||
'官方安装器的 **Uninstall Pi**',
|
||||
'根据当前 `pi` 命令的安装标记定位实际托管安装根目录并递归删除该目录',
|
||||
@@ -662,7 +662,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_linux_apt_node_upgrade_requires_explicit_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
posix = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[0]
|
||||
required = (
|
||||
'Linux 安装器在 Node.js/npm 预检未通过',
|
||||
@@ -681,7 +681,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_windows_portable_git_shellpath_persistence_requires_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
windows = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[1].split('**仅供已选择的备用路线:**', 1)[0]
|
||||
required = (
|
||||
'Portable Git 会把 Bash 路径写入当前用户的 Pi 配置文件',
|
||||
@@ -698,7 +698,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_windows_winget_agreements_require_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
windows = m2.split('**Windows 原生 PowerShell 官方安装器:**', 1)[1].split('**仅供已选择的备用路线:**', 1)[0]
|
||||
required = (
|
||||
'`--accept-source-agreements`',
|
||||
@@ -715,7 +715,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_linux_standalone_node_xz_dependency_requires_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
posix = m2.split('**macOS/Linux 官方安装器:**', 1)[1].split('**Windows 原生 PowerShell 官方安装器:**', 1)[0]
|
||||
standalone = posix.split('POSIX 安装器在 Node.js/npm 预检未通过', 1)[1].split('macOS 安装器在 Node.js/npm 预检未通过', 1)[0]
|
||||
required = (
|
||||
@@ -733,7 +733,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_m2_posix_standalone_node_checksum_is_conditional(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m2 = prompt.split('## M2:预备行各样的善事', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
m2 = prompt.split('## M2:安装 Pi CLI', 1)[1].split('## M3:验证 CLI', 1)[0]
|
||||
posix = m2.split('**macOS/Linux 官方安装器:**', 1)[1].split('**Windows 原生 PowerShell 官方安装器:**', 1)[0]
|
||||
standalone = posix.split('POSIX 安装器在 Node.js/npm 预检未通过', 1)[1].split('macOS 安装器在 Node.js/npm 预检未通过', 1)[0]
|
||||
required = (
|
||||
@@ -1074,7 +1074,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_openai_connectivity_probe_requires_explicit_user_consent(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((line for line in m41.splitlines() if 'api.openai.com/v1/models' in line), '')
|
||||
required = (
|
||||
'仅 API Key 路线且确有连通故障时',
|
||||
@@ -1091,7 +1091,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_oauth_callback_host_scope_requires_local_review(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((line for line in m41.splitlines() if 'PI_OAUTH_CALLBACK_HOST' in line and '`0.0.0.0`' in line), '')
|
||||
required = (
|
||||
'`127.0.0.1`',
|
||||
@@ -1114,7 +1114,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_openai_model_visibility_does_not_prove_subscription_route(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((line for line in m41.splitlines() if '`OPENAI_API_KEY`' in line), '')
|
||||
required = (
|
||||
'路线/凭据来源不明时先暂停,不发测试问题',
|
||||
@@ -1127,7 +1127,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_openai_custom_base_url_requires_local_endpoint_review(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next(
|
||||
(paragraph for paragraph in m41.split('\n\n') if 'models.json' in paragraph and '`baseUrl`' in paragraph),
|
||||
'',
|
||||
@@ -1144,7 +1144,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_custom_endpoint_discloses_data_recipient_before_use(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next(
|
||||
(paragraph for paragraph in m41.split('\n\n') if '内置 `openai` provider 设置 `baseUrl`' in paragraph),
|
||||
'',
|
||||
@@ -1162,7 +1162,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_openai_remote_http_base_url_requires_transport_check(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next(
|
||||
(paragraph for paragraph in m41.split('\n\n') if '远端' in paragraph and '`baseUrl`' in paragraph and '`http://' in paragraph),
|
||||
'',
|
||||
@@ -1181,7 +1181,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_remote_custom_endpoint_preserves_tls_certificate_validation(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((paragraph for paragraph in m41.split('\n\n') if 'NODE_TLS_REJECT_UNAUTHORIZED=0' in paragraph), '')
|
||||
required = (
|
||||
'证书校验失败',
|
||||
@@ -1196,7 +1196,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_models_json_literal_api_key_must_stay_local(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((paragraph for paragraph in m41.split('\n\n') if '`apiKey`' in paragraph and 'models.json' in paragraph), '')
|
||||
required = (
|
||||
'字面值',
|
||||
@@ -1209,7 +1209,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_openai_oauth_hostname_is_checked(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((line for line in m41.splitlines() if line.startswith('- **订阅 OAuth:**')), '')
|
||||
required = (
|
||||
'Pi 1.4.0 当前内置流程使用 OpenAI 官方授权域 `auth.openai.com`',
|
||||
@@ -1222,7 +1222,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_oauth_browser_account_must_match_user_choice(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((line for line in m41.splitlines() if line.startswith('- **订阅 OAuth:**')), '')
|
||||
required = (
|
||||
'浏览器若显示已登录的 OpenAI 账号',
|
||||
@@ -1234,7 +1234,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
|
||||
def test_god_oauth_callback_conflict_has_safe_local_stop_path(self):
|
||||
prompt = Path(__file__).with_name('god.md').read_text(encoding='utf-8')
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:凡事察验', 1)[0]
|
||||
m41 = prompt.split('### M4.1:验证对话能力', 1)[1].split('### M4.2:验证实际工具调用', 1)[0]
|
||||
guidance = next((line for line in m41.splitlines() if '`1455`' in line and 'OAuth state mismatch' in line), '')
|
||||
required = (
|
||||
'订阅 OAuth',
|
||||
@@ -1260,7 +1260,17 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
]
|
||||
self.assertEqual(unrendered_emphasis, [])
|
||||
self.assertEqual((tokens[0].type, tokens[0].tag), ('heading_open', 'h1'))
|
||||
self.assertTrue(prompt.startswith('# 道成了肉身\n'))
|
||||
self.assertTrue(prompt.startswith('# Pi CLI 安装与配置指南\n'))
|
||||
self.assertIn('## M2:安装 Pi CLI', prompt)
|
||||
self.assertIn('## M4:配置模型并验证本机能力', prompt)
|
||||
self.assertIn('### M4.2:验证实际工具调用', prompt)
|
||||
for religious_language in (
|
||||
'道成了肉身', '《约翰福音》', '《哥林多前书》', '《提摩太后书》',
|
||||
'《帖撒罗尼迦前书》', '预备行各样的善事', '恩赐原有分别', '凡事察验',
|
||||
'圣经', '经文', '圣灵', '恩赐', '信仰', '圣洁', '教会', '基督',
|
||||
'与神对话', '神的能力', 'biblegateway.com',
|
||||
):
|
||||
self.assertNotIn(religious_language, prompt)
|
||||
self.assertNotRegex(prompt, r'</?(?:details|summary|a)\b')
|
||||
self.assertNotRegex(prompt, r'\]\(#[^)]+\)')
|
||||
self.assertNotIn('本代码块全文', prompt)
|
||||
@@ -1393,7 +1403,7 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
self.assertNotIn('curl -i https://api.openai.com/v1/models', prompt)
|
||||
self.assertNotIn('curl.exe -i https://api.openai.com/v1/models', prompt)
|
||||
self.assertLess(prompt.index('## 字多不看'), prompt.index('## 给网页版 Chat AI 的任务'))
|
||||
self.assertLess(prompt.index('## M1:网络环境'), prompt.index('## M2:预备行各样的善事'))
|
||||
self.assertLess(prompt.index('## M1:网络环境'), prompt.index('## M2:安装 Pi CLI'))
|
||||
self.assertLess(prompt.find('### M4.0:进入 Pi 交互界面'), prompt.find('\npi\n'))
|
||||
self.assertLess(prompt.index('\npi\n'), prompt.index('### M4.1:验证对话能力'))
|
||||
self.assertNotIn('模型能回答后,建议用户在空目录或非敏感目录启动 Pi。', prompt)
|
||||
@@ -1409,14 +1419,13 @@ class SourceArchiveTest(unittest.TestCase):
|
||||
],
|
||||
)
|
||||
html = markdown.render(prompt)
|
||||
for rendered in ('<h1>道成了肉身</h1>', '<h2>M0:检查现状</h2>',
|
||||
'<h2>完整配置与使用的完成标准</h2>',
|
||||
'href="https://pi.dev/docs/latest/termux"',
|
||||
'href="https://www.biblegateway.com/passage/?search=John%201%3A14&version=CUVS"'):
|
||||
for rendered in ('<h1>Pi CLI 安装与配置指南</h1>', '<h2>M0:检查现状</h2>',
|
||||
'<h2>完整配置与使用的完成标准</h2>', '<h2>技术边界</h2>',
|
||||
'href="https://pi.dev/docs/latest/termux"'):
|
||||
with self.subTest(rendered_markdown=rendered):
|
||||
self.assertIn(rendered, html)
|
||||
self.assertEqual(html.count('<pre>'), 5)
|
||||
self.assertTrue({'道成了肉身', 'm0检查现状', '官方资料'}.issubset(
|
||||
self.assertTrue({'pi-cli-安装与配置指南', 'm0检查现状', '官方资料'}.issubset(
|
||||
book_views._links.markdown_anchors(Path(__file__).with_name('god.md'))))
|
||||
self.assertEqual(book_views.relocated('.github/god.md', 'milestone-2'), ('.github/god.md', ''))
|
||||
self.assertEqual(book_views.relocated('.github/first-project.md', 'example'),
|
||||
|
||||
Reference in New Issue
Block a user