零基础玩转AI自动化与绘画:我的实战踩坑笔记

表结构守护者
2026-07-23 13:54
阅读 752

作者:技术团队培训负责人 / 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:生成的图片质量很差,和预期完全不一样?

排查清单

  1. Prompt太模糊 → 参考前面的Prompt公式,补充细节
  2. 用了中文Prompt → DALL·E 3支持中文,但英文效果更好
  3. 负面提示词没写 → 用SD的话,一定要加negative_prompt
  4. 模型选错了 → 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→协作完成"的思维方式。

记住三个原则:

  1. 先跑通,再优化 —— 别一上来就追求完美架构
  2. 多动手,少纠结 —— 踩坑是最好的老师
  3. 保持好奇,持续探索 —— 这个领域永远有新东西等你发现

好了,去写代码吧。有问题随时来找我,我办公室在3楼最里面那间。

—— 你们的老张

评论 0

最热最新
暂无评论
表结构守护者Lv.1
0
影响力
0
文章
0
粉丝