跳转至

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 输出不可完全预测。测试应该验证输出的结构和关键特征,而不是完整字符串匹配。