OpenAI Assistants API 生产实践:为 SaaS 应用构建可靠的 AI 功能
大规模运行 Assistants API 的工程指南——线程管理、工具使用、文件处理和成本优化
OpenAI Assistants API 生产实践:为 SaaS 应用构建可靠的 AI 功能
大规模运行 Assistants API 的工程指南——线程管理、工具使用、文件处理和成本优化
OpenAI Assistants API 生产指南——线程生命周期管理、函数调用、文件搜索、代码解释器集成、流式响应以及 SaaS 产品的成本优化策略。
OpenAI Assistants API:生产工程指南
何时使用 Assistants API 与 Chat Completions
结论:Assistants API 用控制权换取便利性。当需要快速开发时使用它;当需要优化时切换到 Chat Completions。
架构模式:SaaS 中的 Assistants API
用户登录 → 创建/获取用户的 Thread
↓
用户消息 → 添加到 Thread → 创建 Run
↓
轮询/流式获取 Run 状态
↓
如果 requires_action → 执行工具 → 提交结果
↓
Run 完成 → 获取消息
↓
返回给用户
线程管理最佳实践
线程生命周期
javascript
// 首次会话创建线程
const thread = await openai.beta.threads.create();
await db.users.update({ threadId: thread.id }, { where: { userId } });// 后续对话复用
const { threadId } = await db.users.findOne({ where: { userId } });
线程成本管理
线程存储所有消息(每次运行时按输入令牌计费):truncation_strategy: { type: "last_messages", last_messages: 10 }函数调用(工具使用)
定义工具
javascript
const assistant = await openai.beta.assistants.create({
model: "gpt-4o",
tools: [{
type: "function",
function: {
name: "get_account_balance",
description: "获取用户账户的当前余额",
parameters: {
type: "object",
properties: {
account_id: { type: "string", description: "账户 ID" }
},
required: ["account_id"]
}
}
}]
});
处理工具调用
javascript
async function handleRun(threadId, runId) {
let run = await openai.beta.threads.runs.retrieve(threadId, runId);
while (run.status === "requires_action") {
const toolCalls = run.required_action.submit_tool_outputs.tool_calls;
const outputs = [];
for (const toolCall of toolCalls) {
if (toolCall.function.name === "get_account_balance") {
const { account_id } = JSON.parse(toolCall.function.arguments);
const balance = await db.accounts.getBalance(account_id);
outputs.push({ tool_call_id: toolCall.id, output: JSON.stringify({ balance }) });
}
}
run = await openai.beta.threads.runs.submitToolOutputs(threadId, runId, {
tool_outputs: outputs
});
}
return run;
}
流式响应
javascript
const stream = openai.beta.threads.runs.stream(threadId, {
assistant_id: assistantId
});for await (const event of stream) {
if (event.event === "thread.message.delta") {
const delta = event.data.delta.content[0]?.text?.value;
if (delta) {
res.write(data: ${JSON.stringify({ text: delta })}\n\n);
}
}
}
文件搜索(内置 RAG)
javascript
// 创建包含文档的向量存储
const vectorStore = await openai.beta.vectorStores.create({
name: "公司文档"
});await openai.beta.vectorStores.fileBatches.uploadAndPoll(
vectorStore.id,
[fs.createReadStream("handbook.pdf"), fs.createReadStream("faq.pdf")]
);
// 附加到助手
const assistant = await openai.beta.assistants.create({
tools: [{ type: "file_search" }],
tool_resources: {
file_search: { vector_store_ids: [vectorStore.id] }
}
});
成本优化
相关工具
相关教程
完整指南:利用OpenAI Assistants API的文件搜索、代码解释器和自定义工具,构建生产级AI客户支持系统
掌握 GPT-4o 的多模态特性,包括图像分析、音频转录以及用于交互式应用的全新实时流式 API
构建具有内置RAG、代码执行和函数调用的持久化AI助手
对比 DALL-E 3、Flux 和 Stable Diffusion API,用于生产环境图像生成
何时以及如何针对特定领域任务微调大语言模型
OpenAI API 模式中的成本与吞吐量权衡——跨 openai 和 python 的批处理对比