📦 本文配套完整源码 + 系统提示词模板库 + 10种角色预设代码,已打包整理
👇 关注公众号「开源情报局」,回复「Agent」一键领取(含下期预告提前看)


前言:为什么同一个模型能"变成"不同的人?

你可能已经注意到了一个神奇的现象:

  • 同一个模型,有时候像个严谨的教授,有时候又像个话痨
  • 问同样的问题,回复风格可以天差地别

秘密就在系统提示词(System Prompt)。

它是你在和模型对话之前,悄悄塞给它的"人设说明书"。模型拿到说明书之后,就会按照你设定的角色来回答。

💡 系统提示词 = 给 AI 发的"入职岗位描述"

你告诉它:“你是 Python 老师”,它就循循善诱。
你告诉它:“你是代码审查员”,它就开始挑毛病。


今天这课学什么?

目标 说明
🎯 本课产出 一个可切换角色的 AI 助手脚本
🔧 核心技能 编写 System Prompt、控制模型行为
⏱ 预计耗时 15 分钟跟着操作

前置要求: 已完成 第一课 的环境搭建(Ollama + Qwen2.5:7B)

🔧 还没装好环境?关注公众号「开源情报局」回复「Agent」,领取第一课完整源码包快速上手。


第一步:理解 System Prompt 的原理

模型怎么"听"到你的指令?

大多数大模型都理解这个指令层级:

层级 名称 作用 优先级
System Prompt(系统提示词) 定义角色、语气、行为规范 ⭐⭐⭐ 最高
User Prompt(用户提示词) 用户实际提出的问题或请求 ⭐⭐
Assistant Output(输出) 模型在上述两层约束下的回答

示例:

层级 内容
① System Prompt "你是 Python 编程老师,用简单的话解释概念"
② User Prompt "什么是装饰器?"
③ Assistant Output "装饰器就像给函数穿了一件外衣..."

System Prompt 有更高的"优先级" — 它指导模型如何理解和回应用户的问题。

关键认知:行为 ≠ 智能

同一个模型,换不同的 System Prompt:

System Prompt 回复风格 本质变化?
“你是技术专家” 专业、精确、带术语 ❌ 没有
“你是小学老师” 简单、通俗、用类比 ❌ 没有
“只允许1-2句话回答” 极简、不展开 ❌ 没有

模型没变,变的是对输出的约束。 就像同一个人穿上不同的工装,干不同的活。


第二步:写你的第一个 System Prompt

先感受一下效果。下面是 3 个经典角色设定,每个都会让模型的回复产生截然不同的风格:

🎓 角色一:Python 编程老师

你是一位冷静、精准的老师,总是用简单的方式解释概念。解释技术话题时务必使用代码示例。

✍️ 角色二:像跟5岁小孩解释(ELI5)

你用简单的词语和日常类比来解释复杂主题。绝不使用未经解释的专业术语。

🔍 角色三:严格代码审查员

你是一位高级软件工程师,负责审查代码中的 bug 和安全问题。指出每一个潜在问题并给出具体的改进建议。


第三步:用代码实现(基础版)

下面是核心实现方式 — 把 System Prompt 通过 messages 参数注入到对话中。

先理解 messages 的结构

Ollama 兼容 OpenAI 的消息格式,用 messages 数组来组织一次完整的对话。每条消息有 role(角色)和 content(内容)两个字段:

role 含义 对应什么 示例
"system" 系统提示词 给模型的人设/行为规范 "你是Python老师"
"user" 用户输入 读者实际问的问题 "什么是装饰器?"
"assistant" 模型输出 模型生成的回复(多轮时用到) (不需要我们填,模型自动生成)

关键点: messages 是一个列表,顺序很重要 — system 放最前面,然后是 user 的提问。模型会按照这个顺序"阅读"所有消息后生成回复。

完整代码

把上面三种角色的 System Prompt 分别作为 role: "system" 的消息发出去,再配上同一个 user 问题:

def generate_with_role(system_prompt: str, user_input: str, model="qwen2.5:7b"):
    """
    使用 System Prompt 控制模型行为的对话函数
    """
    from openai import OpenAI
    
    client = OpenAI(
        base_url="http://localhost:11434/v1",
        api_key="ollama"
    )
    
    # 👇 核心:把角色设定放在 system 角色,用户问题放在 user 角色
    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": system_prompt},   # ← 第一步:告诉AI它是什么角色
            {"role": "user", "content": user_input}         # ← 第二步:发送用户的问题
        ],
        stream=False
    )
    
    return response.choices[0].message.content


# ====== 测试:同一问题,三种角色 ======

question = "什么是 AI Agent?"

# 角色1:编程老师
teacher_prompt = "你是一位耐心的编程老师,用简单的话解释概念。"
print("【老师模式】")
print(generate_with_role(teacher_prompt, question))
print()

# 角色2:大白话解释
eli5_prompt = "你用最简单的大白话和日常比喻来解释事物。"
print("【大白话模式】")
print(generate_with_role(eli5_prompt, question))
print()

# 角色3:极简回答
concise_prompt = "你最多用2句话回答,绝不多说。"
print("【极简模式】")
print(generate_with_role(concise_prompt, question))

运行效果对比:

模式 输出
🎓 老师模式 “AI Agent 就是一个能够自主决策和行动的人工智能程序或系统。想象一下,你有一个虚拟助手,它可以帮你完成一些任务或者解决一些问题,这就是一个简单的 AI Agent。…”
🗣 大白话模式 “AI Agent 就像是一个能自主做决定的小机器人。想象一下,你在玩电子游戏里有一个小角色,…”
⚡ 极简模式 “AI Agent是具有自主功能的智能实体,能在环境中感知并行动。”

相同的问题,相同的模型,完全不同的回复。 只是因为 messages[0] 里那条 system 角色的内容不一样。这就是 System Prompt 的力量。


🎁 进阶内容:完整项目源码 + 更多玩法

上面是基础版,让你快速理解原理。要做出真正实用的东西,你还需要:

公众号源码包中包含的内容:

内容 说明 文件
📦 完整 Agent 类封装 Agent 类,支持动态切换角色、流式输出、历史记忆管理 agent.py
🎭 10 种预设角色模板 Python老师 / 代码审查员 / 产品经理 / 翻译官 / 创意写作… roles.py
🔧 命令行交互程序 运行后可随时切换角色进行对话的完整 CLI 工具 complete_example.py
⚙️ 高级技巧:冲突指令处理 当 System Prompt 内部矛盾时,谁会赢?实验报告 技巧文档
🐛 Debug 手册 “模型忽略我的提示词怎么办?”“回复不一致怎么调?” FAQ文档
📊 System Prompt 最佳实践清单 长度控制 / 温度调节 / 格式约束的完整指南 实践指南

👇 关注公众号「开源情报局」,回复「Agent」一键获取全部资源包:


System Prompt 设计模式速查

掌握了原理之后,这里有 4 种常用设计模式,直接套用就行:

模式一:角色定义

You are a [role] who [behavior].

例:你是一个资深前端工程师,擅长发现 UI 问题并给出改进方案。

模式二:约束设置

You must [requirement]. You never [prohibition].

例:你必须用 Markdown 格式回复代码块。你绝不使用 emoji。

模式三:输出格式控制

Always respond with [format]. Use [style].

例:每次回复必须包含:1) 直接答案 2) 示例 3) 注意事项 三段式结构。

模式四:组合拳(推荐)

你是一个有帮助的技术导师。
你用清晰的步骤和代码示例解释概念。
除非被要求展开,否则将回复控制在150字以内。
每次回答最后加一句总结性的"一句话要点"。

💡 组合模式效果最好 — 同时定义角色 + 约束 + 格式,模型的行为一致性最高。


常见踩坑(FAQ)

❓ 模型完全无视我的 System Prompt 怎么办?

三个排查方向:

  1. 模型能力差异 — 有些模型比其他模型更遵循指令。Qwen2.5:7B 的指令跟随能力已经不错了
  2. 不够具体 — “你要专业一点” 太模糊 → 改为 “你用学术语言,每段引用至少一个概念”
  3. 语气太弱 — “尝试…” → 改为 “你必须…”
❓ 每次回复风格还是不一样,怎么回事?

这是正常的!LLM 本质是概率性的。想要更高的一致性:

  • 降低 temperature 参数(建议 0.3~0.5)
  • System Prompt 里加更硬性的格式约束
  • 第三课我们会讲结构化输出,进一步解决一致性问题
❓ System Prompt 写多长合适?
  • 建议 100~200 字以内
  • 太长会占用上下文窗口,留给用户输入的空间就少了
  • 太短则约束力不足,模型容易"跑偏"

🔧 更多实战经验和调试技巧,已整理到源码包 Debug 手册中。


练习任务

自己动手试一试,感受 System Prompt 的魔力:

  1. ✅ 用上面的基础代码跑通三种角色切换
  2. ✅ 写一个让 AI **只回答"是/否"**的极端约束 Prompt
  3. ✅ 写一个让 AI 每次回复都超过500字的详细模式 Prompt
  4. 🔥 挑战题: 尝试在同一个 Prompt 中设置两个互相矛盾的指令,观察哪个会赢?(答案在公众号源码包中有完整实验记录)

下期预告

第三课:让 AI 说"人话" — 结构化输出

学完这课,你将能让 AI 的回复:

  • 📋 变成可靠的 JSON 格式,程序可以直接解析
  • ✅ 带字段验证,不再出现格式错误
  • 🔄 实现稳定的数据提取,为后续工具调用打基础

从自由文本到结构化数据,这是从"聊天玩具"到"实用工具"的关键一步。


📢 获取完整源码 + 全套资源包

第一步: 扫码或搜索关注公众号 「开源情报局」

第二步: 在公众号后台回复关键字 「Agent」

第三步: 自动收到完整资源包(含 第一课+第二课 全部源码 + 10种角色模板 + Debug 手册 + API速查表)

回复后秒发,不用等待审核。


如果你觉得这篇教程有帮助,点个「在看」让更多人看到~

本文为《手搓 AI Agent 从 0 到 1》系列教程第 2 课,持续更新中。回复「Agent」不错过每一课

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐