You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:17:24