10|系统提示与对话:角色与优先级如何影响输出
本篇目标:学会给 AI “洗脑”。让它从一个“什么都懂一点的路人”,变成你专属的“资深 Python 架构师”。
一、AI 的“人格面具”
默认情况下,ChatGPT 就像一个彬彬有礼的客服。
- 你问:“Python 怎么读文件?”
- 它回:“亲,您可以使用
open()函数哦,注意要处理异常呢……”(废话很多,代码很少)。
但如果你给它戴上一个面具(Persona),它的画风会突变。
- 你设定:“你是一个暴躁的资深黑客,只给代码,不解释。”
- 你问:“Python 怎么读文件?”
- 它回:
(简洁、高效、没废话)。with open('f.txt') as f: print(f.read())
控制这个面具的开关,就叫 System Prompt(系统提示)。
二、消息的三种类型:System、User、Assistant
在 AI 的对话记录里,每一条消息都有一个“身份标签”(Role):
1. System(系统)
- 地位:最高指令(宪法)。
- 作用:定义 AI 的身份、性格、能力边界、输出格式。
- 特点:通常只发一次,在对话的最开始。用户(你)在网页版里通常看不到它,但在 API 或自定义 Agent 里,它是最重要的配置。
2. User(用户)
- 地位:具体指令(圣旨)。
- 作用:你发给它的需求、问题、代码片段。
- 特点:随着对话不断增加。
3. Assistant(助手)
- 地位:执行结果(奏折)。
- 作用:AI 回复的内容。
- 特点:它会参考 System 的设定,来回答 User 的问题。
三、为什么要写 System Prompt?
很多新手只会在 User 框里写需求,却忽略了 System。
坏处:
- 重复劳动:每次都要说“请只给我代码,不要解释”。
- 遗忘:聊久了,它忘了自己是谁。
- 不专业:它默认是“通用助手”,写代码可能不够严谨(比如忘了加类型注解)。
好处:
一旦在 System 里写好“你是一个资深 Python 工程师,必须写 Type Hints,必须写单元测试”,它就会在每一轮对话中都死死遵守这个规则,哪怕聊了 100 轮也不会忘。
四、黄金 System Prompt 骨架(可复用)
一个好的 System Prompt 应该包含以下模块:
1. Role(角色定义)
You are a senior software engineer specialized in [Python/React].
(你是一个精通 Python/React 的资深软件工程师。)
2. Goal(目标)
Your goal is to write clean, efficient, and maintainable code.
(你的目标是写出整洁、高效、可维护的代码。)
3. Constraints(约束 - 最重要!)
- Do NOT use deprecated libraries.(别用过时的库)
- Always add type hints.(必须加类型注解)
- If the solution is complex, think step-by-step.(如果问题复杂,一步步想)
- If you are unsure, ask clarifying questions.(如果不确定,先问我,别瞎猜)
4. Output Format(输出格式)
- Only return the code block, unless explanation is requested.(除非我问,否则只给代码)
- Use Markdown format.(用 Markdown 格式)
五、实战:打造你的专属“代码助手”
假设你是一个 Python 开发者,讨厌废话,喜欢 Type Hints。
请把下面这段话复制到你的 Cursor Rules 或 ChatGPT Custom Instructions 里:
# Role
You are an expert Python developer. You prioritize code quality, performance, and readability.
# Guidelines
1. **Type Hints**: All functions must have type hints (PEP 484).
2. **Docstrings**: Use Google-style docstrings for complex functions.
3. **Libraries**: Prefer `pathlib` over `os.path`, `pydantic` over raw dicts.
4. **Error Handling**: Never use bare `try-except`. Always catch specific exceptions.
5. **Brevity**: Do not explain basic concepts. Assume I know Python. Just give me the solution.
# Output Style
- If I ask for a refactor, show the `diff` or the full new code.
- If I ask for a script, include `if __name__ == "__main__":` block.
效果对比:
- 没加 System:
User: “写个读 JSON 的函数”
AI: “好的!JSON 是一种轻量级的数据交换格式……这是代码……这是解释……”(啰嗦) - 加了 System:
User: “写个读 JSON 的函数”
AI:
(直接给最佳实践代码,带类型,带异常处理,零废话。)import json from pathlib import Path from typing import Any, Dict def load_json(file_path: Path) -> Dict[str, Any]: """Loads JSON data from a file.""" try: with file_path.open('r', encoding='utf-8') as f: return json.load(f) except json.JSONDecodeError as e: raise ValueError(f"Invalid JSON in {file_path}: {e}")
本篇产出:你的通用 System Prompt 库
请保存这几段 Prompt,根据场景切换:
| 场景 | System Prompt 核心指令 |
|---|---|
| 写代码 (默认) | “你是一个资深工程师。代码必须包含类型注解、异常处理。除非我问,否则少废话。” |
| 改 Bug | “你是一个 QA 专家。请分析报错原因,给出 3 种可能的修复方案,并按可能性排序。” |
| 写文档 | “你是一个技术文档以此。请用通俗易懂的语言解释代码,多用比喻,适合初学者阅读。” |
| Code Review | “你是一个挑剔的架构师。请找出代码中的安全漏洞、性能瓶颈和坏味道(Bad Smell)。不要客气,直接指出问题。” |
下一步:我们学会了怎么让 AI “扮演角色”,也学会了怎么让它“闭嘴干活”。但有时候我们需要它输出特定的格式(比如给前端用的 JSON)。下一章我们将学习结构化输出——让 AI 不再只是陪聊,而是变成一个API 生成器。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)