我使用Next.js服务器操作而不是API路由向OpenAI发出请求:lib/gpt.ts
:
export async function getAISuggestion(session: Session) {
const prompt = ...
const { stream, handlers } = LangChainStream();
chatModel.predictMessages(prompt, {callbacks: [handlers]});
return stream;
}
字符串
服务器操作调用它:actions.ts
:
export async function getSuggestion(): Promise<
ServerActionResponse<ReadableStream<Uint8Array>>
> {
try {
[...]
const stream = await GPT.getAISuggestion(session);
return { data: stream };
} catch (error) {
console.error(error);
[...]
}
}
型
我正在尝试从客户端组件调用此服务器操作:ClientComponent.tsx
:
"use client";
[...]
function foo {
[...]
const { data, error } = await getSugestion();
if (data) {
const reader = data.getReader();
const decoder = new TextDecoder();
let done = false;
let text ="";
while (!done) {
const { value, done: readerDone } = await reader.read();
console.log("reading", value);
done = readerDone;
text += decoder.decode(value);
setAiSuggestionsText(text);
}
} else {
setError(error);
}
}
型
但显然,您不能将流从服务器操作发送到客户端组件:
警告:只能将普通对象从服务器组件传递到客户端组件。不支持ReadableStream对象。{data:ReadableStream}
1条答案
按热度按时间ui7jx7zq1#
不幸的是,Next.js似乎不支持从服务器操作返回HTTP响应。如果你想返回一个响应对象,你需要使用Route-handler。