PromptTemplate vs JSON花括号:一场变量解析的战争
导航收藏不迷路—制造业数据与AI践行者老蒋的技术博客全系列文章汇总持续更新文章摘要在LangChain的PromptTemplate中嵌入JSON示例时{line_name: 交互屏组装A线}中的花括号被误解析为模板变量触发INVALID_PROMPT_INPUT错误。本文深入剖析PromptTemplate的变量解析机制揭示{}语法与JSON格式的冲突本质并提供“双花括号转义”与“变量占位符隔离”的解决方案。适用于所有使用LangChain PromptTemplate进行提示词工程的Python项目。问题现象兄弟们前面几篇排坑笔记你们也看了我们搞定了导入链污染、搞定了版本碎片化、搞定了中文括号、搞定了Agent的嵌套JSON。我本以为可以消停一会儿了。然后我继续跑Agent测试输入计算交互屏组装A线在2026-07-12的OEE结果Agent还没开始思考直接给我弹了个大红叉❌ 错误: Input to PromptTemplate is missing variables {\line_name\}. Expected: [\line_name\, \agent_scratchpad\, \input\] Received: [\input\, \intermediate_steps\, \agent_scratchpad\] Note: if you intended {line_name} to be part of the string and not a variable, please escape it with double curly braces like: \{{line_name}}\.我当时的第一反应还是这不科学啊......我只是在Prompt里写了一个JSON示例想告诉Agent应该怎么传参数。LangChain凭什么把我的示例JSON里的花括号当成变量名而且报错信息里那个Note——它明明知道问题在哪为什么不自己处理非要让我手动去改根因分析说实话这个问题的报错信息其实已经把答案写在脸上了——就是那一行Note。但我当时没仔细看还以为是Prompt写错了改了半天格式绕了一大圈才回到这个提示上。第一层PromptTemplate的“占位符”机制LangChain的PromptTemplate有一个核心设计用{变量名}来表示需要动态填充的位置。比如你写template 你好{name}今天是{date} prompt PromptTemplate.from_template(template) prompt.format(name老蒋, date2026-07-20) # 输出你好老蒋今天是2026-07-20这是它的正常工作方式——{name}和{date}是变量占位符运行时会被替换成实际值。第二层JSON的花括号撞上了占位符语法问题出在当我在Prompt里写了一个JSON示例告诉Agent应该怎么调用工具时template ... Action Input: {line_name: 交互屏组装A线, date: 2026-07-12} ... PromptTemplate在解析这个模板时看到{line_name心里想的是“哦这里有一个{开始的花括号后面跟着line_name这是一个变量名。我要找它的右括号}来闭合。但是等一下怎么一直匹配到JSON结束都没有找到不管了先记下来需要用户提供line_name这个变量。”于是它就认为line_name是一个需要用户输入的变量名要求你提供它——但你根本没想用它当变量它只是JSON示例里的一段文本啊说白了就是PromptTemplate只认识{}是占位符它不管你的{}里面写的是什么。只要是{}它就当变量处理。第三层为什么报错信息明明提示了却不自动处理这个是最气人的。报错信息里那句Note写得清清楚楚Note: if you intended {line_name} to be part of the string and not a variable, please escape it with double curly braces like: {{line_name}}.它知道问题在哪也知道怎么解决但它就是不做。非要你手动去把花括号改成双层的。这就像你去餐馆点菜服务员跟你说“先生您的菜里有辣椒如果您不能吃辣可以自己把辣椒挑出来。”——你心里想的是你不应该帮我提醒厨房别放辣椒吗解决方案别慌三步搞定它。第一步找到你的Prompt模板打开common/base_agent_builder.py找到_get_prompt_template方法。在方法的字符串里你一定写了类似这样的JSON示例def _get_prompt_template(self) - str: return 调用工具时Action Input必须是一个JSON对象。 例如{line_name: 交互屏组装A线, date: 2026-07-12} 第二步把单花括号改成双花括号核心规则JSON示例中的花括号用双层的{{和}}变量占位符保持单层的{和}。def _get_prompt_template(self) - str: return 调用工具时Action Input必须是一个JSON对象。 例如{{line_name: 交互屏组装A线, date: 2026-07-12}} 同时确保真正的变量占位符比如{input}、{agent_scratchpad}保持单花括号def _get_prompt_template(self) - str: return ... Question: {input} Thought: {agent_scratchpad} 第三步理解这张“对照表”以后就不会再搞混了你的意图写法PromptTemplate的行为显示一个JSON示例{{key: value}}当作文本原样输出{key: value}定义一个变量占位符{variable}运行时替换为实际值显示文本中的普通花括号{{和}}每个双花括号转义成一个单花括号记住这个表以后就不会再被这个坑绊倒了。经验总结怕你忘了我再啰嗦一遍PromptTemplate里JSON的花括号不是拿来给你当示例用的它是用来定义变量的。你想显示JSON就得用双花括号把它“藏”起来。落到具体操作上就是四条JSON示例全部用双花括号{key: value}→{{key: value}}。只要你的Prompt里包含JSON示例就得这么写没有例外。变量占位符保持单花括号{input}、{agent_scratchpad}、{tools}、{tool_names}这些是真正的变量必须保持单花括号不能乱改。区分规则很简单想显示给用户看的JSON → 双花括号想让LangChain替换内容的变量 → 单花括号。一句话显示的用双层替换的用单层。调试技巧如果遇到missing variables报错先把Prompt里的所有花括号过一遍。看到{就去确认这到底是JSON示例还是变量如果是JSON示例立刻改成{{。90%的情况改完就好了。说白了就是一句话花括号是LangChain的“魔法符号”你想让它显示出来就得用双层的。这就像Markdown里你想显示#号得用转义一样。系列导航本文属于《数据与AI工程排坑笔记》系列上一篇Agent的“嵌套JSON”噩梦当Action Input变成字符串套娃下一篇《Agent无记忆之痛为什么用户说了3次“交互屏组装A线”它还在问》即将发布本文问题源自智联工坊实战制造知识库工具调用Agent从零搭建OEE手册排班-CSDN博客 完整源码及深度教程见该文详细内容。建议关注收藏下次遇到INVALID_PROMPT_INPUT报错可以快速对照本文排查。互动与交流你在使用LangChain或其他模板引擎时有没有被花括号坑过欢迎在评论区吐槽咱们互相安慰一下——也让我知道多少人被标点符号折磨过的人关于作者制造业数据与AI践行者老蒋23年IT老兵。聚焦制造业数据架构与AI融合落地。全流程实战全源码开源。标签#排坑笔记#LangChain#Prompt#踩坑实录

相关新闻

从Goland看Go 逃逸分析:从“编译器魔法”到“可观察的优化”

从Goland看Go 逃逸分析:从“编译器魔法”到“可观察的优化”

在 Go 的世界里,变量放在栈上还是堆上,长期以来被视为一种“编译器魔法”。开发者被告知“你不需要知道”,直到性能问题找上门来。2026年7月,随着 JetBrains GoLand 2026.2 版本发布了一个内置的逃逸分析可视化工具,这…

2026/10/14 4:29:28 阅读更多 →
英伟达开源Agent模型:MoE架构与推理优化实战

英伟达开源Agent模型:MoE架构与推理优化实战

1. 项目概述上周五凌晨,英伟达CEO黄仁勋在自家厨房直播时突然宣布推出NVIDIA Agent系列开源模型,这个代号"吃龙虾"的项目瞬间引爆AI社区。作为长期跟踪推理模型技术演进的从业者,我第一时间拿到了代码仓库并进行了深度测试。这套包…

2026/9/29 19:12:43 阅读更多 →
Windows组件存储损坏修复指南(错误0x80073712)

Windows组件存储损坏修复指南(错误0x80073712)

1. 问题现象与初步诊断 遇到Windows系统弹出"无法完成请求的更改,组件存储已损坏"的错误提示(错误代码0x80073712),这通常意味着Windows组件存储(Component Store)出现了数据损坏。作为从业十余年…

2026/10/11 19:31:52 阅读更多 →

最新新闻

杂交瘤HAT筛选后集落稀疏怎么办?从融合效率、HGPRT到铺板密度的7项排查

杂交瘤HAT筛选后集落稀疏怎么办?从融合效率、HGPRT到铺板密度的7项排查

摘要: 杂交瘤细胞融合后进入HAT选择培养,是单克隆抗体制备流程中非常关键的一步,但实验中经常出现集落稀疏、孔内细胞逐渐消失甚至整块板无细胞存活等问题。不同失败表现背后的原因并不相同:融合后24-48小时即出现大量细胞碎片&am…

2026/10/15 3:09:36 阅读更多 →
杂交瘤HAT筛选失败怎么排查?融合、HGPRT、培养基和铺板密度完整整理

杂交瘤HAT筛选失败怎么排查?融合、HGPRT、培养基和铺板密度完整整理

摘要: 杂交瘤HAT筛选常出现集落稀疏、细胞存活差的问题,成因覆盖细胞、培养基、操作等多个环节。本文区分两个发生阶段,梳理排查要点与验证方法,为单克隆抗体制备实验提供参考。 关键词:杂交瘤、HAT筛选、促杂交瘤生长…

2026/10/15 3:09:36 阅读更多 →
免费开源 Angular 9 后台管理仪表盘模板:Start Bootstrap SB Admin Angular 技术详解

免费开源 Angular 9 后台管理仪表盘模板:Start Bootstrap SB Admin Angular 技术详解

前端文档 【免费下载链接】startbootstrap A library of free and open source Bootstrap themes and templates 项目地址: https://gitcode.com/gh_mirrors/st/startbootstrap 点击查看 免费下载 SB Admin Angular 是 Start Bootstrap 推出的首款 Angular 版本后台…

2026/10/15 3:09:36 阅读更多 →
wiliwili 终极指南:把游戏机变成全平台 B 站播放器

wiliwili 终极指南:把游戏机变成全平台 B 站播放器

wiliwili 终极指南:把游戏机变成全平台 B 站播放器 【免费下载链接】wiliwili 第三方B站客户端,目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili wiliwili 是一款专…

2026/10/15 3:09:36 阅读更多 →
Path of Building:Path of Exile 离线构建规划工具,帮你算清 DPS

Path of Building:Path of Exile 离线构建规划工具,帮你算清 DPS

Path of Building:Path of Exile 离线构建规划工具,帮你算清 DPS 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 还在对着攻略表手动算伤害&#…

2026/10/15 3:09:36 阅读更多 →
笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

1. 这不是玩具项目:笑脸与口罩识别背后的真实业务切口“笑脸识别,口罩识别”——光看标题,很多人第一反应是:这不就是个课堂Demo?调用OpenCV读个摄像头,加两行cv2.CascadeClassifier,再套个预训…

2026/10/15 3:08:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →