You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

AutoGen 0.7生成Azure Migrate PPT时幻灯片数量不稳定问题排查

Azure Migrate PPT生成不稳定问题分析与修复

可能的原因

  1. 对话轮次耗尽:你的GroupChat设置max_round=30,生成完整PPT需要多轮代码执行、调试和内容填充,重试时上下文累积会更快耗尽轮次,导致Agent提前停止。
  2. Agent连续回复限制触发:虽然SlideAgent的max_consecutive_auto_reply=25,但如果AssistantAgent中途插入对话,会打断SlideAgent的连续生成流程,导致未完成所有幻灯片。
  3. 上下文残留干扰:重试时未清空GroupChat的历史消息,Agent会基于之前不完整的生成记录继续,误以为部分幻灯片已完成,不再继续生成。
  4. 代码执行隐性错误:生成幻灯片时(比如图表渲染、表格格式设置)可能出现未被捕获的错误,但当前配置没有详细日志,错误被忽略后Agent停止后续任务。
  5. LLM输出变异:即使temperature设为0.1,大模型仍可能在重试时遗漏部分任务指令,跳过某些幻灯片的生成。

针对性修复建议

1. 重置对话上下文

每次运行前强制清空GroupChat的消息历史,避免旧上下文干扰:

# 在initiate_chat前添加
groupchat.messages = []

或者每次运行都重新创建GroupChat实例,确保初始状态干净。

2. 调整轮次与回复限制

适当提高轮次和连续回复上限,确保有足够空间完成所有任务:

groupchat = GroupChat(
    agents=[user, assistant, slide_agent],
    messages=[],
    max_round=50  # 从30提升到50
)

slide_agent = AssistantAgent(
    name="SlideAgent",
    # ... 其他配置不变
    max_consecutive_auto_reply=30  # 从25提升到30
)

3. 启用代码执行日志

添加日志记录,捕获代码执行中的错误,定位中断点:

user = UserProxyAgent(
    name="User",
    # ... 其他配置不变
    code_execution_config={"use_docker": False, "log_file": "code_execution.log"}
)

slide_agent = AssistantAgent(
    name="SlideAgent",
    # ... 其他配置不变
    code_execution_config={"work_dir": directory, "use_docker": False, "log_file": "slide_gen.log"}
)

4. 强化任务指令明确性

在SlideAgent的system_message末尾添加:

必须严格完成所有7个内容幻灯片的生成,若未完成所有任务,需继续执行代码补充,直到全部幻灯片生成完毕。

同时在初始prompt中重复强调:

无论任何情况,必须生成完整的7个内容幻灯片+标题+议程幻灯片,不得遗漏。

5. 拆分任务为子步骤

将PPT生成拆分为独立子任务,让Agent逐个完成:
比如先让AssistantAgent生成所有分析内容,再让SlideAgent依次生成每个幻灯片,每完成一个子任务再推进下一个,减少一次性任务的复杂度。

6. 固化PPT生成框架

预先编写基础的PPT操作函数,让SlideAgent调用这些函数填充内容,减少代码错误:

# 预先定义在代码开头
from pptx import Presentation

def create_blank_presentation(template_path):
    prs = Presentation(template_path)
    # 清空现有幻灯片
    for i in range(len(prs.slides) - 1, -1, -1):
        rId = prs.slides._sldIdLst[i].rId
        prs.part.drop_rel(rId)
        del prs.slides._sldIdLst[i]
    return prs

def add_title_slide(prs, title):
    slide_layout = prs.slide_layouts[0]  # 对应模板的标题布局
    slide = prs.slides.add_slide(slide_layout)
    title_placeholder = slide.shapes.title
    title_placeholder.text = title
    return prs

# 然后在SlideAgent的system_message中说明优先调用这些函数

参考方向

AutoGen 0.7官方文档中的以下内容可作为参考:

  • GroupChat与GroupChatManager的参数配置(重点关注max_round、消息管理)
  • AssistantAgent的max_consecutive_auto_reply参数说明
  • 代码执行模块的错误处理与日志配置

内容的提问来源于stack exchange,提问作者User

火山引擎 最新活动