A/B 测试设计与分析时使用。适用于产品实验、功能验证、转化率优化。融合假设驱动 + 样本量计算 + 置信度判断。
日本語の概要は準備中です。原文の説明を表示しています。
LLM 集成全流程。覆盖 OpenAI / Anthropic / Google / 开源模型接入、Prompt 工程、 Function Calling、Agent 编排、Token 优化、安全防护、生产化部署。
触发关键词:LLM、GPT、Claude、Gemini、Prompt、Function Calling、Tool Use、 Agent、Chain、Structured Output、Streaming、Token、Rate Limit。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
当任务属于以下场景时使用本 skill:
| 场景 | 用什么 |
|---|---|
| LLM API 调用 / Prompt 设计 / Agent 编排 | 本 skill |
| 向量检索 + LLM 生成(RAG) | rag-pipeline/ |
| 模型微调 / LoRA / 全量训练 | model-training/ |
| 离线评估 / A/B 测试 / 基准测试 | ml-evaluation/ |
| 推理服务部署 / GPU 调度 | ai-deployment/ |
1. Prompt 即代码——版本管理、Code Review、回归测试
2. 先基线再优化——用最简方案建立 baseline,再迭代
3. 成本即架构决策——Token 用量直接影响产品可行性
4. 防御性设计——所有用户输入都可能是攻击
5. 可观测性优先——每次调用都要有 trace
| 需求特征 | 推荐模型 | 理由 |
|---|---|---|
| 最高智能 + 复杂推理 | Claude Opus / GPT-4o | 推理质量最佳 |
| 高速 + 低成本 | Claude Haiku / GPT-4o-mini | 延迟低、成本 1/10 |
| 长上下文(128K+) | Claude / Gemini 1.5 Pro | 原生支持长文档 |
| 本地部署 / 数据隐私 | Llama 3.1 70B / Qwen2 72B | 开源可控 |
| 多模态(图像+文本) | GPT-4o / Claude Opus / Gemini | 原生多模态 |
| 代码生成 | Claude Opus / GPT-4o / DeepSeek Coder | 代码特化 |
| 中文优化 | Qwen2 / GLM-4 / DeepSeek | 中文训练充分 |
| 边缘/嵌入式 | Phi-3 Mini / Llama 3.2 1B | 参数少、可量化 |
| 工具 | 用途 | 安装命令 |
|---|---|---|
| openai | OpenAI 官方 SDK | pip install openai |
| anthropic | Anthropic 官方 SDK | pip install anthropic |
| google-genai | Google Gemini SDK | pip install google-generativeai |
| litellm | 统一多模型接口 | pip install litellm |
| ollama | 本地模型运行 | curl -fsSL https://ollama.com/install.sh | sh |
| 工具 | 用途 | 适用场景 |
|---|---|---|
| LangChain | Chain / Agent / Tool 编排 | 复杂多步 Agent |
| LlamaIndex | 数据索引 + LLM 查询 | 知识库问答 |
| Semantic Kernel | .NET / Python 混合 Agent | 企业 .NET 项目 |
| CrewAI | 多 Agent 协作 | 多角色任务分工 |
| Autogen | 多 Agent 对话 | 研究型自主 Agent |
| 工具 | 用途 | 集成方式 |
|---|---|---|
| LangSmith | LLM 调用追踪 + 评估 | LangChain 原生 |
| Langfuse | 开源 LLM Observability | OpenTelemetry |
| Helicone | 代理层日志 + 缓存 | HTTP 代理 |
| Weights & Biases | 实验追踪 | Python SDK |
# OpenAI 标准调用(含重试 + 超时 + 结构化输出)
import openai
from tenacity import retry, stop_after_attempt, wait_exponential
client = openai.OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
timeout=30.0,
max_retries=3,
)
@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=1, max=10))
def call_llm(messages: list[dict], model: str = "gpt-4o") -> str:
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.1,
max_tokens=4096,
)
return response.choices[0].message.content
# Anthropic 调用(含流式输出)
import anthropic
client = anthropic.Anthropic()
def stream_claude(prompt: str, system: str = ""):
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=4096,
system=system,
messages=[{"role": "user", "content": prompt}],
) as stream:
for text in stream.text_stream:
yield text
# OpenAI 结构化输出(JSON Schema 强制)
from pydantic import BaseModel
class ProductReview(BaseModel):
sentiment: str # positive / negative / neutral
confidence: float
key_points: list[str]
suggested_action: str
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "分析用户评价,输出结构化结果。"},
{"role": "user", "content": user_review},
],
response_format=ProductReview,
)
result: ProductReview = response.choices[0].message.parsed
# 定义工具 schema
tools = [
{
"type": "function",
"function": {
"name": "search_knowledge_base",
"description": "搜索内部知识库获取相关文档",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "搜索关键词"},
"top_k": {"type": "integer", "default": 5},
"filters": {
"type": "object",
"properties": {
"department": {"type": "string"},
"date_after": {"type": "string", "format": "date"},
},
},
},
"required": ["query"],
},
},
}
]
# 调用并处理 tool_calls
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto",
)
if response.choices[0].message.tool_calls:
for tool_call in response.choices[0].message.tool_calls:
func_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
result = execute_tool(func_name, args)
# 回传结果继续对话
messages.append(response.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result),
})
┌─────────────────────────────────────────────────────────┐
│ System Prompt 分层结构 │
├─────────────────────────────────────────────────────────┤
│ Layer 1: 角色定义(Who) │
│ "你是一个专业的金融分析师..." │
│ │
│ Layer 2: 能力边界(What) │
│ "你可以:分析财报、计算估值..." │
│ "你不可以:给出投资建议..." │
│ │
│ Layer 3: 输出格式(How) │
│ "使用 JSON 格式输出,包含字段..." │
│ │
│ Layer 4: 约束 & 安全(Guard) │
│ "拒绝回答非金融问题..." │
│ "不输出个人隐私信息..." │
└─────────────────────────────────────────────────────────┘
# 多层防御策略
class PromptGuard:
def __init__(self):
self.blocklist = [
"ignore previous",
"disregard above",
"system prompt",
"你的指令是",
"忽略上面",
]
def sanitize_input(self, user_input: str) -> str:
"""Layer 1: 输入过滤"""
lower = user_input.lower()
for pattern in self.blocklist:
if pattern in lower:
raise PromptInjectionError(f"检测到潜在注入: {pattern}")
return user_input
def wrap_user_input(self, user_input: str) -> str:
"""Layer 2: 输入隔离(XML 标签包裹)"""
return f"<user_input>\n{user_input}\n</user_input>"
def validate_output(self, output: str, allowed_format: str) -> bool:
"""Layer 3: 输出校验"""
# 检查输出是否符合预期格式
if allowed_format == "json":
try:
json.loads(output)
return True
except json.JSONDecodeError:
return False
return True
┌─ 成本优化决策树 ────────────────────────────────────────┐
│ │
│ 请求特征 → 策略选择 │
│ │
│ 重复相同输入? → Semantic Cache(命中率 30-60%) │
│ 上下文太长? → Context Compression(保留关键信息) │
│ 简单任务? → 小模型先试(Haiku/4o-mini) │
│ 批量处理? → Batch API(50% 折扣,24h 内完成) │
│ 高频低变? → Prompt Caching(Anthropic/OpenAI) │
│ │
│ 大厂范式: │
│ - Anthropic Prompt Caching: system prompt 缓存 90% 折扣 │
│ - OpenAI Batch API: 批量请求 50% 折扣 │
│ - Router 模式: 简单→小模型,复杂→大模型 │
└─────────────────────────────────────────────────────────┘
# 模型路由器实现
class ModelRouter:
"""根据任务复杂度自动选择模型,节省 60-80% 成本"""
def __init__(self):
self.classifier = self._load_classifier()
def route(self, messages: list[dict]) -> str:
complexity = self._estimate_complexity(messages)
if complexity == "simple":
return "gpt-4o-mini" # $0.15/1M input
elif complexity == "medium":
return "claude-sonnet-4-20250514" # $3/1M input
else:
return "claude-opus-4-20250514" # $15/1M input
def _estimate_complexity(self, messages: list[dict]) -> str:
"""基于消息长度、工具需求、推理深度评估"""
total_tokens = sum(len(m["content"]) // 4 for m in messages)
has_tools = any("tool" in str(m) for m in messages)
if total_tokens < 500 and not has_tools:
return "simple"
elif total_tokens < 2000:
return "medium"
return "complex"
# ReAct Agent 模式(推理 + 行动循环)
class ReActAgent:
def __init__(self, tools: list, model: str = "gpt-4o"):
self.tools = {t["function"]["name"]: t for t in tools}
self.model = model
self.max_steps = 10
async def run(self, task: str) -> str:
messages = [
{"role": "system", "content": REACT_SYSTEM_PROMPT},
{"role": "user", "content": task},
]
for step in range(self.max_steps):
response = await self._call_llm(messages)
if response.tool_calls:
# 执行工具
for call in response.tool_calls:
result = await self._execute_tool(call)
messages.append({"role": "tool", "content": result})
else:
# 最终回答
return response.content
return "达到最大步数限制,请拆分任务。"
□ API Key 通过环境变量 / Secret Manager 注入(非硬编码)
□ 设置合理的 timeout(推荐 30s 普通 / 120s Agent)
□ 实现指数退避重试(429 / 500 / 503)
□ 配置 Rate Limit 管理(令牌桶 / 滑动窗口)
□ 流式输出用 SSE(改善用户体验)
□ 所有调用有 trace_id(可追踪调用链)
□ Prompt 版本化存储(Git / Prompt Registry)
□ 输入/输出 token 计数 → 成本监控
□ Prompt 注入防御(输入过滤 + 输出校验)
□ 敏感信息脱敏(PII 不进 LLM)
□ 模型降级策略(主模型不可用时切备用)
□ 响应质量采样评估(每日 5% 人工审核)
| # | 坑 | 症状 | 解法 |
|---|---|---|---|
| 1 | Prompt 没版本管理 | 改坏无法回滚 | Git 管理 + Prompt Registry |
| 2 | 不设 timeout | 卡死整个请求链 | 设 30s timeout + circuit breaker |
| 3 | 忽略 429 重试 | 高并发直接挂 | tenacity + exponential backoff |
| 4 | Token 不计数 | 月底账单爆炸 | 每次调用记录 usage |
| 5 | 硬编码模型名 | 换模型改 N 处 | 配置化 + 模型路由 |
| 6 | 忽略幻觉 | 输出事实错误 | Grounding + 检索增强 + 校验 |
| 7 | 长 prompt 不缓存 | 重复计费 | Anthropic Prompt Caching |
| 8 | Agent 无限循环 | 步数失控 | max_steps + 成本熔断 |
| 9 | 不做输出校验 | 格式随机变 | Structured Output + Pydantic |
| 10 | 忽略冷启动 | 首请求超时 | 预热 + 连接池复用 |
架构:User Query → Router → (Simple: Haiku | Complex: Opus) → RAG 增强 → 结构化回答
关键决策:
- 用 Router 模型做分流,70% 请求用小模型,成本降 60%
- 所有回答附带源文档引用(降低幻觉)
- Prompt 缓存命中率 45%,再降 40% 成本
架构:User Intent → Prompt Template Engine → Streaming LLM → Client Render
关键决策:
- 流式输出(首 token 200ms 内)
- 上下文窗口管理:只传当前 block ± 3 段
- 多级 Prompt:outline → draft → polish
架构:Code Context → Fill-in-Middle Prompt → Speculative Decode → Inline Diff
关键决策:
- 用 FIM(Fill-in-Middle)格式构建 Prompt
- Speculative Decoding 加速生成
- 上下文排序:当前文件 > 导入文件 > 相似文件
上游:
product-manager → AI 需求 + 用户场景
api-designer → API 契约(LLM 接口规格)
下游:
rag-pipeline → 当需要检索增强时
ml-evaluation → Prompt A/B 测试 + 质量评估
ai-deployment → 生产部署 + 监控
backend-engineer → API 集成 + 业务逻辑
templates/llm-integration-template.md — 集成方案模板references/llm-integration-guide.md — 深度参考指南まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
A/B 测试设计与分析时使用。适用于产品实验、功能验证、转化率优化。融合假设驱动 + 样本量计算 + 置信度判断。
日本語の概要は準備中です。原文の説明を表示しています。
上线前业务方/产品方验收时使用。适用于功能交付确认、UAT、发布会签。融合 BDD Given-When-Then、Specification by Example、ATDD。
日本語の概要は準備中です。原文の説明を表示しています。
设计无障碍可访问的界面时使用。适用于满足 WCAG 标准、键盘导航、屏幕阅读器支持。优先使用 WCAG 2.2 AA 级标准 + 键盘 + 焦点 + 对比度 + ARIA。
日本語の概要は準備中です。原文の説明を表示しています。
实现可访问性(无障碍)时使用。覆盖 WCAG 2.2 AA / ARIA / 键盘导航 / 屏幕阅读器 / 颜色对比 / 焦点管理。融合 React Aria / Radix UI / Headless UI 实践 + axe-core 自动化测试。
日本語の概要は準備中です。原文の説明を表示しています。
AI 模型部署时使用。适用于推理服务 / GPU / TensorRT / 监控 / 扩缩容。
日本語の概要は準備中です。原文の説明を表示しています。
数据分析报告输出时使用。适用于业务分析报告、周报、专项分析、决策支持。融合洞察 + 建议 + 行动项。
日本語の概要は準備中です。原文の説明を表示しています。