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

LangChain.js中ConversationalRetrievalQAChain自定义lang变量报错问题

解决LangChain.js中ConversationalRetrievalQAChain自定义prompt变量的问题

问题出在ConversationalRetrievalQAChain默认只认question和chat_history这两个输入变量,你在prompt里加了lang但没告诉Chain这个变量是合法输入,所以才会报「缺少输入值」的错误。按下面步骤改就能解决:

1. 用PromptTemplate定义带lang变量的模板

别直接传字符串prompt,用PromptTemplate明确指定所有输入变量,包括lang:

import { PromptTemplate } from "langchain/prompts";

// 模板里包含lang变量,同时声明所有输入变量
const customPrompt = PromptTemplate.fromTemplate(
  "请结合以下聊天历史,用{lang}回答用户问题:\n聊天历史:{chat_history}\n用户问题:{question}",
  { inputVariables: ["question", "chat_history", "lang"] }
);

2. 创建Chain时关联自定义模板并配置输入变量

需要把自定义模板传给Chain内部的QA逻辑,同时显式声明输入变量包含lang:

import { ConversationalRetrievalQAChain, RetrievalQAChain } from "langchain/chains";
import { ChatOpenAI } from "langchain/chat_models/openai";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";

// 初始化向量存储(替换成你实际的向量存储)
const vectorStore = new MemoryVectorStore(new OpenAIEmbeddings());
const llm = new ChatOpenAI({ temperature: 0 });

// 先创建带自定义prompt的QAChain
const qaChain = RetrievalQAChain.fromLLM(llm, vectorStore.asRetriever(), {
  prompt: customPrompt,
});

// 再创建ConversationalRetrievalQAChain,指定输入变量
const conversationalChain = ConversationalRetrievalQAChain.fromLLM(
  llm,
  vectorStore.asRetriever(),
  {
    qaChain: qaChain,
    inputKeys: ["question", "chat_history", "lang"],
  }
);

3. 调用Chain时传入lang参数

调用时把lang和其他参数一起传进去就行:

const response = await conversationalChain.call({
  question: "LangChain主要用来做什么?",
  chat_history: "", // 首次调用可以传空字符串
  lang: "西班牙语",
});

console.log(response.text);

这样就能实现动态传入语言参数,不会再报缺失变量的错误了。

内容的提问来源于stack exchange,提问作者MENNY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:12