Потоковая передача ответа с помощью LangChain в Javascript
Я пишу небольшое приложение на JavaScript, используя библиотеку LangChain. У меня есть следующий фрагмент:
/* LangChain Imports */
import { OpenAI } from "langchain/llms/openai";
import { BufferMemory } from "langchain/memory";
import { ConversationChain } from "langchain/chains";
// ========================================================================================= //
// ============= Use LangChain to send request to OpenAi API =============================== //
// ========================================================================================= //
const openAILLMOptions = {
modelName: chatModel.value,
openAIApiKey: decryptedString,
temperature: parseFloat(temperatureValue.value),
topP: parseFloat(topP.value),
maxTokens: parseInt(maxTokens.value),
stop: stopSequences.value.length > 0 ? stopSequences.value : null,
streaming: true,
};
const model = new OpenAI(openAILLMOptions);
const memory = new BufferMemory();
const chain = new ConversationChain({ llm: model, memory: memory });
try {
const response = await chain.call({ input: content.value, signal: signal }, undefined,
[
{
handleLLMNewToken(token) {
process.stdout.write(token);
},
},
]
);
// handle the response
}
Это не работает (пробовал использовать токен как через машинописный текст, так и без набора текста). Я просматривал различные форумы, и они либо реализуют потоковую передачу с помощью Python, либо их решение не имеет отношения к этой проблеме. Итак, подведем итог: я могу успешно получить ответ от OpenAI через API-вызов LangChain ConversationChain(), но не могу передать ответ в потоковом режиме. Любые рекомендации или решения приветствуются.
1 ответ
Для справки, вот как у меня работает потоковая передача:
const openAILLMOptions = {
modelName: chatModel.value,
cache: true,
openAIApiKey: openAIDecryptedString,
temperature: parseFloat(temperatureValue.value),
topP: parseFloat(topP.value),
maxTokens: parseInt(maxTokens.value),
stop: stopSequences.value.length > 0 ? stopSequences.value : null,
streaming: true,
verbose: true,
};
const chat = new ChatOpenAI(openAILLMOptions);
const chatPrompt = ChatPromptTemplate.fromMessages([
[
"system",
systemPrompt.value,
],
new MessagesPlaceholder("history"),
["human", content.value],
]);
const chain = new ConversationChain({
memory: new BufferMemory({ returnMessages: true, memoryKey: "history" }),
prompt: chatPrompt,
llm: chat,
});
await chain.call({
input: content.value,
signal: signal,
callbacks: [
{
handleLLMNewToken(token) {
aiResponse.value += token;
}
}
]
});