0

0

Python Prompt 工程的结构化模板实践

舞夢輝影

舞夢輝影

发布时间:2026-02-24 14:53:02

|

956人浏览过

|

来源于php中文网

原创

直接拼字符串会出错,因模型对空格、换行、分隔符极度敏感,易混淆指令边界、破坏json结构、无法适配不同模型的token要求。

python prompt 工程的结构化模板实践

为什么 prompt 直接拼字符串会出错? Python 里把 prompt 当普通字符串拼接,看似省事,实则埋雷。模型对空格、换行、分隔符极度敏感,"用户说:" + user_input + "请回答:" 这种写法会让模型混淆指令边界,尤其在多轮或含 JSON 的场景下,容易漏掉关键结构。
  • 模型不是人,不会“理解上下文”,它只认 token 序列;少一个 \n 或多一个空格,可能让 system 角色失效
  • 不同模型对分隔符要求不同:llama-3 偏好 user,而 qwenuser,硬拼字符串根本没法适配
  • 拼接时容易忽略转义——比如 user_input"\n" 或双引号,不处理就破坏 JSON 格式

string.Template 或 f-string 配合预清洗更稳:

from string import Template<br>template = Template("你是一个助手。\n用户输入:$input\n请用中文回答。")<br>prompt = template.substitute(input=user_input.strip().replace("\n", " "))

怎么让 system 指令真正生效? 很多同学加了 system 字段但模型还是乱答,问题不在模型,而在模板没对齐它的 tokenizer 行为。
  • system 内容必须出现在 prompt 最开头,且不能被后续的 user 分隔符覆盖(比如误写成 "[INST] >...)
  • OpenAI API 要求 messages 列表中第一个是 {"role": "system", "content": ...};但本地 transformers 加载的 llama 模型根本不认这个字段,得靠 tokenizer 自带的 apply_chat_template
  • 有些模型(如 phi-3)会忽略过长的 system 提示,超过 64 token 就开始降权,建议控制在 30 字以内

检查方式很简单:打印 tokenizer.encode(prompt),确认 system 对应的 token 是否真实出现在输出数组最前端。

apply_chat_template 为什么返回空或报错? 这是 Hugging Face 生态里最常卡住的点——调用 tokenizer.apply_chat_template 却返回空字符串或抛 KeyError: 'messages'
  • 必须传入标准格式的 messages 列表,不是单个字符串:[{"role": "system", "content": "..."}, {"role": "user", "content": "..."}]
  • 模型没有内置 chat template 时,该方法会静默失败(返回空),可用 tokenizer.chat_template 查看是否为 None
  • 使用 add_generation_prompt=True 才会补上模型期待的起始 token(比如 assistant),漏掉它,模型就不知道该生成什么

常见修复:

if tokenizer.chat_template is None:<br>  tokenizer.chat_template = "{% for message in messages %}{{ message['role'] }}: {{ message['content'] }}{% endfor %}"

MallWWI新模式返利商城系统
MallWWI新模式返利商城系统

MallWWI新模式返利商城系统基于成熟的飞蛙商城系统程序框架,支持多数据库配合,精美的界面模板,人性化的操作体验,完备的订单流程,丰富的促销形式,适合搭建稳定、高效的电子商务平台。创造性的完美整合B2B\B2C\B2S\C2B\C2C\P2C\O2O\M2C\B2F等模式,引领“互联网+”理念,实现商家联盟体系下的线上线下全新整合销售方式,独创最流行的分红权返利与排队返钱卡功能。安全、稳定、结构

下载

JSON 输出不稳定?别硬 parse,用 response_format 参数 想让模型返回合法 JSON,很多人写 prompt 里强调“只返回 JSON,不要解释”,结果还是混入 Markdown 或自然语言。这不是模型不听话,是没用对机制。
  • OpenAI API 的 response_format={"type": "json_object"} 会强制模型走 JSON 模式,底层启用 grammar-guided decoding,比任何 prompt 描述都管用
  • transformers 生态暂不原生支持,但可通过 llama.cpp-ngllitgptjson_schema 实现类似效果
  • 硬 parse 返回文本风险极高:json.loads(response) 遇到单引号、尾逗号、注释就崩,而模型真会这么干

如果必须手动解析,至少先用正则提取 json 块:

import re<br>match = re.search(r"<code>json\n(.*?)\n</code>", response, re.DOTALL)<br>data = json.loads(match.group(1)) if match else {}

立即学习Python免费学习笔记(深入)”;

事情说清了就结束。真正麻烦的从来不是写模板,而是每次换模型都要重新校验 token 边界和分隔符行为——这点没人替你记,只能自己存一份 model_name → chat_template → sample_input → encoded_ids 对照表。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

448

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

323

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6435

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

838

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1087

2023.12.21

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

1

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号