TypeScript LangChain中loadQAChain传自定义Prompt报Invalid _type错误
解决思路
1. 匹配自定义Prompt与链类型的变量要求
loadQAChain支持stuff、map_reduce、refine等不同链类型,每种类型对Prompt的变量有固定要求:
- 若使用默认的
stuff链,Prompt必须包含{context}和{question}占位符; - 若用
map_reduce或refine链,需对应调整Prompt变量(比如map_reduce会用到{text}变量处理分块内容)。
确保你的QA_PROMPT变量完全匹配所使用链类型的要求。
2. 规范Prompt的构造流程
用PromptTemplate构造自定义Prompt时,需检查两点:
- 模板字符串的占位符是否用
{}正确包裹,无语法错误; - 构造时是否通过
fromTemplate或手动声明inputVariables,确保所有占位符都被标记为输入变量。
示例正确构造方式:
import { PromptTemplate } from "langchain/prompts"; const QA_PROMPT = PromptTemplate.fromTemplate(` 使用以下上下文回答问题: {context} 问题:{question} 请给出准确回答: `);
3. 适配LangChain版本的参数格式
不同版本的loadQAChain对参数结构要求可能不同:
- 显式指定链类型并传入Prompt,避免隐式匹配错误:
const chain = loadQAChain(model, { type: "stuff", prompt: QA_PROMPT, });
- 若使用较新版本LangChain,可改用
createStuffDocumentsChain等细分链创建函数,这类函数对Prompt的要求更明确,兼容性更好。
4. 排查Prompt的序列化问题
Next.js API路由中,若Prompt对象未正确序列化,会丢失LangChain标识字段_type:
- 确保链的创建逻辑在服务端直接执行,Prompt在服务端构造,而非从客户端传递序列化后的对象;
- 若必须传递Prompt,需使用LangChain的
serialize和deserialize工具处理对象。
5. 调试验证Prompt结构
在调用loadQAChain前,打印QA_PROMPT的完整结构,检查_type字段是否存在(正常应为"prompt")。若缺失,说明Prompt构造不规范,需重新构造合法的Prompt对象。
内容的提问来源于stack exchange,提问作者csrf_akkademi
相关产品推荐
相关产品推荐

