本页目录
滚动式代码讲解
1
上一个示例介绍了如何从 LLM 获取结构化输出,但所有输出都是一次性生成的。
等待一小段时间后,全部输出会同时出现。
2
如果希望在输出生成时就看到内容,也就是流式传输一个对象,该怎么办?
只需把 generateObject to streamObject.
export const createRecipe = async (prompt: string) => {const { object } = await generateObject({model,schema,prompt,system:`You are helping a user create a recipe. ` +`Use British English variants of ingredient names,` +`like Coriander over Cilantro.`,});return object.recipe;};
与上一个示例相比,会看到几处变化。
首先,需要等待对象的最终结果。这里通过 await result.object.
原因是 streamObject 会在第一个数据块到达时立即返回结果,而 await result.object 可以让我们等待最终对象。
获取部分对象
如果希望访问生成过程中的部分对象,可以使用 result.partialObjectStream.
export const createRecipe = async (prompt: string) => {const result = await streamObject({model,system:`You are helping a user create a recipe. ` +`Use British English variants of ingredient names,` +`like Coriander over Cilantro.`,schemaName: "Recipe",schema,prompt,});for await (const obj of result.partialObjectStream) {console.clear();console.dir(obj, { depth: null });}const finalObject = await result.object;return finalObject.recipe;};
它是异步可迭代对象,因此可以使用 for await...of 循环,记录对象传来时的每次更新。
先清空控制台,再记录对象,就能看到它实时流入。
运行看看会得到什么输出。我们问它如何制作鹰嘴豆泥。
const recipe = await createRecipe("How to make hummus?",);
可以看到,对象内容在生成时不断传入,逐步构建成完整对象。
流的最后一个数据块包含完整对象。
想继续深入: 加入“面向真正工程师的 AI 编码”候补名单
使用场景
在实际应用中,不会只把内容记录到控制台,而是通过网络发送这些数据块。
这样用户就能实时看到对象逐步生成。与其一直等待后突然出现全部内容,显示进度总会带来更好的体验。
这就是 streamObject 函数在 AI SDK 中的作用。
登录以保存进度。