本页还没有译文
本页 7 段还没译成日本語,下面显示的是英文原文。Repeated assistant messages in useChat
还没翻译译自英文(ai-sdk.dev)本页 7 段都还没译
Issue
When using useChat with streamText on the server, the assistant's messages appear duplicated in the UI - showing both the previous message and the new message, or showing the same message multiple times. This can occur when using tool calls or complex message flows.
// Server-side code that may experience assistant message duplication on the client
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: 'openai/gpt-6-luna',
messages: await convertToModelMessages(messages),
tools: {
weather: {
description: 'Get the weather for a location',
inputSchema: z.object({
location: z.string(),
}),
execute: async ({ location }) => {
return { temperature: 72, condition: 'sunny' };
},
},
},
});
return createUIMessageStreamResponse({
stream: toUIMessageStream({ stream: result.stream }),
});
}Background
The duplication occurs because UI message streams generate new message IDs for each new message.
Solution
Pass the original messages array to toUIMessageStream using the originalMessages option. By passing originalMessages, the helper can reuse existing message IDs instead of generating new ones, ensuring the client properly updates existing messages rather than creating duplicates.
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: 'openai/gpt-6-luna',
messages: await convertToModelMessages(messages),
tools: {
weather: {
description: 'Get the weather for a location',
inputSchema: z.object({
location: z.string(),
}),
execute: async ({ location }) => {
return { temperature: 72, condition: 'sunny' };
},
},
},
});
return createUIMessageStreamResponse({
stream: toUIMessageStream({
stream: result.stream,
originalMessages: messages, // Pass the original messages here
generateMessageId: generateId,
onEnd: ({ messages }) => {
saveChat({ id, messages });
},
}),
});
}AI 翻译查看英文原文