复习总结:把之前的所有 prompt 套路封装成可切换模板的 ask 函数

整理自 2026-07-20 学习记录。


一、W2 套路全景(复习用,大白话)

W2 学"怎么跟 AI 说话它才答得对"(Prompt 工程),从简单到高级:

|---------------|------------------------|----------------|
| 套路 | 干啥 | 类比 |
| ① 身份锁 | 先告诉模型你是谁、按啥格式答,防乱答/防注入 | 发岗位说明书 |
| ② few-shot 示范 | 给几个"示例对"让它照葫芦画瓢 | 照葫芦画瓢 |
| ③ CoT 一步步思考 | 命令它"请一步步思考",过程写出来才对 | 考试写步骤 |
| ④ 自我批判/一致性 | 写完了自己验算 / 问5次取多数冲掉错误 | 自己检查 / 找5人投票 |
| ⑤ ReAct 边想边做 | 思考→行动→观察循环 | 先想查啥→去查→看结果→再想 |
| ⑥ 模板库 | 把每套提示词存成命名变量,换任务只改一处 | 常用话术存快捷回复 |


复制代码
import requests
API_KEY = "你的key"
url = "https://open.bigmodel.cn/api/paas/v4/chat/completions"
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

system_prompt = """【Role】... """
data = {
    "model": "glm-4-flash",
    "messages": [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": "..."},
    ]
}
resp = requests.post(url, headers=headers, json=data)
print(resp.json()["choices"][0]["message"]["content"])

few-shot 范例就放在 system 之后、真实 user 之前,交替 user/assistant(占位空壳填好后的样子)。


三、模板库 = 把 system_prompt 拆成多份变量(平铺版,不封装也行)

复制代码
system_classify = """【Role】分类器
【Task】判断评论情感
【Format】只输出 正面/负面/中性"""
system_cot = """【Role】数学助教
【Task】解应用题
【Format】思考:...
答案:...(一步一步写)"""

system_prompt = system_classify   # 换场景就改这一行
# 下面发送骨架一字不变 ...

模板库对你 = 几个 system_xxx 变量 + 切换时改一行。没有函数、没有字典也能用。


四、函数封装 ask(分三层)

层 1:只封装"发送并取回复"

复制代码
def ask(question):
    data = {
        "model": "glm-4-flash",
        "messages": [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": question},
        ]
    }
    resp = requests.post(url, headers=headers, json=data)
    return resp.json()["choices"][0]["message"]["content"]

print(ask("味道不错"))   # "味道不错"作为 question 传进去
  • def 定义函数;question 是形参,接收外部传入的值;return 把结果交出来。
  • ⚠️ ask("味道不错") 双引号里是传进去的问题 ,不是输出;真正输出是 return 回来的模型回答,靠 print 显示。

层 2:模板也变成参数

复制代码
def ask(question, sys_prompt):
    data = {
        "model": "glm-4-flash",
        "messages": [
            {"role": "system", "content": sys_prompt},   # 用传进来的模板
            {"role": "user", "content": question},
        ]
    }
    resp = requests.post(url, headers=headers, json=data)
    return resp.json()["choices"][0]["message"]["content"]

print(ask("味道不错", system_classify))
print(ask("小明爸38岁,小明比爸小30岁,小明几岁?", system_cot))
  • sys_prompt空槽 ,从外部 system_classify/system_cot 递进去,函数内部不写死任何模板、没有字典

层 3:few-shot 范例做成可选参数

复制代码
def ask(question, sys_prompt, shots=None):
    messages = [{"role": "system", "content": sys_prompt}]
    if shots:                                  # 只有传了范例才拼
        for role, txt in shots:
            messages.append({"role": role, "content": txt})
    messages.append({"role": "user", "content": question})
    data = {"model": "glm-4-flash", "messages": messages}
    resp = requests.post(url, headers=headers, json=data)
    return resp.json()["choices"][0]["message"]["content"]

# 不用范例
print(ask("小明爸38岁,小明比爸小30岁,小明几岁?", system_cot))

# 用范例:shots 里放示例对(user 问 / assistant 答 交替)
shots = [("user", "苹果是水果吗"), ("assistant", "是,水果")]
print(ask("橘子是水果吗", system_cot, shots))
  • shots=None:默认没范例;if shots: 只有传了才拼;shots 每项 (role, txt) 循环变成 {"role":角色,"content":文本}
  • 不传 shots 写 ask(问题, 模板) 即可,因为 shots 有默认值 None

五、今日错误(复盘用)

  1. 传进去 vs 输出 :调用括号里的是"传入的问题",return+print 才是"输出答案"。
  2. sys_prompt 不是写死/不是字典 :是空槽,从外部递进去;早期 D6 用过 TEMPLATES 字典,后为好记已改回平铺变量。
  3. 模板库不强制函数 :平铺 system_xxx 变量 + 改一行 system_prompt 也能用,函数只是省重复。
相关推荐
我的xiaodoujiao6 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099676 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing7 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉8 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀8 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
你驴我8 小时前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
AC赳赳老秦10 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
huangdong_11 小时前
电商图片下载工具横向对比深度评测:固乔、FATKUN、图快、当图、淘蛙、存图宝七款工具全面解析
python
满怀冰雪11 小时前
04-Paddle Tensor 基础:形状、数据类型、广播与索引
python·深度学习·神经网络·paddle