理论部分
提示词(Prompt)并不是“对着模型说两句就行”,它更像是我们写给模型的一份需求说明书:要它做什么、用什么身份做、输出长什么样。
在大模型应用开发里,提示词的价值主要体现在两点:
- 让输出更稳定:减少“同一个问题每次回答都不一样”的漂移
- 让输出更可用:从“能看懂的自然语言”变成“能直接拿来用的结果”
写提示词时,最常用、也最有效的一套结构是:
- 角色(System Prompt):设定模型扮演的身份、风格与边界
- 任务(User Prompt):描述我们要它完成的任务
- 输出要求:规定输出格式、长度、风格、是否要分点、是否要加示例
从接口角度看,system和user是最常用的两类消息:
system:决定“怎么说话、按什么规则做事”user:决定“要做什么事”
当我们觉得模型“很聪明但不听话”,通常不是模型不行,而是我们给的约束不够明确。
实践部分
本案例做什么
做一个“风格化文案生成器”,输入一个主题,再选择一种写作风格,让模型输出对应风格的文案。这个案例的重点不是文案本身,而是让我们直观看到:
- 同一个任务,只要换一个
system角色设定,输出就会发生明显变化 system适合放“长期稳定的规则/风格”user适合放“每次变化的输入(主题)”
主要代码
本篇直接使用项目脚本:src/2.1_prompt_demo.py
importosfromdotenvimportload_dotenvfromopenaiimportOpenAI load_dotenv()client=OpenAI(api_key=os.getenv("ZHIPUAI_API_KEY"),base_url=os.getenv("ZHIPUAI_BASE_URL"))defgenerate_text(topic,style):""" 根据主题和风格生成文本 """# 1. 定义不同风格的 System Prompt (角色设定)styles={"xiaohongshu":"""你是一个小红书爆款文案博主。 请按照以下格式写一段文案: 1. 标题要吸引人,多用emoji(✨💖🍓)。 2. 正文要口语化,多用“家人们”、“绝绝子”。 3. 最后加上相关的标签(hashtags)。""","luxun":"""你模仿鲁迅先生的笔风。 1. 多用“大约”、“我想”、“是不行的”等句式。 2. 语气要深沉、犀利,带一点批判性。 3. 不要用现代网络用语。""","elon":"""You are Elon Musk. 1. Tweet style, short and punchy. 2. Talk about Mars, rockets, crypto, or future tech. 3. Use words like "First principles", "Orders of magnitude". 4. End with a bold prediction."""}system_prompt=styles.get(style)# 如果用户选了不存在的风格,默认用通用助手ifnotsystem_prompt:system_prompt="你是一个有用的助手。"# 2. 构造输入消息messages=[{"role":"system","content":system_prompt},{"role":"user","content":f"请以“{topic}”为主题写一段话。"}]print(f"正在生成 ({style}风格)...")response=client.chat.completions.create(model="glm-4-flash",messages=messages,temperature=0.8# 创作类任务,温度稍微高一点)returnresponse.choices[0].message.contentdefmain():print("=== ✨ 风格化文案生成器 ===")print("支持风格:xiaohongshu (小红书), luxun (鲁迅), elon (马斯克)")whileTrue:topic=input("\n请输入主题 (输入 q 退出): ")iftopic=='q':breakstyle=input("请输入风格 (xiaohongshu/luxun/elon): ")try:result=generate_text(topic,style)print("\n"+"="*20+" 生成结果 "+"="*20)print(result)print("="*50)exceptExceptionase:print(f"出错啦:{e}")if__name__=="__main__":main()运行方式
在项目根目录执行:
python3 src/2.1_prompt_demo.py运行结果示例
运行后会看到一个交互式程序,输入主题与风格即可生成结果,例如:
=== ✨ 风格化文案生成器 === 支持风格:xiaohongshu (小红书), luxun (鲁迅), elon (马斯克) 请输入主题 (输入 q 退出): 番茄炒蛋 请输入风格 (xiaohongshu/luxun/elon): xiaohongshu 正在生成 (xiaohongshu 风格)... ==================== 生成结果 ==================== ... ==================================================建议我们用同一个主题分别测试三种风格,会明显感受到system角色设定对输出的影响。
总结
这一篇我们掌握了提示词工程的“最小可用方法”:通过System Prompt(角色/规则)+ User Prompt(任务/输入)的组合,让模型输出从“随缘发挥”变成“可控生成”。