文章

nextjs15使用ai sdk的一些问题

目前作者使用的版本:

"@ai-sdk/openai": "^2.0.10",
"@ai-sdk/react": "^2.0.10",
"ai": "^5.0.10",
"@modelcontextprotocol/sdk": "^1.17.2",
"next": "15.4.5",

1.streamObject 方法不支持调用工具tools

可以使用streamText 方法替换,并在配置中添加experimental_output 的属性支持,即可以流式返回了,配合前端使用useObject

前端代码

    const { object, submit } = useObject({
        api: '/api/test',
        schema: z.object({
            databases: z.array(z.string()),
        }),
    });

route.ts代码,注意⚠️一定要添加stopWhen: stepCountIs(6)

    const result = streamText({
        model: openai('gpt-4.1-mini'),
        prompt: "列出PostgresDB中所有数据库",
        tools: tools,
        stopWhen: stepCountIs(6),
        experimental_output: Output.object({
            schema: z.object({
                databases: z.array(z.string()),
            })
        }),
        onFinish: async () => {
            await mcpClient.close();
        },
        onError: async (error) => {
            console.error("mcp error:", error);
            await mcpClient.close();
        },
    });

许可协议:  CC BY 4.0