问题出现得很突然,日志倒是留得挺全。crewai 0.80,三个 agent 串行任务,最后一个只输出 Maximum iterations reached 然后返回空,max_iter 默认 15,任务本身只是一次网页摘要。
刚开始盯着「max_iter 太小,长任务在中途被截断」,折腾了半个多小时,排掉了。
排查方向其实有限,先把可能性排一排。工具返回格式不符合预期,agent 反复重试同一调用。还有一种是任务要求输出 JSON,agent 一直拼不完整。
还有一种情况,agent 之间传的上下文超长,每轮都在重复读。
第一件事是打开详细日志看轮次消耗
python -c "from app.crew import build;build().kickoff()" --verbose
单独验证工具返回长度
python -c "from app.tools import fetch;print(len(fetch('https://example.com')))"
给 agent 调大轮次上限
python -c "from crewai import Agent;a=Agent(role='r',goal='g',backstory='b',max_iter=25);print(a.max_iter)"
等前面都确认过,再在任务描述里补收敛条件
python -c "print('输出不超过 300 字,拿到正文即结束')"
改完先别撤,确认这几项。同一任务在 8 轮内输出摘要,日志里不再出现 Maximum iterations,输出长度大于 200 字。
这里还有个坑。max_iter 是兜底不是目标,轮次打满通常说明工具输出让模型无法判断任务已经完成。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
