---
title: "2026 年 Pi 编程智能体工具链：从代码检索到前端验收"
canonical: https://wavect.io/zh/blog/pi-agent-development-stack/
language: zh
description: "Pi、ChunkHound、pi-schematic 和 agent-browser 如何配合开发现有应用？下载可复现的订单筛选缺陷，追踪源码，用浏览器核对翻页、刷新和后退，再以相同的回归测试验收修复。"
image: "https://wavect.io/img/blog/headers/header_pi-agent-development-stack.png"
author: ["Kevin Riedl"]
published: "2026-11-14"
updated: "2026-11-14"
reviewed: "2026-11-14"
---

# 2026 年 AI 编程工具链实测：用 Pi 等四个工具排查前端回归

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

12 分钟 阅读 · 2026年11月14日 最近审核 2026年11月14日

[**下一篇**](/zh/blog/multi-model-ai-coding-agent-stack-2026/)

要点速览

Pi 运行编程会话，ChunkHound 检索代码，pi-schematic 管理分工，agent-browser 检查渲染后的界面。先约定审查者能独立验证的行为。订单示例的两个版本都能通过第一页检查，翻页后缺陷版本显示已关闭的订单，刷新还能复现。

用户在订单页面选中 **Open**（未关闭）。第一页显示两笔未关闭的订单。开发人员把截图贴进工单，标记修复完成。可用户只要再点一次“下一页”，就会看到两笔 **Closed**（已关闭）的订单。用 AI 写代码时，谁来发现这个问题？

ChunkHound 作者 Ofri Wolfus 在公开教程里用四个工具开发了一款多人游戏。Pi 运行编程会话，ChunkHound 调查代码，pi-schematic 安排分工，agent-browser 查看前端实际运行的结果。我们沿用这套分工，把任务换成熟悉的维护场景：一个已有应用出了问题，审查者需要看到什么，才有依据合并修复？ [Wolfus 的作者介绍](https://agenticoding.ai/about) · [四工具协作的原版教程](https://agenticoding.ai/exercises/tic-tac-toe/overview)

**核查日期：2026 年 11 月 14 日。**我们安装了四个软件包，在 Pi 中加载扩展，用 ChunkHound 为示例代码建索引，并在 Chromium 中操作订单页面。当前环境限制了 agent-browser 守护进程需要的本地套接字，浏览器实测改由 Playwright 驱动。下文的模型研究、编写补丁环节是建议流程。本次验证没有发起付费模型请求。

## 这套 AI 开发工具链中，四个工具各负责什么？

Pi 让模型获得可操作的编程环境。ChunkHound 从仓库中找出相关实现。pi-schematic 在 Pi 内把调查、修改和审查分开。agent-browser 可以定位页面上实际渲染出来的控件。评估这四个工具时，可以逐项问：这一步结束后，下一位同事能拿到什么？

| 组件 | 在订单工单中的职责 | 应保留的证据 | 代码许可证 |
| --- | --- | --- | --- |
| Pi 1.5.2 | 使用选定的模型、仓库工具和项目说明运行编程会话。 | 范围明确的代码差异，以及验证改动的命令。 | MIT |
| ChunkHound 6.1.0 | 找到读取筛选条件和生成翻页链接的代码。 | 每个判断对应的文件、符号和行号。 | MIT |
| pi-schematic 0.7.1 | 让调查、实现和审查各自围绕一个具体问题展开。 | 交接记录，列清已确定的约束和尚待验证的行为。 | MIT |
| agent-browser 0.43.0 | 在真实浏览器中按用户的顺序操作页面。 | 地址栏、可见订单号和状态，以及刷新后的结果。 | Apache-2.0 |

这四个项目的代码均免费开源。模型 API、托管向量服务、云浏览器和 GPU 仍可能产生费用。本文的正则检索和本地浏览器示例无需模型账号。 [Pi 许可证](https://github.com/earendil-works/pi/blob/main/LICENSE) · [ChunkHound 仓库与许可证](https://github.com/chunkhound/chunkhound) · [pi-schematic 许可证](https://github.com/chunkhound/pi-schematic/blob/main/LICENSE) · [agent-browser 仓库与许可证](https://github.com/vercel-labs/agent-browser)

## 怎样把 Pi、pi-schematic 和 ChunkHound 接起来？

先安装 Pi 命令行工具，再把 pi-schematic 安装为 Pi 扩展。随后把 ChunkHound 注册为项目级 MCP 服务。MCP 即模型上下文协议，Pi 通过这个接口发现和调用仓库工具。目前 Pi 已内置 MCP 支持。agent-browser 可以独立作为命令行工具使用。 [Pi 运行环境和内置 MCP 支持](https://pi.dev/)

以下命令固定了我们核查过的软件版本，环境使用 Node 24 和 Python 3.12。在执行界面测试的机器上安装浏览器，并确保 Pi 所在环境的 `PATH` 能找到它要启动的工具。 [Pi CLI 安装与身份验证](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/README.md) · [agent-browser 安装说明](https://agent-browser.dev/installation)

```
npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.5.2
pi install npm:@chunkhound/pi-schematic@0.7.1
uv tool install chunkhound==6.1.0
npm install -g agent-browser@0.43.0
agent-browser install

## 在要交给 Pi 使用的项目仓库中执行以下两条命令。
pi mcp add -l chunkhound -- chunkhound mcp --no-daemon
pi mcp list
```

`-l` 会把服务定义写进项目的 `.pi/mcp.json`。在 Pi 中信任这个项目之前，先查看配置文件。Pi 找不到可执行文件，或项目配置还未被信任时，写入配置也可能无法调用工具。先检查 Pi 发现了哪些工具，再查询一段已知代码，核对返回的源文件位置。 [Pi 的项目配置、信任机制与 MCP 命令](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/mcp.md)

实测环境限制了共享守护进程的本地套接字。我们使用 ChunkHound 的单客户端模式 `--no-daemon`。信任测试项目后，Pi 显示服务已连接，并列出了 `search` 和 `daemon_status`。随后用独立的 MCP 客户端执行正则检索，查询 `PAGE_SIZE`，返回结果指向示例中的定义。这验证了通信和查询，无需让模型自行选择工具。 [ChunkHound CLI 与单客户端模式](https://chunkhound.ai/docs/cli-reference/)

我们还在一个全新的离线 Pi RPC 进程中加载了已安装的 pi-schematic。Pi 返回了扩展提供的 `model-groups`、`notebook`、`handoff` 和 `readonly` 命令。由此可以确认这组版本能够一起加载。具体模型能写出什么质量的补丁，还要给它一张真实工单来验证。

## 怎样用 ChunkHound 找到回归的原因？

先提一个能在源码中核对的问题。在这张工单里就是：哪个函数把订单状态写进下一页的 URL？如果地址没有这个参数，请求处理函数会返回什么？调查结果需要指向链接生成和参数读取两处，才能解释用户为何看到错误的订单。

把 [本地订单筛选示例](/downloads/pi-agent-development-stack/order_filter_lab.py) 下载到空目录。数据包含六笔虚构订单，每页两笔。缺陷模式和修复模式共用同一组数据。在该目录建索引即可搜索，不必接入向量服务。示例保留了 `next_status` 这个变量名，方便读者复现查询。 [ChunkHound 建索引、正则检索、语义检索和代码研究](https://chunkhound.ai/docs/getting-started/)

```
chunkhound index --no-embeddings .
chunkhound search --regex 'next_status'
```

ChunkHound 把**一个文件划分成 20 个代码片段，生成 0 个向量**。查询得到**三个内容有重叠的结果**，都来自同一个文件。在缺陷模式下，一行代码将 `next_status` 设为所有订单，下一行用 `page_url` 生成链接。URL 没有 `status` 参数时，请求处理函数默认返回所有订单。三处命中解释的是同一个缺陷。

已经知道变量名，普通文本搜索就够用。实际仓库可能把界面链接、路由解析、API 筛选和测试放在四个不同的包里。这时再试语义检索，或要求 ChunkHound 的研究工具追踪整个调用路径，每一步给出源码位置。审查时在目标提交上核对这些行。修改后先刷新索引，或确认索引已经收录变更，再参考下一次查询。

索引保存在本机，模型推理的地点则由后端配置决定。正则检索无需模型服务，语义检索需要向量模型，深入研究还依赖语言模型和兼容的重排配置。选用远程服务时，核对各阶段会向哪个地址发送代码片段和查询内容。如果仓库要求数据留在本地，先单独验证每个后端，再向团队开放。 [ChunkHound 的模型服务与索引配置](https://chunkhound.ai/docs/configuration/)

## Pi 和 pi-schematic 应该怎样分配同一项改动？

把待调查的问题交给研究者，把范围明确的改动交给实现者，再让审查者独立验证用户能看到的结果。pi-schematic 的 `spawn` 可以启动拥有全新对话的子智能体，`handoff` 将已有决策带到下一阶段。子智能体继承当前工作目录。即使对话相互独立，两个智能体也可能改写同一份文件。 [pi-schematic 角色、模型组、笔记和工作目录](https://github.com/chunkhound/pi-schematic)

| 角色 | 任务 | 交接条件 |
| --- | --- | --- |
| 研究者 | 从第一页开始，追踪筛选状态怎样进入翻页链接、再由请求处理函数读取。给出源码位置。 | 接手的人能指出参数在哪里丢失，解释默认值如何影响结果。 |
| 实现者 | 生成下一页 URL 时保留当前状态。保留现有路由和空结果行为。 | 提交范围小的代码差异，相关文件由一位实现者负责。 |
| 审查者 | 打开第二页之前，先根据测试数据写下预期的订单号，再检查 URL、行内容、刷新、后退和空结果。 | 保留预期值和实测值，做到下一次发布也能复核。 |

把预期订单号和改动范围写进工单，或者随代码提交回归测试。扩展的 notebook 适合在交接时保留当前决策。它与工作流绑定，开始新的工作流后会清空。下次发布时，两位同事若要还原当时的判断，可以从 Git 差异、测试和工单入手。多个实现者需要并行修改时，分别准备工作树或隔离写入范围。 [编程智能体运行框架怎样管理工具、状态与验证](/zh/blog/agent-harness-engineering/) 。

## 怎样证明用户点到下一页后，修复依然有效？

操作界面之前先写清预期。选择 Open 后，第一页应列出 `ORD-101` 和 `ORD-102`。点击下一页，应列出 `ORD-105` 和 `ORD-106`，两笔状态均为 Open。地址栏要保留筛选条件和页码，刷新后才能还原同一组结果。

先以缺陷模式运行本地服务。在允许 agent-browser 启动本地浏览器守护进程的机器上，打开第二个终端执行以下命令。示例按链接的可访问角色和名称定位界面控件。快照生成的元素编号即使发生变化，这些命令仍能找到对应的链接。 [agent-browser 的导航、定位与状态检查命令](https://agent-browser.dev/commands)

```
# 终端 1
python3 order_filter_lab.py --mode broken --port 8765

## 终端 2
agent-browser open http://127.0.0.1:8765/orders
agent-browser snapshot -i
agent-browser find role link click --name "Open" --exact
agent-browser find role link click --name "Next page" --exact
agent-browser get url
agent-browser snapshot
agent-browser reload
agent-browser snapshot
agent-browser back
agent-browser snapshot
agent-browser find role link click --name "Cancelled" --exact
agent-browser snapshot
agent-browser close
```

交互快照（`-i`）适合定位控件。完整快照还会返回表格中可读的行内容。使用 `@e3` 这类引用时，导航后重新获取快照，从新结果中选择引用。如果验收涉及元素对齐或文字是否被截断，再补一张截图。这处缺陷则要看订单号、状态和 URL 是否都正确。 [快照类型与元素引用](https://agent-browser.dev/snapshots)

| 检查点 | 缺陷模式 | 修复模式 |
| --- | --- | --- |
| 选择 Open | ORD-101、ORD-102，状态都是 Open。 | 第一页相同。 |
| 点击 Next page | `/orders?page=2`。显示 ORD-103 和 ORD-104，状态都是 Closed。 | `/orders?status=open&page=2`。显示 ORD-105 和 ORD-106，状态都是 Open。 |
| 刷新第二页 | URL 没有筛选参数，仍显示同样两笔已关闭的订单。 | URL 保留筛选参数，仍显示同样两笔未关闭的订单。 |
| 浏览器后退 | 回到 Open 的第一页，显示 ORD-101 和 ORD-102。 | 恢复翻页之前的 URL 和订单。 |
| 选择 Cancelled | 没有数据行，显示“No matching orders.”（没有符合条件的订单）。 | 同样显示空结果，URL 保留已取消状态。 |

按 Ctrl-C 停止服务，使用 `--mode fixed` 重新启动，再重复相同操作。两个版本都能通过“第一页筛选正常”这一项。把行内容和路由状态放在一起检查，才能解释为什么下一页和刷新会失败。后退和空结果则验证了相邻操作是否仍然可用。

如需在后续版本中反复验证，把 [Playwright 回归测试](/downloads/pi-agent-development-stack/test_order_filter.py) 放在示例文件旁。测试对两个版本使用完全相同的验收条件。即使探索性浏览会话已经结束，另一位审查者也能独立复现。在缺陷模式下，测试在“下一页”失败，退出码为 1。在修复模式下，五项检查全部通过，退出码为 0。

```
python3 -m pip install playwright
python3 -m playwright install chromium
python3 test_order_filter.py http://127.0.0.1:8765/orders
```

更大范围上线时，可参考 [产品发布前 QA 检查清单](/zh/software-development-guide/software-qa-checklist-before-launch/) 。

## 团队什么时候值得引入这四个工具？

先从交付中反复出现的问题入手。工程师本来就能快速找到相关函数，为一处六行改动接入向量服务，收益有限。如果代码审查放行的功能经常在用户下一次点击时出错，就应先投资可重复的浏览器断言。已有项目可以逐个引入工具，观察效果后再扩大范围。

- **代码定位太慢：** 让同一位工程师用现有搜索和 ChunkHound 分别处理难度相近的工单。记录找到正确文件所需的时间，并核对调查结果中有多少条引用真正支持结论。
- **任务范围经常漂移：** 在 pi-schematic 中保存一套流程，由一位实现者修改、一位审查者复核。统计重复调查、冲突改动和可复现的问题。把简单改动分配给三个付费模型会话，也可能只增加成本。
- **审查漏掉界面缺陷：** 在浏览器中记录失败，独立写下预期值，打补丁后用同一组条件复测。需要在每次发布都保证的行为，可以把确定性的断言加入 CI。

试点的分母可以用满足约定验收条件的修复数。假设八项修复验收通过，模型调用共花 12 欧元，审查花三小时，按示例费率每小时 80 欧元计算，总计 252 欧元，每项通过验收的修复花费 31.50 欧元，另加基础设施费用。被驳回的尝试同样会占用审查时间，要计入分子。把结果和团队处理同类工单的现有流程对照。更多模型路由与采购取舍见 [多模型编程智能体技术栈选型指南](/zh/blog/multi-model-ai-coding-agent-stack-2026/) 。

原型进入企业试点时还有其他交付工作，可参考 [Twinsoft AI 项目案例](/zh/case-studies/twinsoft-ai/) 。Wavect 的 [智能体运行框架工程服务](/zh/services/harness-engineering/) 帮助团队把仓库工具、智能体流程和发布检查接起来。 [用一张现有工单设计试点](/zh/contact/?intent=harness-engineering) 。

## Pi 开发工具链常见问题

### Pi 本身是一个编程模型吗？

Pi 是编程智能体的运行框架，负责运行会话，并向选定的模型提供工具。记录 Pi 和扩展的版本时，另外记录模型 ID。两位工程师即使使用同一套框架，也可能因模型、项目说明和工具权限不同而得到不同结果。

### 现有项目可以只用 agent-browser 吗？

可以。agent-browser CLI 能独立操作浏览器。先选本地或预发布页面，把待验证行为写下来。可访问性快照能帮你找到控件。由测试数据或其他独立依据确定预期值，其他同事就可以复核结果，不必仅凭智能体的叙述验收。

### 在笔记本电脑上运行 ChunkHound，能保证代码始终留在本机吗？

要看启用了哪些功能、选了哪些后端。本次本地正则检索没有生成向量，也没有使用模型账号。向量模型和研究后端可能部署在远程。为私有仓库选型时，先核对配置中的服务端点，以及每个阶段实际发送的数据。

### 用 pi-schematic 启动审查智能体，会自动创建 Git 工作树吗？

子智能体从新的对话开始，继承当前的工作目录。独立对话仍可写入同一个文件。为每项修改指定负责人，需要并行写入时显式创建工作树。把最终审查结论和测试证据保存在仓库或工单中。

### 有了 agent-browser，还需要 Playwright 测试吗？

取决于需要重复验证什么。浏览器 CLI 适合探索新流程、检查页面和尝试其他路径。提交到仓库的断言可以在每次发布时检查同样的 URL 和数据行。本文演示这两种用途，并提供可重复运行的回归测试。

### 怎样判断这套工具链能否处理我们的仓库规模？

选一份有代表性的项目代码，准备一些已知负责模块的真实工单。记录首次建索引时间、索引大小、变更收录延迟、检索准确度，以及审查后通过验收的修复数。另外统计内存消耗和模型服务费用。小型示例可验证功能。企业仓库的容量和成本应当用本团队的代码实测。

QA 与生产就绪

## 接下来读什么

可靠生产软件所需的测试、审计、维护与加固。

[从这里开始**AI 生成代码的 QA**](/zh/blog/qa-for-ai-generated-code/)

- [切换到 Claude Fable 5.2 后，智能体还能接着上次的会话工作吗？](/zh/blog/claude-fable-5-2-session-replay/)
- [阿里 Open Code Review 没有评论，怎样确认它审了哪些文件？](/zh/blog/alibaba-open-code-review-no-comments/)
- [采购 LoRaWAN 水表前，如何现场验证读数和漏水报警？](/zh/blog/lorawan-water-meter-field-acceptance-test/)
- [两家供应商都说开发完成，软件该怎么验收？](/zh/blog/multi-vendor-software-acceptance-testing/)
- [README ZIP 恶意软件：审查 AI 工具的实际安装内容](/zh/blog/readme-zip-malware-install-review/)

[上一篇文章**切换到 Claude Fable 5.2 后，智能体还能接着上次的会话工作吗？**](/zh/blog/claude-fable-5-2-session-replay/) [下一篇文章**阿里 Open Code Review 没有评论，怎样确认它审了哪些文件？**](/zh/blog/alibaba-open-code-review-no-comments/)

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

12 分钟 阅读 · 2026年11月14日 最近审核 2026年11月14日

[**下一篇**](/zh/blog/multi-model-ai-coding-agent-stack-2026/)
