零基础玩转AI自动化与绘画:我的实战踩坑笔记
作者:技术团队培训负责人 / Coze讲师
为什么要写这篇文章?
大家好,我是团队里负责带应届生的老张。这几年带下来,我发现一个很有意思的现象:很多刚毕业的同学对AI工具充满热情,但一说到"技术探索"四个字就犯怵——觉得那是大佬们才配做的事。
其实不是的。
我当初学的时候,也是从"这玩意儿到底能干啥"开始摸索的。今天这篇文章,就是想把我这几年在AI自动化编排(AutoGen)和AI绘画这两个方向上踩过的坑、总结的经验,用最直白的方式分享给你们。
不讲虚的,全是实战。
一、先搞清楚:这两个技术到底是干嘛的?
在动手之前,咱们先用大白话把概念捋清楚。
1.1 AutoGen 是什么?
一句话:AutoGen 是微软开源的一个多智能体(Multi-Agent)对话框架。
你可以把它理解成一个"AI会议室"——你请了好几个AI助手进来,它们可以互相聊天、互相协作、互相检查,最终帮你完成一个复杂任务。
举个实际场景:
- 你让一个Agent负责写代码
- 另一个Agent负责Review代码
- 第三个Agent负责测试
- 它们自己讨论、自己改bug,最后把成品交给你
我当初学的时候,最大的困惑就是:"我一个Agent不够用吗?为什么要搞多个?"后来做了一个自动化代码生成的项目才明白——单个Agent在处理复杂任务时,很容易"跑偏"或者"偷懒",多个Agent互相监督,效果完全不一样。
1.2 AI绘画是什么?
这个大家应该不陌生了。简单说就是用文字描述(Prompt)让AI生成图片。
目前主流的技术路线有两条:
| 技术路线 | 代表产品 | 特点 | 适合场景 |
|---|---|---|---|
| Stable Diffusion | SD WebUI、ComfyUI | 开源可控、本地部署 | 需要精细控制的专业场景 |
| DALL·E / Midjourney | ChatGPT内置、MJ官网 | 上手简单、效果惊艳 | 快速出图、灵感探索 |
我带的新人里,有的上来就搞本地部署SD,结果在环境配置上卡了三天。我的建议是:先用API跑通流程,再考虑本地部署。
1.3 这俩怎么结合?
好问题。这也是本文的实战部分要做的——用AutoGen编排多个Agent,让其中一个Agent调用AI绘画API来生成图片。
比如你对"AI产品经理Agent"说:"帮我设计一个赛博朋克风格的Logo",它会自动把需求拆解,调用绘画Agent生成图片,再让评审Agent给出修改意见。
酷不酷?来,咱们动手。
二、环境准备:手把手教你搭起来
2.1 Python环境搭建
AutoGen是基于Python的,所以第一步是装Python。
我当初学的时候,在Python版本上栽过跟头——用了3.7,结果一堆依赖装不上。记住:必须用Python 3.8及以上,推荐3.10或3.11。
# 检查Python版本
python --version
# 创建虚拟环境(强烈建议!)
python -m venv autogen_env
# 激活虚拟环境
# Windows:
autogen_env\Scripts\activate
# Mac/Linux:
source autogen_env/bin/activate
2.2 安装AutoGen
pip install pyautogen
如果你需要用到代码执行能力(后面实战会用到),还需要安装额外的依赖:
pip install pyautogen[teachable]
2.3 安装AI绘画相关依赖
这里我们用OpenAI的DALL·E API来演示(因为它和AutoGen同属微软/OpenAI生态,集成最顺滑):
pip install openai
pip install requests
2.4 配置API Key
创建一个 .env 文件,把你的密钥放进去:
# .env 文件
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
然后在代码里加载:
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
避坑提醒:千万不要把API Key直接写在代码里然后提交到GitHub!我见过太多新人犯这个错了。
2.5 环境验证
跑一下这段代码,确认一切正常:
import autogen
print(f"AutoGen版本: {autogen.__version__}")
print("环境准备完毕!")
如果没报错,恭喜你,环境搞定了。
三、核心概念:用最简单的话讲明白
3.1 Agent(智能体)
Agent就是"AI角色"。你可以给它设定名字、性格、职责。
# 创建一个Agent的例子
assistant = autogen.AssistantAgent(
name="小助手",
system_message="你是一个热情的Python编程助手,回答要简洁明了。"
)
类比理解:Agent就像你公司里的员工。你给不同的员工分配不同的岗位(system_message),他们就会按照岗位要求来工作。
3.2 UserProxyAgent(用户代理)
这是一个特殊的Agent,它代表"你"(人类用户)来和AI对话,同时可以执行代码。
user_proxy = autogen.UserProxyAgent(
name="用户代理",
human_input_mode="NEVER", # NEVER=全自动, ALWAYS=每步确认, TERMINATE=只在结束时确认
code_execution_config={
"work_dir": "coding_output",
"use_docker": False
}
)
| 参数 | 含义 | 推荐值 |
|---|---|---|
human_input_mode="NEVER" |
完全自动运行 | 调试阶段用ALWAYS |
human_input_mode="ALWAYS" |
每一步都要人确认 | 生产环境慎用 |
human_input_mode="TERMINATE" |
只在需要结束时确认 | 折中方案 |
我当初学的时候,一开始设成了ALWAYS,结果每句话都要我敲回车,烦死了。后来改成NEVER,又发现Agent跑飞了拉不回来。建议新手先用TERMINATE,熟悉之后再调整。
3.3 对话模式(Group Chat)
多个Agent一起聊天,就是Group Chat。你需要指定一个"主持人"来管理发言顺序。
groupchat = autogen.GroupChat(
agents=[user_proxy, assistant, reviewer],
messages=[],
max_round=10 # 最多对话10轮
)
manager = autogen.GroupChatManager(groupchat=groupchat)
类比理解:Group Chat就是一个会议,Manager是会议主持人,决定谁发言、什么时候结束。
3.4 AI绘画的核心:Prompt工程
AI绘画的效果,80%取决于你的Prompt写得好不好。
❌ 差的Prompt: "画一只猫"
✅ 好的Prompt: "A cute orange tabby cat sitting on a windowsill,
golden hour sunlight, soft bokeh background,
digital art style, highly detailed, 4k resolution"
Prompt公式(我总结的):
主体描述 + 环境/背景 + 光影/氛围 + 艺术风格 + 质量修饰词
| 类别 | 常用词汇 |
|---|---|
| 风格 | digital art, oil painting, watercolor, pixel art, 3D render |
| 光影 | golden hour, dramatic lighting, neon glow, soft shadow |
| 质量 | highly detailed, 4k, 8k, masterpiece, best quality |
| 视角 | close-up, bird's eye view, low angle, wide shot |
四、实战项目:多Agent协作生成AI绘画
好,概念讲完了,来点真刀真枪的。
我们要做一个项目:用户输入一个主题,多个Agent协作完成从需求分析→Prompt生成→图片生成→质量评审的全流程。
4.1 项目架构
用文字描述一下流程:
用户输入主题
↓
【产品经理Agent】分析需求,输出画面描述
↓
【Prompt工程师Agent】将描述转化为专业绘画Prompt
↓
【绘画执行Agent】调用DALL·E API生成图片
↓
【评审Agent】评估图片质量,给出改进建议
↓
输出最终结果
4.2 定义各个Agent
import autogen
import os
from dotenv import load_dotenv
import openai
import requests
import base64
import json
load_dotenv()
config_list = [
{
"model": "gpt-4",
"api_key": os.getenv("OPENAI_API_KEY"),
}
]
llm_config = {
"config_list": config_list,
"temperature": 0.7,
}
# Agent 1: 产品经理 - 负责需求分析
product_manager = autogen.AssistantAgent(
name="产品经理",
system_message="""你是一位资深产品经理,擅长将模糊的需求转化为清晰的画面描述。
你的任务是:
1. 理解用户想要的主题
2. 补充细节:主体、场景、氛围、配色
3. 输出一段200字以内的画面描述
注意:只输出画面描述,不要输出其他内容。""",
llm_config=llm_config
)
# Agent 2: Prompt工程师 - 负责生成专业Prompt
prompt_engineer = autogen.AssistantAgent(
name="Prompt工程师",
system_message="""你是一位AI绘画Prompt专家。
你的任务是:将产品经理给出的画面描述,转化为英文的DALL·E绘画Prompt。
要求:
1. 必须用英文
2. 包含:主体、风格、光影、质量修饰词
3. 控制在100个英文单词以内
4. 只输出Prompt本身,不要任何解释""",
llm_config=llm_config
)
# Agent 3: 评审官 - 负责质量把控
reviewer = autogen.AssistantAgent(
name="评审官",
system_message="""你是一位严苛的艺术总监。
你的任务是:评估生成的Prompt质量,给出0-10分的评分和改进建议。
输出格式:
评分:X/10
优点:...
改进建议:...
最终判定:通过/需要修改""",
llm_config=llm_config
)
4.3 编写AI绘画工具函数
def generate_image_with_dalle(prompt: str, size: str = "1024x1024") -> dict:
"""
调用DALL·E API生成图片
参数:
prompt: 绘画提示词
size: 图片尺寸,可选 1024x1024, 1792x1024, 1024x1792
返回:
包含图片URL和修改后prompt的字典
"""
try:
client = openai.OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
response = client.images.generate(
model="dall-e-3",
prompt=prompt,
size=size,
quality="standard", # 或 "hd"
n=1,
)
result = {
"image_url": response.data[0].url,
"revised_prompt": response.data[0].revised_prompt,
"status": "success"
}
print(f"✅ 图片生成成功!")
print(f"📝 DALL·E优化后的Prompt: {result['revised_prompt']}")
print(f"🖼️ 图片地址: {result['image_url']}")
return result
except Exception as e:
print(f"❌ 图片生成失败: {str(e)}")
return {"status": "error", "message": str(e)}
def save_image_from_url(url: str, filename: str = "output.png") -> str:
"""
从URL下载并保存图片
参数:
url: 图片URL
filename: 保存的文件名
返回:
保存的文件路径
"""
try:
response = requests.get(url)
response.raise_for_status()
with open(filename, "wb") as f:
f.write(response.content)
print(f"💾 图片已保存到: {filename}")
return filename
except Exception as e:
print(f"❌ 图片保存失败: {str(e)}")
return ""
4.4 把工具注册给Agent
# 创建一个可以调用工具的Agent
image_generator = autogen.AssistantAgent(
name="绘画执行者",
system_message="""你是绘画执行者。
当收到Prompt工程师的英文Prompt后,你需要调用generate_image工具来生成图片。
调用完成后,把图片URL告诉团队。""",
llm_config=llm_config,
function_map={
"generate_image": generate_image_with_dalle,
"save_image": save_image_from_url,
}
)
4.5 组装Group Chat并运行
# 创建用户代理
user_proxy = autogen.UserProxyAgent(
name="用户",
human_input_mode="TERMINATE",
max_consecutive_auto_reply=10,
code_execution_config=False,
function_map={
"generate_image": generate_image_with_dalle,
"save_image": save_image_from_url,
}
)
# 创建Group Chat
groupchat = autogen.GroupChat(
agents=[user_proxy, product_manager, prompt_engineer, image_generator, reviewer],
messages=[],
max_round=15,
speaker_selection_method="auto", # 自动选择下一个发言者
)
# 创建Manager
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config=llm_config,
system_message="你是团队协作的管理者,确保每个Agent按顺序完成任务。"
)
# 启动对话!
task = """
我想生成一张图片:一只穿着宇航服的柴犬站在月球表面,
背景是地球,整体风格要可爱又科幻。
请团队协作完成这个任务。
"""
user_proxy.initiate_chat(
manager,
message=task
)
4.6 运行效果示例
当你运行上面的代码后,大致会看到这样的对话流:
用户: 我想生成一张图片:一只穿着宇航服的柴犬站在月球表面...
产品经理: 画面描述——一只圆滚滚的柴犬穿着白色宇航服,
站在灰白色的月球表面,头盔里露出标志性的柴犬微笑。
背景是蔚蓝的地球悬浮在漆黑太空中...
Prompt工程师: A cute Shiba Inu wearing a white spacesuit,
standing on the gray lunar surface, smiling through
the helmet visor. Earth visible in the dark space
background. Pixar 3D animation style, soft lighting,
highly detailed, 4k.
绘画执行者: [调用generate_image工具]
✅ 图片生成成功!
🖼️ 图片地址: https://xxx...
评审官: 评分:8/10
优点:主体清晰,风格统一,配色和谐
改进建议:可以增加一些星星和陨石坑的细节
最终判定:通过
4.7 进阶:添加Stable Diffusion本地部署方案
如果你想用本地的Stable Diffusion,可以这样做:
def generate_image_with_sd(prompt: str,
negative_prompt: str = "ugly, blurry, low quality",
steps: int = 30,
width: int = 512,
height: int = 512) -> dict:
"""
调用本地Stable Diffusion WebUI API生成图片
前提:你需要先启动SD WebUI,并加上 --api 参数
启动命令: python launch.py --api --port 7860
"""
url = "http://127.0.0.1:7860/sdapi/v1/txt2img"
payload = {
"prompt": prompt,
"negative_prompt": negative_prompt,
"steps": steps,
"width": width,
"height": height,
"cfg_scale": 7,
"sampler_name": "DPM++ 2M Karras",
}
try:
response = requests.post(url, json=payload)
response.raise_for_status()
result = response.json()
image_data = result["images"][0]
# 保存图片
import base64
image_bytes = base64.b64decode(image_data)
filename = "sd_output.png"
with open(filename, "wb") as f:
f.write(image_bytes)
print(f"✅ SD图片已保存到: {filename}")
return {"status": "success", "filepath": filename}
except requests.exceptions.ConnectionError:
print("❌ 无法连接到SD WebUI,请确认已启动且加了--api参数")
return {"status": "error", "message": "连接失败"}
本地部署SD的参数对照表:
| 参数 | 含义 | 推荐值 |
|---|---|---|
steps |
采样步数 | 20-30(平衡速度和质量) |
cfg_scale |
提示词相关性 | 7-9(太高会过饱和) |
sampler_name |
采样器 | DPM++ 2M Karras |
width/height |
图片尺寸 | 512x512(SD 1.5)/ 1024x1024(SDXL) |
五、常见问题:新手最容易踩的坑
Q1:Agent之间互相"吵架",对话停不下来怎么办?
原因:没有设置明确的终止条件。
解决方案:
# 方法1:设置最大轮数
groupchat = autogen.GroupChat(
agents=[...],
max_round=10, # 限制最多10轮
)
# 方法2:在system_message中明确终止条件
reviewer = autogen.AssistantAgent(
name="评审官",
system_message="""...
如果你认为质量达标,请在回复末尾加上 [TASK_COMPLETE]
"""
)
# 方法3:使用is_termination_msg
user_proxy = autogen.UserProxyAgent(
name="用户",
is_termination_msg=lambda x: x.get("content", "").find("TASK_COMPLETE") >= 0,
)
Q2:API调用报错 "Rate limit reached" 怎么办?
原因:短时间内调用太频繁,触发了OpenAI的限流。
解决方案:
import time
def generate_image_with_retry(prompt: str, max_retries: int = 3):
"""带重试机制的图片生成"""
for i in range(max_retries):
try:
result = generate_image_with_dalle(prompt)
if result["status"] == "success":
return result
except Exception as e:
if "rate limit" in str(e).lower():
wait_time = (i + 1) * 5 # 递增等待:5s, 10s, 15s
print(f"⏳ 触发限流,等待{wait_time}秒后重试...")
time.sleep(wait_time)
else:
raise e
return {"status": "error", "message": "重试次数耗尽"}
Q3:生成的图片质量很差,和预期完全不一样?
排查清单:
- Prompt太模糊 → 参考前面的Prompt公式,补充细节
- 用了中文Prompt → DALL·E 3支持中文,但英文效果更好
- 负面提示词没写 → 用SD的话,一定要加negative_prompt
- 模型选错了 → SD 1.5和SDXL出图效果差别很大
Q4:AutoGen报 "Context length exceeded" 错误?
原因:对话历史太长,超过了模型的上下文窗口限制。
解决方案:
# 方案1:减少max_round
groupchat = autogen.GroupChat(agents=[...], max_round=5)
# 方案2:使用消息清理
groupchat = autogen.GroupChat(
agents=[...],
max_round=10,
messages=[],
# 自定义消息选择策略,只保留最近的消息
speaker_selection_method="auto",
)
Q5:本地部署SD,显存不够怎么办?
显存需求对照表:
| 模型 | 最低显存 | 推荐显存 | 优化方案 |
|---|---|---|---|
| SD 1.5 | 4GB | 6GB+ | 使用--medvram参数 |
| SDXL | 8GB | 12GB+ | 使用--lowvram参数 |
| SD 1.5 + ControlNet | 6GB | 8GB+ | 使用--medvram参数 |
# 显存优化启动命令
python launch.py --api --medvram --opt-sdp-attention
六、学习建议:下一步该怎么走?
6.1 短期(1-2周)
- 把上面的实战代码跑通,改改Prompt看看效果变化
- 尝试加入更多Agent角色,比如"配色师Agent"、"构图师Agent"
- 用AutoGen做一个自动化工作流,比如"自动生成日报+配图"
6.2 中期(1-2个月)
- 深入学习Stable Diffusion,掌握ControlNet、LoRA等进阶技术
- 学习ComfyUI,掌握节点式工作流编排
- 研究AutoGen的自定义Agent和工具注册机制
6.3 长期(3个月+)
- 搭建自己的多Agent应用,解决实际业务问题
- 探索Agent的记忆机制(Memory)和长期学习能力
- 关注AutoGen、LangChain、CrewAI等框架的更新动态
6.4 我的私房学习资源推荐
| 资源 | 类型 | 推荐理由 |
|---|---|---|
| AutoGen官方文档 | 文档 | 最权威的参考资料 |
| Stable Diffusion Art (YouTube) | 视频 | SD教程讲得最清楚 |
| PromptHero | 网站 | 海量优秀Prompt参考 |
| Civitai | 网站 | SD模型和LoRA下载 |
| 秋叶整合包 | 工具 | 国内SD一键部署神器 |
写在最后
我当初学的时候,最大的感受就是——AI领域的技术迭代太快了,今天学的东西明天可能就过时了。
但这恰恰说明,掌握"技术探索的方法论"比掌握某个具体工具更重要。
今天这篇文章,我教你的不只是AutoGen和AI绘画的具体用法,更是一种"拆解问题→组建Agent→协作完成"的思维方式。
记住三个原则:
- 先跑通,再优化 —— 别一上来就追求完美架构
- 多动手,少纠结 —— 踩坑是最好的老师
- 保持好奇,持续探索 —— 这个领域永远有新东西等你发现
好了,去写代码吧。有问题随时来找我,我办公室在3楼最里面那间。
—— 你们的老张


评论 0