[ PROMPT_NODE_24448 ]
Workers AI 设计模式
[ SKILL_DOCUMENTATION ]
# Workers AI 开发模式
## RAG (检索增强生成)
typescript
// 1. 嵌入查询
const embedding = await env.AI.run('@cf/baai/bge-base-en-v1.5', { text: query });
// 2. 向量搜索
const results = await env.VECTORIZE.query(embedding.data[0], {
topK: 5, returnMetadata: true
});
// 3. 构建上下文
const context = results.matches.map(m => m.metadata?.text).join('nn');
// 4. 带上下文生成
const response = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', {
messages: [
{ role: 'system', content: `基于以下内容回答:nn${context}` },
{ role: 'user', content: query }
]
});
## 流式传输 (SSE)
typescript
const stream = await env.AI.run('@cf/meta/llama-3.1-8b-instruct', {
messages, stream: true
});
const { readable, writable } = new TransformStream();
const writer = writable.getWriter();
(async () => {
for await (const chunk of stream) {
await writer.write(new TextEncoder().encode(`data: ${JSON.stringify(chunk)}nn`));
}
await writer.write(new TextEncoder().encode('data: [DONE]nn'));
await writer.close();
})();
return new Response(readable, {
headers: { 'Content-Type': 'text/event-stream' }
});
## 错误处理与重试
typescript
async function runWithRetry(env, model, input, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await env.AI.run(model, input);
} catch (error) {
if (error.message?.includes('7505') && attempt setTimeout(r, Math.pow(2, attempt) * 1000));
continue;
}
throw error;
}
}
}
## 模型回退
typescript
try {
return await env.AI.run('@cf/meta/llama-3.1-70b-instruct', { messages });
} catch {
return await env.AI.run('@cf/meta/llama-3.1-8b-instruct', { messages });
}
## 提示词模式
typescript
// 系统提示词
const PROMPTS = {
json: '仅返回有效的 JSON。',
concise: '保持回答简短。',
cot: '在回答前请一步步思考。'
};
// 少样本提示 (Few-shot)
messages: [
{ role: 'system', content: '提取为 JSON' },
{ role: 'user', content: 'John 买了 3 个苹果,花费 5 美元' },
{ role: 'assistant', content: '{"name":"John","item":"apples","qty":3}' },
{ role: 'user', content: actualInput }
]
## 并行执行
typescript
const [sentiment, summary, embedding] = await Promise.all([
env.AI.run('@cf/mistral/mistral-7b-instruct-v0.1', { messages: sentimentPrompt }),
env.AI.run('@cf/m