jas*_*san 6 chatbot next.js openai-api langchain pinecone
我正在创建一个文本文档 QA 聊天机器人,我使用Langchainjs和OpenAI LLM 来创建嵌入,并使用 Chat 和Pinecone作为我的矢量存储。
成功上传嵌入并在松果上创建索引后。我正在使用 Next JS 应用程序与 OpenAI 和 Pinecone 进行通信。
我的应用程序的当前结构如下所示:
1:前端 -> 用户输入 aquestion并对 NEXT js 服务器 API 路由进行 POST 调用/ask
2:服务器功能如下所示:
const vectorStore = await PineconeStore.fromExistingIndex(
new OpenAIEmbeddings(),
{ pineconeIndex })
const model = new ChatOpenAI({ temperature: 0.5, modelName: 'gpt-3.5-turbo' })
const memory = new ConversationSummaryMemory({
memoryKey: 'chat_history',
llm: new ChatOpenAI({ modelName: 'gpt-3.5-turbo', temperature: 0 }),
})
const chain = ConversationalRetrievalQAChain.fromLLM(
model,
vectorStore.asRetriever(),
{
memory,
}
)
const result = await chain.call({
question,
})
return NextResponse.json({ data: result.text })
Run Code Online (Sandbox Code Playgroud)
问题:聊天机器人永远无法访问任何历史记录,因为内存始终只存储最新的消息。
console.log('memory:', await memory.loadMemoryVariables({}))
Run Code Online (Sandbox Code Playgroud)
我也尝试过BufferMemory同样的问题,内存缓冲区只有刚刚询问的消息,如果新查询进入缓冲区将被清除,并且新查询是内存中唯一的消息。
我可能不清楚如何正确存储历史记录,以便调用
const result = await chain.call({question,})可以访问以前的信息
更新:我已经成功地将 Upstash Redis 支持的聊天内存与 langchain 结合使用,但是仍然好奇是否可以使用用户浏览器存储消息?
我正在使用与您相同的堆栈(Next.js、Pinecone、Langchain ConversationalRetrievalQAChain),并且我与这个确切的问题斗争了一段时间。
最终我求助于下面的“黑客”,它确实有效,基本上捕获了messages我将其推入提示符末尾的数组中的历史记录。据我所知,这与 LangChain 的“内存”组件的工作原理并没有太大不同,因此我并不觉得这样做很糟糕。
这是我的主处理函数的精简版本。记下以以下开头的行queryText+='\nIf necessary ...
export async function POST(req: Request) {
const { messages } = await req.json();
let queryText = messages[messages.length - 1].content;
queryText+='\nIf necessary, utilize the below chat history as additional context:'+JSON.stringify(messages);
const chain = ConversationalRetrievalQAChain.fromLLM(
streamingModel,
vectorStore.asRetriever(),
{
returnSourceDocuments: true,
questionGeneratorChainOptions: {
llm: nonStreamingModel,
},
}
const { stream, handlers } = LangChainStream();
chain.call({ question: queryText }, [handlers]).catch(console.error)
return new StreamingTextResponse(stream);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2451 次 |
| 最近记录: |