102 lines
4.1 KiB
Markdown
102 lines
4.1 KiB
Markdown
---
|
||
id: ai.ai-coding.verify-evidence
|
||
title: 验证 AI 产出:测试、审查清单、真实环境验证和会话记录作为作品证据
|
||
type: lesson
|
||
domain: ai
|
||
stack: [ai-coding]
|
||
tags: [AI 产出验证, 代码审查, 测试, 会话记录, 作品集, 脱敏]
|
||
level: intermediate
|
||
prerequisites: [ai.ai-coding.workflow-rules-skills]
|
||
est_hours: 2.5
|
||
related: [ai.ai-coding.scenario.ai-assisted-feature, devops.cicd.index, ai.ai-coding.interview]
|
||
week: [8, 15]
|
||
order: 2
|
||
---
|
||
|
||
# 验证 AI 产出:测试、审查清单、真实环境验证和会话记录作为作品证据
|
||
|
||
## 解释说明
|
||
|
||
**AI 写代码的速度很快,你的价值在于判断它对不对。** 面试官会追问“你怎么确认 AI 写的是对的”,回答“我看了一下”是不够的。
|
||
|
||
### 三层验证
|
||
|
||
| 层 | 做法 |
|
||
| --- | --- |
|
||
| 自动检查 | 测试(尤其是你自己补的边界测试)、类型检查、lint、CI |
|
||
| 人工审查 | 逐行读懂;按清单检查(见下表);不懂的地方查文档或让 AI 解释后自己验证 |
|
||
| 真实环境 | 在本地 / 测试环境真正跑一遍:调接口、看页面、看日志和数据库,而不只是跑单测 |
|
||
|
||
### AI 代码常见问题审查清单
|
||
|
||
| 类别 | 检查点 |
|
||
| --- | --- |
|
||
| 边界条件 | 空值、负数、超大值、并发、重复请求 |
|
||
| 过时 API | 使用了旧版本的写法(例如 LangChain 0.x、MCP SDK 1.x 的写法) |
|
||
| 编造 | 不存在的函数、参数、配置项、依赖包 |
|
||
| 安全 | SQL 拼接、未校验输入、日志打印敏感信息、硬编码密钥 |
|
||
| 错误处理 | 吞掉异常、只处理成功路径 |
|
||
| 测试质量 | 测试只验证了实现本身(同一个错误写进了实现和测试)、过度 mock |
|
||
| 范围 | 改了不该改的文件、顺手“重构”了无关代码 |
|
||
|
||
### 会话记录作为作品证据
|
||
|
||
部分岗位要求提交 AI 编程的会话记录或案例。建议每个项目保留 1~2 份**整理过的**记录:任务、给 AI 的上下文、计划、AI 出错的地方和你怎么发现的、验证结果、最终提交。**务必脱敏**:去掉公司名、内部系统名、内网地址、密钥、客户数据——用学习项目的记录最安全。
|
||
|
||
## 案例
|
||
|
||
优惠价格计算:AI 生成的代码和测试都“通过了”,但测试是 AI 自己写的,只覆盖了正常情况。人工补充了 4 个边界测试,发现“优惠券大于金额”时返回负数;修复后用 `verify.py` 生成验证记录,附在提交说明里;这个过程整理成会话记录,放进作品集的“AI 编程案例”。
|
||
|
||
## 代码示例
|
||
|
||
[examples/ai-workflow/verify.py](examples/ai-workflow/verify.py) 运行一组检查并生成验证记录:
|
||
|
||
```bash
|
||
python verify.py --task "新增优惠价格计算" --check "pytest -q sample" --out verification.md
|
||
```
|
||
|
||
生成的记录(节选):
|
||
|
||
```markdown
|
||
# 验证记录:新增优惠价格计算
|
||
|
||
- 时间:2026-10-23 16:12 CST
|
||
- 结论:通过
|
||
|
||
| 检查 | 退出码 | 耗时(秒) |
|
||
| --- | --- | --- |
|
||
| `pytest -q sample` | 0 | 0.54 |
|
||
|
||
## 人工审查要点
|
||
|
||
- 金额使用 Decimal,舍入方式与产品文档一致(四舍五入到分)
|
||
- 补充了“优惠券大于金额”的边界测试:AI 第一版在这里返回负数
|
||
```
|
||
|
||
人工补充的边界测试 [sample/test_pricing.py](examples/ai-workflow/sample/test_pricing.py):
|
||
|
||
```python
|
||
def test_coupon_larger_than_amount():
|
||
assert final_price(Decimal("5"), Decimal("10"), vip=True) == Decimal("0.00")
|
||
|
||
|
||
def test_negative_rejected():
|
||
with pytest.raises(ValueError):
|
||
final_price(Decimal("-1"), Decimal("0"), vip=False)
|
||
```
|
||
|
||
会话记录模板:[session-log-template.md](examples/ai-workflow/session-log-template.md)。
|
||
|
||
## 易错点
|
||
|
||
- 让 AI 同时写实现和测试,然后以“测试通过”作为证据。
|
||
- 只跑单元测试,从没在真实环境运行。
|
||
- 会话记录直接导出未脱敏的公司内容。
|
||
- 记录里只有“AI 帮我写了 xx”,没有你的判断和验证过程——这恰恰是面试官想看的。
|
||
|
||
## 面试常问
|
||
|
||
- 你怎么确认 AI 写的代码是对的?
|
||
- 讲一次 AI 写错、被你发现的经历。
|
||
- 用 AI 编程后,你的效率提升了多少?哪些地方帮不上忙?
|