AI 集成¶
在应用中集成 LLM、构建 RAG 系统和 Agent——这是 Vibe Coding 最具前沿性的应用场景。
LLM 接入¶
基础调用封装¶
# 任务:封装 OpenAI API 调用,统一处理重试、限流和错误
# 背景:应用需要在多个地方调用 GPT-4o,
# 目前每处都在直接调用 openai.chat.completions.create
# 目标:创建统一的 LLMClient 类
# 功能:
# - 自动重试(最多 3 次,指数退避)
# - 速率限制处理(429 错误自动等待)
# - 请求/响应日志(脱敏处理,不记录 prompt 内容)
# - 用量统计(token 消耗记录到数据库)
# 范围:创建 src/services/llm_client.py
# 约束:
# - 使用 openai 库(已安装,v1.x)
# - 不缓存响应(streaming 场景下不可行)
# - 支持 streaming 和非 streaming 两种模式
# 验收:pytest tests/test_llm_client.py(使用 mock)
Prompt 管理¶
# 任务:实现 Prompt 模板管理系统
# 背景:系统有 20+ 个不同的 prompt,
# 目前硬编码在各处,难以维护和 A/B 测试
# 目标:
# 1. 把 prompt 模板存储在 prompts/ 目录(YAML 格式)
# 2. 支持变量插值:{{ user_name }}、{{ context }}
# 3. 支持版本管理:同一 prompt 可以有多个版本
# 4. 支持 A/B 测试:按比例随机选择版本
# 范围:创建 src/prompts/ 目录和 PromptManager 类
# 验收:pytest tests/test_prompt_manager.py
RAG 系统¶
背景:需要为企业知识库构建问答系统
文档格式:PDF、Markdown、Word
向量数据库:已部署 Weaviate 实例
Embedding 模型:text-embedding-3-small
目标:实现文档索引和检索流程
索引流程:
1. 文档解析 → 分块(512 token,20% 重叠)
2. 生成 Embedding
3. 存入 Weaviate,携带元数据(来源、页码、时间)
检索流程:
1. 查询 Embedding
2. 向量检索(Top-K=5)
3. 重排序(按相关性)
4. 拼接上下文 + 调用 LLM 生成答案
范围:创建 src/rag/ 模块
约束:
- 不使用 LangChain(直接调用 API)
- 检索延迟 P99 < 500ms
验收:
- 单元测试覆盖索引和检索逻辑
- 集成测试:10 个典型问题的准确率 > 80%
Agent 构建¶
背景:构建一个代码审查 Agent,
能自动分析 PR 并给出安全和质量建议
工具列表:
- get_pr_diff(pr_id) → string
- search_docs(query) → list[Document]
- post_comment(pr_id, comment) → void
目标:实现 Agent 的工具调用循环
流程:
1. 获取 PR diff
2. 分析安全风险(SQL 注入、XSS 等)
3. 分析代码质量(复杂度、重复代码)
4. 搜索相关最佳实践文档
5. 生成结构化评审意见并发布
范围:创建 src/agents/code_review_agent.py
约束:
- 使用 Claude claude-sonnet-4-5 模型
- 每个 PR 最多调用 10 轮工具
- 评审意见使用 Markdown 格式
验收:
- 对 5 个测试 PR 的评审质量人工验收
- 工具调用日志可追溯
AI 特有的验证要求¶
| 验证维度 | 说明 |
|---|---|
| 功能正确性 | 输出是否符合预期格式和内容 |
| 一致性 | 相同输入多次运行的输出是否稳定 |
| 边界情况 | 空输入、超长输入、特殊字符 |
| 延迟 | P50/P99 响应时间 |
| 成本 | token 消耗和费用估算 |
| 安全性 | Prompt Injection 防护 |
常见陷阱¶
陷阱:跳过 Prompt Injection 防护
任何接受用户输入并插入 prompt 的系统都必须做输入过滤。在约束中明确要求。
陷阱:用非确定性结果做断言测试
LLM 输出不可完全预测。测试应该验证输出的结构和关键特征,而不是完整字符串匹配。