Files
2026-07-13 21:35:56 +08:00

103 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 步骤 1a:项目分析
在查看代码结构、入口点或编写任何检测工具之前,先理解该软件在真实世界中是做什么的。这份分析是后续每个步骤的基础——它决定了哪些入口点应优先处理、定义哪些评估标准、使用什么追踪输入,以及构建哪些数据集条目。
---
## 需要调查的内容
阅读项目的 README、文档以及顶层源文件。你需要找到以下五个问题的答案:
### 1. 该软件是做什么的?
用一段简明易懂的语言来概括。它解决了什么问题?一次成功的运行是什么样的?
### 2. 谁在使用它以及为什么?
目标用户是谁?主要用例是什么?它解决了哪些替代方案无法解决的问题?这有助于你理解对该应用而言"质量"意味着什么——一个与客户对话的聊天机器人,与一个综合多源报告的研究型代理,有着截然不同的质量要求。
### 3. 能力清单
列出该应用提供的各项独立能力、模式或功能。要具体。例如:
- 对于一个爬取库:单页爬取、多页爬取、基于搜索的爬取、语音输出、脚本生成
- 对于一个语音代理:问候语、FAQ 处理、账户查询、转接人工、通话摘要
- 对于一个研究代理:主题研究、多源综合、引文生成、报告格式化
每项能力可能需要自己的入口点、自己的追踪记录以及自己的数据集条目。该清单直接为步骤 1c(用例)和步骤 4(数据集多样性)提供输入。
### 4. 真实的输入是什么样的?
描述该应用在真实世界中处理的输入——而非玩具示例:
- 对于一个网页爬取器:"包含导航、广告、动态内容、表格、嵌套结构的杂乱 HTML 页面——通常为 5KB500KB 的 HTML"
- 对于一个研究代理:"需要多源综合的开放式研究问题,包含 3–10 个子问题"
- 对于一个语音代理:"带有背景噪音、打断和模糊请求的多轮对话"
要具体说明**规模**(多大)、**复杂度**(有多杂乱/多样)以及**多样性**(有哪些种类)。这直接为追踪输入选择(步骤 2)提供依据——如果你不在这里描述真实的输入特征,最终就会使用绕过应用真实逻辑的玩具输入。
**本节是一项操作约束,而不仅仅是文档。** 步骤 2c(追踪输入)和步骤 4c(数据集条目)将交叉引用这些特征,以验证追踪输入和数据集条目是否匹配真实世界的规模和复杂度。要具体且量化——写"5KB500KB 的 HTML 页面",而不是"各种 HTML 页面"。
### 5. 难点/故障模式有哪些?
是什么让该应用的工作变得困难?它在实际使用中会在哪些地方失败?这些将成为最有价值的评估场景:
- 对于一个爬取器:"格式错误的 HTML、动态 JS 渲染内容、复杂的嵌套模式、超出上下文窗口的超大页面"
- 对于一个研究代理:"相互矛盾的来源、需要多步推理的问题、编造引用"
- 对于一个语音代理:"模糊的来电者意图、账户查询失败、同时进行的工具调用"
每个故障模式应至少映射到一个评估标准(步骤 1c)和至少一个数据集条目(步骤 4)。
---
## 输出:`pixie_qa/00-project-analysis.md`
将你的发现写入该文件。**在进入子步骤 1b 之前,完成全部五个部分。** 该文档被后续每个步骤引用。
### 模板
```markdown
# 项目分析
## 该软件的功能
<一段话:它做什么,用通俗易懂的语言。不是类名或文件路径——它为使用者解决了什么问题?>
## 目标用户与价值主张
<谁使用它,为什么,它解决了哪些替代方案无法解决的问题>
## 能力清单
1. <能力名称><一行描述>
2. <能力名称><一行描述>
3. ...
## 真实输入特征
<真实世界输入的样子——规模、复杂度、杂乱程度、多样性。要具体说明规模和结构。>
## 难点与故障模式
1. <故障模式>:<为什么难,会出什么问题>
2. <故障模式>:<为什么难,会出什么问题>
3. ...
```
### 质量检查
在继续之前,请验证:
- "该软件的功能"部分应以非技术用户能理解的方式描述应用的用途——而不仅仅是"它运行一个图"或"它调用 OpenAI"
- 能力清单至少列出 3 项能力(如果项目具备的话)——如果你只找到了 1 项,可能只看了代码库的一部分
- 真实输入特征应描述真实世界的规模和复杂度,而非最简单可能的输入
- 故障模式应针对该应用的特定领域,而非泛泛而谈("输入错误"不是一个故障模式;"格式错误的 HTML 带有未闭合标签导致解析器崩溃"才是)
### 项目中应忽略的内容
项目中可能包含属于其自身开发/测试基础设施的目录和文件——例如 `tests/``fixtures/``examples/``mock_server/``docs/`、演示脚本等。这些是为项目开发者准备的,而不是为你的评估管道准备的。
**关键**:请勿将项目的测试夹具、模拟服务器、示例数据或单元测试基础设施用作评估追踪或数据集条目的输入。它们是为开发速度和隔离性而设计的——数据规模小、干净、确定性强,绕过了所有真实世界的难点。使用它们会产生过于简单的评估,无法捕捉到真正的质量问题。
当你在分析过程中遇到这些目录时,注意它们的存在,但将其视为项目的实现细节——而不是你的 QA 管道的数据来源。你的 QA 管道必须在真实世界条件下测试应用,而不是使用项目自身的测试捷径。