Потоковая передача ответа с помощью 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;
            }
          }
        ]

      });
Другие вопросы по тегам