👀 最新、最有用的AI编程姿势,总来自「知识药丸」
《贾杰的AI编程秘籍》付费合集,共10篇,现已完结。30元交个朋友,学不到真东西找我退钱;)
以及我的墨问合集《100个思维碎片》,1块钱100篇,与你探讨一些有意思的话题(文末有订阅方式
写在前面
最近看到 Robin Wieruch 大神的一篇文章,讲多模型并行流式输出。
说实话,这个需求我之前也遇到过。用户问个问题,你想同时问问 GPT-4、Claude、Gemini,看谁答得好。听起来简单,做起来全是坑。
我们今天就来拆解一下。
问题在哪
传统做法是调一个模型,等结果,展示。
这有个致命的问题:你永远不知道哪个模型更适合当前问题。
GPT-4 擅长创意,Claude 擅长代码,Gemini 擅长多语言。只用一个,就像只带一把锤子去修房子。
那怎么办?同时调多个,让它们"打擂台"。
流式输出的麻烦
多模型并行不难,难的是流式。
为什么要流式?因为等十几秒才看到结果,用户早跑了。流式能让内容一个字一个字蹦出来,体验好得多。
但问题来了:多个模型同时流式输出,每个速度不一样,前端怎么处理?
这就需要点技巧了。
AI SDK 的方案
Vercel 的 AI SDK 把这事做得很优雅。
核心思路:每个模型一个独立的 Stream,前端用 React hooks 分别管理。
后端代码
`import { openai } from '@ai-sdk/openai';
import { anthropic } from '@ai-sdk/anthropic';
import { streamText } from 'ai';
export async function POST(req: Request) { const { prompt } = await req.json(); // 同时调用 const gpt4Stream = streamText({ model: openai('gpt-4'),
prompt,
}); const claudeStream = streamText({ model: anthropic('claude-3-opus'),
prompt,
}); // 返回多个流 return new Response( JSON.stringify({ gpt4: gpt4Stream.toDataStreamResponse(), claude: claudeStream.toDataStreamResponse(),
})
);
}`
就这么简单。streamText 返回流对象,我们创建多个,一起返回。
P.S. toDataStreamResponse() 会把流转成前端能直接用的格式。
前端代码
`import { useChat } from 'ai/react';
export default function MultiModelChat() { const gpt4Chat = useChat({ api: '/api/chat/gpt4' }); const claudeChat = useChat({ api: '/api/chat/claude' }); return (
GPT-4
{gpt4Chat.messages.map(m => ( <div key={m.id}>{m.content}
))}
Claude
{claudeChat.messages.map(m => ( <div key={m.id}>{m.content}
))}
);
}`
每个模型一个 useChat 实例。
它们各管各的消息列表,互不干扰。用户发消息,两个模型同时响应,内容实时更新。
这就是 React 的强大之处:状态封装在 hook 里,我们只管描述 UI。
成本问题
等等,同时调多个模型,费用不是翻倍?
没错。但有些场景值得:
对比测试。评估模型效果,这是最直观的方式。
容错机制。某个 API 挂了,其他还能工作。
高要求场景。法律、医疗这种,多模型交叉验证更可靠。
普通聊天应用?单模型够了。别为了炫技而炫技。
一个坑
实现时遇到个诡异的问题:流突然中断,内容只显示一半。
排查半天才发现:Next.js API Route 默认超时 10 秒(Vercel 上)。模型响应慢了,就被强制断开。
解决办法,调整 next.config.js:
`module.exports = { api: { responseLimit: false, bodyParser: { sizeLimit: '10mb',
},
},
};`
或者在 Vercel 项目设置里把函数超时调长(Pro 账户可以到 60 秒)。
这坑很隐蔽。本地开发不容易复现,只有生产环境才遇到。测试时一定要用真实 API,别只用 mock。
总结
多模型并行流式输出,核心就是:后端创建多个独立流,前端用多个 useChat 分别消费。
AI SDK 把复杂的流处理都封装好了,我们只管业务逻辑。想加第三个、第四个模型?多写几行代码就行。
当然,实际应用还要考虑成本、性能、错误处理。技术永远为业务服务。
推荐去看 Robin Wieruch 的原文,细节更多,代码更完整。
参考资料
Robin Wieruch - Streaming Multiple AI Models in Parallel with React.js and AI SDK
Vercel AI SDK 官方文档
坚持创作不易,求个一键三连,谢谢你~❤️
以及「AI Coding技术交流群」,联系 ayqywx 我拉你进群,共同交流学习~