
关于
每个产品都将由 AI 驱动。帮助构建 AI 原生产品的策略和实践。
name: ai-product description: 每个产品都将由AI驱动。问题是你会正确构建它,还是发布一个在生产环境中崩溃的演示。 risk: safe source: vibeship-spawner-skills (Apache 2.0) date_added: 2026-02-27
AI产品开发
每个产品都将由AI驱动。问题是你会正确构建它,还是发布一个在生产环境中崩溃的演示。
本技能涵盖LLM集成模式、RAG架构、可扩展的提示工程、用户信任的AI用户体验,以及不会让你破产的成本优化。
原则
- LLM是概率性的,不是确定性的 | 描述:相同的输入可能给出不同的输出。为差异性设计。添加验证层。永远不要盲目信任输出。为必然会发生的边缘情况构建。 | 示例:好的:验证LLM输出是否符合schema,回退到人工审查 | 差的:解析LLM响应并直接用于数据库
- 提示工程就是产品工程 | 描述:提示就是代码。版本化它们。测试它们。A/B测试它们。文档化它们。一个词的改变可以翻转行为。以与代码相同的严谨性对待它们。 | 示例:好的:提示在版本控制中,有回归测试,A/B测试 | 差的:提示内联在代码中,临时更改,无测试
- 大多数用例RAG优于微调 | 描述:微调昂贵、缓慢且难以更新。RAG让你无需重新训练即可添加知识。从RAG开始。仅在RAG明确达到限制时才微调。 | 示例:好的:公司文档在向量存储中,查询时检索 | 差的:在公司数据上微调的模型,3个月后过时
- 为延迟设计 | 描述:LLM调用需要1-30秒。用户讨厌等待。流式传输响应。显示进度。尽可能预计算。积极缓存。 | 示例:好的:带打字指示器的流式响应,缓存的嵌入 | 差的:转圈15秒,然后出现一大段文字
- 成本是一个功能 | 描述:LLM API成本快速累积。在规模化时,低效的提示会让你破产。测量每次查询的成本。尽可能使用更小的模型。缓存一切可缓存的。 | 示例:好的:复杂任务用GPT-4,简单任务用GPT-3.5,缓存嵌入 | 差的:所有事情都用GPT-4,无缓存,冗长的提示
模式
带验证的结构化输出
使用函数调用或JSON模式配合schema验证
何时使用:LLM输出将被程序化使用
import { z } from 'zod';
const schema = z.object({
category: z.enum(['bug', 'feature', 'question']),
priority: z.number().min(1).max(5),
summary: z.string().max(200)
});
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: prompt }],
response_format: { type: 'json_object' }
});
const parsed = schema.parse(JSON.parse(response.content));
带进度的流式传输
流式传输LLM响应以显示进度并减少感知延迟
何时使用:面向用户的聊天或生成功能
const stream = await openai.chat.completions.create({
model: 'gpt-4',
messages,
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || '';
yield content; // 发送到客户端
}
RAG管道
检索增强生成用于基于知识的回答
何时使用:需要基于特定文档/数据回答问题
// 1. 嵌入查询
const queryEmbedding = await embed(userQuestion);
// 2. 检索相关文档
const relevantDocs = await vectorStore.search(queryEmbedding, { topK: 5 });
// 3. 构建带上下文的提示
const prompt = `Based on the following context, answer the question.
Context:
${relevantDocs.map(d => d.content).join('\n\n')}
Question: ${userQuestion}`;
// 4. 生成回答
const answer = await llm.generate(prompt);
模型路由
根据任务复杂度路由到不同模型
何时使用:需要平衡成本和质量
function selectModel(task: Task): string {
if (task.requiresReasoning) return 'gpt-4';
if (task.isSimpleClassification) return 'gpt-3.5-turbo';
if (task.isEmbedding) return 'text-embedding-3-small';
return 'gpt-3.5-turbo'; // 默认使用更便宜的
}
缓存策略
// 语义缓存 - 相似问题返回缓存答案
const cacheKey = await getSemanticCacheKey(query);
const cached = await cache.get(cacheKey);
if (cached && cached.similarity > 0.95) return cached.response;
// 嵌入缓存 - 避免重复计算
const embeddingCache = new Map();
async function getEmbedding(text: string) {
if (embeddingCache.has(text)) return embeddingCache.get(text);
const embedding = await embed(text);
embeddingCache.set(text, embedding);
return embedding;
}
AI用户体验原则
- 透明度:告诉用户这是AI生成的
- 可编辑性:让用户能修改AI输出
- 渐进式披露:先显示摘要,按需展开详情
- 置信度指示:当AI不确定时明确表示
- 回退路径:AI失败时提供替代方案
- 反馈循环:让用户标记好/坏回答以改进
成本优化
- 使用提示缓存减少重复token
- 批量处理非实时请求
- 压缩上下文(摘要而非全文)
- 设置每用户/每日支出上限
- 监控并告警异常使用模式
兼容工具
Claude CodeCursor
标签
AI与机器学习