使用createRetrievalChain替代RetrievalQAChain时遇context变量错误求助
问题解决:Prompt必须包含"context"变量错误
错误原因:使用createStuffDocumentsChain时,你的Prompt模板缺少必填的**{context}**变量。createStuffDocumentsChain会自动将检索到的文档内容填充到这个变量中,模型需要结合该上下文与用户问题生成回答,缺少它就会触发报错。
修改后的关键代码片段:
// 修改Prompt模板,添加{context}变量 const prompt = PromptTemplate.fromTemplate(` 基于以下上下文回答用户的问题: {context} 用户问题:{input} `);
完整修改后的代码:
import { CSVLoader } from "langchain/document_loaders/fs/csv"; import { RecursiveCharacterTextSplitter } from "langchain/text_splitter" import { GoogleGenerativeAIEmbeddings } from "@langchain/google-genai"; import { HNSWLib } from "@langchain/community/vectorstores/hnswlib"; import { ChatGoogleGenerativeAI } from "@langchain/google-genai"; import { RetrievalQAChain } from "langchain/chains"; import { createRetrievalChain } from "langchain/chains/retrieval" import { ChatPromptTemplate, PromptTemplate } from "@langchain/core/prompts"; import { createStuffDocumentsChain } from "langchain/chains/combine_documents"; const loader = new CSVLoader("./bookmarks_table_rows.csv"); const docs = await loader.load(); const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000, chunkOverlap: 200 }) const splittedDocs = await splitter.splitDocuments(docs) const embeddings = new GoogleGenerativeAIEmbeddings({ model: "embedding-001", apiKey: KEY, }) const vectorStore = await HNSWLib.fromDocuments( splittedDocs, embeddings ); const model = new ChatGoogleGenerativeAI({ model: "gemini-1.5-flash-latest", maxOutputTokens: 2048, apiKey: KEY }); const vectorStoreRetriever = vectorStore.asRetriever() // 修改后的Prompt模板,包含context变量 const prompt = PromptTemplate.fromTemplate(` 基于以下上下文回答用户的问题: {context} 用户问题:{input} `); const combineDocsChain = await createStuffDocumentsChain({ model, prompt, }); const chain = await createRetrievalChain({ combineDocsChain, vectorStoreRetriever, }); const question = "what are all the type present in the data ?" const answer = await chain.invoke({ input: question }) console.log("ans", answer);
说明:修改后的Prompt模板加入了{context}变量,createStuffDocumentsChain会将检索到的相关文档内容填充到这里,模型就能基于上下文信息回答用户的问题,解决报错问题。
内容的提问来源于stack exchange,提问作者Abhishek MG
相关产品推荐
相关产品推荐

