Qwen3 多步推理执行 — 从计划到执行的完整闭环
为什么 Agent 需要思考模式
一个典型的多步 Agent 任务:
"帮我查明天北京的天气,如果下雨就提醒我带伞。"
模型需要:
- 理解意图(查天气 → 条件判断 → 提醒)
- 规划步骤(先调天气 API → 判断是否下雨 → 条件触发)
- 执行第一步(调工具查天气)
- 看结果 → 动态调整(如果不下雨,就不用提醒)
- 输出最终回复
每一步都需要"想一想"——尤其是第 4 步,模型需要根据中间结果来决定下一步。这正是思考模式的强项。
不带思考模式会怎样
非思考模式下,模型可能:
- 漏掉条件判断,直接给结果
- 错误地把结果当成"肯定下雨"
- 工具参数填错(如"明天"格式错误)
- 忽略中间结果,按原计划走到底
带思考模式的完整循环
messages = [
{"role": "user", "content": "帮我查明天北京的天气,如果下雨就提醒我带伞。"}
]
for step in range(10):
# 开启思考模式让模型规划和执行
response = client.chat.completions.create(
model="qwen3-plus",
messages=messages,
tools=tools,
extra_body={"enable_thinking": True}
)
msg = response.choices[0].message
# 可以选择只把思考链暴露给日志,不给工具
if hasattr(msg, "reasoning_content") and msg.reasoning_content:
print(f"[思考] {msg.reasoning_content[:100]}...")
if not msg.tool_calls:
# 任务完成
break
# 执行工具
for tc in msg.tool_calls:
result = execute_tool(tc.function.name, tc.function.arguments)
messages.append({"role": "tool", "tool_call_id": tc.id, "content": str(result)})
messages.append({"role": "assistant", "content": msg.content, "tool_calls": msg.tool_calls})
思考链能给开发者看吗
是的。当你在云端 API 开启思考模式时,思考内容会返回在 reasoning_content 字段。你可以:
- 在日志中记录思考过程(调试用)
- 做 agent 的"黑盒分析"
- 研究模型的行为模式
但不建议在生产环境的用户界面中直接展示思考链——思考链可能包含模型中间的错误推理、自我怀疑等内容,对最终用户没有价值。
实用技巧
给 Agent 设计清晰的工具描述
工具的 description 字段是模型选择工具和生成参数的主要依据。写得越清晰,模型调用越准确:
# 好的描述
"获取指定城市的天气信息。city 参数应为中文城市名,如'北京'、'上海'。"
# 不好的描述
"天气 API"
限制工具数量
工具越多,模型选对的难度越大。建议:
- 按场景分组工具
- 每轮对话只暴露当前需要的工具
- 复杂 Agent 可以用"先选工具组再细选"的两层架构
设置最大步数
无限循环是 Agent 的常见问题。设置 max_steps 并在超过时兜底返回:
MAX_STEPS = 10
if step >= MAX_STEPS:
return "抱歉,任务执行超时,请尝试更简单的请求。"