1. 手把手搭一个多角色 AI 系统:把生图、写文案、写代码的 AI 变成你的员工
你手机里肯定也这样:一个 AI 生图、一个 AI 写文案、一个 AI 写代码、一个 AI 分析数据。每个都要学一遍怎么使唤。生图的得说"请用 gpt-image-2 模型生成一张 1024×1024 的图"——像个发号施令的接线员。
后来我想通了一件事:这些工具之间的协作,比单个工具的能力更重要。
于是我用一个周末搭了一套系统——4 个 AI 角色,各自有各自的能力,能互相配合干活。
这篇文章不卖关子,直接给你看我怎么做的。想直接拿源码走的,文末加微信。

2. 系统拆解:一个角色凭什么能干活
先搞清楚核心问题:一个 AI 角色要"干活",需要什么?
三样东西:
bash
角色 = 身份定义(你是谁)
+ 工具集(你能干什么)
+ 记忆(你记得什么)
这三样加起来,一个 AI 就不再是"只会聊天"的对话窗口,而是一个有能力的员工。
具体来说:
2.1 1. 身份定义
就是告诉 AI 它是谁。用一段系统提示词(system prompt)来描述它的角色、风格、行为准则。
设计师的系统提示词开头是这样的:
bash
你是一个专业视觉设计师。
擅长平面设计、UI 设计、配图生成。
你说话简洁有审美,给出设计方案时先说清楚思路,再给具体方案。
当用户需要图片时,使用 generate_image 工具。
这段词决定了它的行为边界。它不会突然去写代码,因为它的身份是设计师。
2.2 2. 工具集
这是最关键的部分。光说不练假把式——AI 也是。
每个角色手里得有真家伙才能干活:
bash
设计师 → [生图 API、读文件、写文件]
文案 → [读文件、写文件、搜索、AI 检测]
程序员 → [读文件、写文件、执行代码、搜索]
分析师 → [读文件、写文件、数据处理]
每个工具就是一段 Python 函数,对外暴露名字和参数。AI 发现用户需求匹配工具时,会自动调用。
这就是 Function Calling——不是人类敲键盘调用函数,是 AI 自己决定"我现在该调用哪个工具了"。
2.3 3. 记忆
这个最简单。就是把你和 AI 的对话历史存下来,下次继续聊的时候带上。
但有个关键细节:不能无限存。 我一般只保留最近 20 轮对话。太老的记忆不仅费 token,还会让 AI 混淆重点。

3. 调度器:谁该干这个活
有了 4 个角色之后,下一个问题是:用户发一句话,到底该派谁去?
我做了个简单的关键词路由:
bash
用户说 "帮我设计一张封面"
↓
系统扫描关键词:设计、封面
↓
匹配到 → 设计师
关键词匹配规则:
| 角色 | 触发关键词 |
|---|---|
| 设计师 | 设计、图片、封面、海报、画图、logo |
| 文案 | 写、文章、文案、公众号、排版 |
| 程序员 | 代码、程序、开发、debug、bug |
| 分析师 | 分析、数据、报告、统计、趋势 |
如果一句话同时触发了多个角色(比如"帮我分析数据并做成图表"),系统会按优先级最高的派发。
用户也可以强制指定:@设计师 帮我把这张图改成海报风格——@ 符号后面跟角色名,系统直接转发,不走路由。

4. 核心代码:不到 200 行
我把核心引擎控制在 200 行以内。不是为了炫技,是越少代码越不容易崩。
最核心的部分是这个 Agent 类:
python
class Agent:
def __init__(self, name, role, system_prompt, tools=None):
self.name = name
self.role = role
self.system_prompt = system_prompt
self.tool_names = tools or []
self.memory = [] # 对话历史
def get_context(self):
# 组装上下文:系统提示词 + 最近 20 轮对话
return [{"role": "system", "content": self.system_prompt}] \
+ self.memory[-20:]
简单到离谱,对吧?但这个结构能撑起整个系统。
工具注册也简单:
python
class Tool:
def __init__(self, name, description, fn, parameters=None):
self.name = name
self.description = description
self.fn = fn
def run(self, **kwargs):
return self.fn(**kwargs)
每个工具就是一个名字 + 描述 + 函数。AI 根据名字和描述判断什么时候该调用它。
5. 怎么让你的角色也开始干活
第一步:定义角色
python
设计师 = Agent("设计师", "视觉设计师",
"你是一个专业视觉设计师...",
tools=["generate_image", "read_file"]
)
文案 = Agent("文案", "内容创作者",
"你是一个专业文案...",
tools=["read_file", "write_file", "search"]
)
第二步:注册到系统
python
system = Orchestrator()
system.register_agent(设计师)
system.register_agent(文案)
第三步:开始聊天
python
result = system.chat("帮我写一篇公众号文章")
# 系统自动路由到"文案"
result = system.chat("@设计师 配一张封面图")
# @强制指定角色
这就是全部了。理解这三步,你就懂了这套系统的核心逻辑。
6. 进阶:让角色之间自己配合
单角色能干活,多角色才能干大事。
我做了一个多步骤协作的机制。当用户的任务需要多个角色配合时,系统自动编排工作流:
bash
用户: "写一篇产品评测"
↓
文案收到任务 → 写初稿 → 保存到文件
↓
设计师收到通知 → 读稿件 → 出配图 → 保存图片
↓
分析师收到通知 → 读稿件 → 补数据 → 更新文件
↓
文案收到最终版 → 润色 → 出终稿
每一步的输出自动传给下一步,中间不需要人类插手。
我把这种协作模式做成了可配置的流水线。你可以在 JSON 文件里定义一个工作流:
json
{
"name": "文章生产流水线",
"steps": [
{"agent": "文案", "task": "写初稿"},
{"agent": "设计师", "task": "做配图"},
{"agent": "分析师", "task": "补数据"},
{"agent": "文案", "task": "终稿润色"}
]
}
这样每一步的衔接就变成了配置,不用改代码。
7. 最终跑起来的样子
我做了两种使用方式:
命令行模式:
bash
$ python run.py
>>> @设计师 帮我设计一张小红书封面
🎨 收到!我先出 3 个草图方案给你选。
Web 界面模式:
bash
$ python run.py --web
🌐 http://localhost:8888
在浏览器里打开,左侧选角色,中间聊天,右侧看结果。
两种模式共用同一个后端,数据互通。
8. 你也能做一套你自己的
这套框架不挑业务场景。你可以换成你自己的角色:
bash
电商客服团队:售前 + 售后 + 投诉处理
内容工作室:选题 + 写作 + 排版 + 发布
技术团队:产品 + 设计 + 开发 + 测试
每个角色配对应的工具和提示词,就能跑起来。
这套系统的完整代码和配置模板,我都整理好了。如果你想拿过去直接用,或者定制成你自己的业务角色,可以加我微信,我发给你。
📮 关注「AI信号实验室」,追踪前沿信号,动手实验每一个新能力。
夜雨聆风