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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:22:07