AI SDK神技,让GPT-4和Claude实时同台竞技

6 阅读3分钟

cover

👀 最新、最有用的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 我拉你进群,共同交流学习~