突破AI效率瓶颈:Qwen-Agent多函数调用提示词设计实战指南
你是否还在为AI工具调用效率低下而困扰?当面对复杂任务需要连续调用多个函数时,传统串行执行方式往往导致响应延迟和资源浪费。本文将深入剖析Qwen-Agent框架中多函数调用(Function Calling)的提示词设计原理,带你掌握并行调用的核心技术,实现AI能力的倍增。读完本文,你将能够:
- 理解Qwen-Agent函数调用系统的底层架构
- 掌握并行函数调用的提示词模板设计方法
- 解决函数调用中的常见问题如参数格式错误
- 通过实际案例优化多工具协同工作流
函数调用提示词系统架构
Qwen-Agent的函数调用提示词系统主要通过qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py实现,核心采用QwenFnCallPrompt类封装了完整的预处理和后处理流程。该系统通过标准化的提示词模板,将用户需求转化为机器可执行的函数调用序列,同时支持串行和并行两种调用模式。
系统架构主要包含三个关键模块:
- 预处理模块:将对话历史和函数定义转换为模型可理解的提示词格式
- 模板引擎:提供多语言(中英文)和多模式(串行/并行)的提示词模板
- 后处理模块:解析模型输出,提取函数调用信息并处理异常情况
提示词模板设计原理
Qwen-Agent的提示词模板设计采用结构化标记语言,通过特殊标识符区分不同类型的内容。核心模板定义在FN_CALL_TEMPLATE字典中,包含四种组合:中文/英文 × 串行/并行。
特殊标记系统
系统使用四个核心特殊标记(Special Tokens):
✿FUNCTION✿:函数名称标记✿ARGS✿:函数参数标记✿RESULT✿:函数结果标记✿RETURN✿:返回结果标记
这些标记在qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L233-L237中定义,用于在提示词中明确标识函数调用的各个组成部分,使模型能够准确识别和解析。
并行调用模板结构
并行调用模板是提升效率的关键,其结构设计如下(中文版本):
## 你可以在回复中插入以下命令以并行调用N个工具:
✿FUNCTION✿: 工具1的名称,必须是[{tool_names}]之一
✿ARGS✿: 工具1的输入
✿FUNCTION✿: 工具2的名称
✿ARGS✿: 工具2的输入
...
✿FUNCTION✿: 工具N的名称
✿ARGS✿: 工具N的输入
✿RESULT✿: 工具1的结果
✿RESULT✿: 工具2的结果
...
✿RESULT✿: 工具N的结果
✿RETURN✿: 根据工具结果进行回复
这个模板在qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L275-L299中实现,通过重复的✿FUNCTION✿和✿ARGS✿对,支持同时定义多个函数调用。
函数描述格式化
每个函数的描述信息通过get_function_description函数生成,该函数在qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L335-L365中实现。函数描述包含以下要素:
- 人类可读名称(name_for_human)
- 模型使用名称(name_for_model)
- 功能描述(description)
- 参数定义(parameters)
- 参数格式说明(args_format)
预处理与后处理流程
提示词系统的强大之处不仅在于模板设计,还在于完善的预处理和后处理机制,确保函数调用的准确性和鲁棒性。
预处理流程
预处理主要由preprocess_fncall_messages方法实现,位于qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L26-L110。其核心步骤包括:
- 转换历史消息格式,将函数调用响应转换为纯文本格式
- 添加工具描述系统提示
- 处理函数调用前缀,支持指定特定函数
- 清理不完整的特殊标记
预处理确保输入到模型的提示词格式统一、内容完整,为准确的函数调用奠定基础。
后处理流程
后处理由postprocess_fncall_messages方法实现,位于qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L112-L230。其主要功能包括:
- 解析模型输出,提取函数名称和参数
- 处理并行调用,生成多个函数调用消息
- 清理不完整的特殊标记(通过
remove_incomplete_special_tokens函数) - 移除参数中的尾随注释(通过
remove_trailing_comment_of_fn_args函数)
实战案例分析
并行天气查询案例
以下是一个并行调用两个天气查询工具的示例,展示了提示词模板的实际应用:
✿FUNCTION✿: amap_weather
✿ARGS✿: {"city": "北京", "date": "2025-10-21"}
✿FUNCTION✿: amap_weather
✿ARGS✿: {"city": "上海", "date": "2025-10-21"}
✿RESULT✿: {"temperature": 18, "condition": "晴"}
✿RESULT✿: {"temperature": 20, "condition": "多云"}
✿RETURN✿: 北京今日天气晴,气温18℃;上海今日天气多云,气温20℃。
这个案例对应的代码实现可以参考examples/assistant_weather_bot.py,展示了如何在实际应用中使用并行函数调用来同时获取多个城市的天气信息。
代码解释器与文档问答并行调用
另一个常见场景是同时调用代码解释器和文档问答工具:
✿FUNCTION✿: code_interpreter
✿ARGS✿: ```python
import pandas as pd
df = pd.read_csv('data.csv')
df.describe()
✿FUNCTION✿: parallel_doc_qa ✿ARGS✿: {"question": "Qwen-Agent的核心功能是什么?", "documents": ["docs/README.md"]}
这个示例展示了如何混合调用不同类型的工具,代码解释器的实现位于[qwen_agent/tools/code_interpreter.py](https://gitcode.com/GitHub_Trending/qw/Qwen-Agent/blob/05f6536f2efb4becb9c9fa3536e4ab2e7129e458/qwen_agent/tools/code_interpreter.py?utm_source=gitcode_repo_files),而并行文档问答的实现位于[examples/parallel_doc_qa.py](https://gitcode.com/GitHub_Trending/qw/Qwen-Agent/blob/05f6536f2efb4becb9c9fa3536e4ab2e7129e458/examples/parallel_doc_qa.py?utm_source=gitcode_repo_files)。
## 常见问题与解决方案
### 参数格式错误处理
函数调用中最常见的问题是参数格式错误,Qwen-Agent通过`remove_trailing_comment_of_fn_args`函数处理这类问题,该函数在[qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L389-L399](https://gitcode.com/GitHub_Trending/qw/Qwen-Agent/blob/05f6536f2efb4becb9c9fa3536e4ab2e7129e458/qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py?utm_source=gitcode_repo_files#L389-L399)中实现。它能够移除参数中的尾随注释,例如:
```python
# 原始参数
'{"city": "北京"} <!-- 这是一个注释 -->'
# 处理后
'{"city": "北京"}'
不完整特殊标记处理
在流式输出场景中,可能会出现不完整的特殊标记,remove_incomplete_special_tokens函数(qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L369-L385)专门处理这种情况,确保解析的准确性。
多语言支持实现
系统通过lang参数实现中英文支持,在预处理阶段选择相应的模板。例如,中文并行模板在qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L275-L299中定义,英文并行模板在qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L301-L325中定义。
最佳实践与优化建议
合理设置并行度
虽然并行调用可以提高效率,但并非越多越好。建议根据任务类型和资源情况设置合理的并行度,一般情况下3-5个并行调用较为合适。可以通过parallel_function_calls参数控制并行开关,该参数在qwen_agent/llm/fncall_prompts/qwen_fncall_prompt.py#L30中定义。
函数调用顺序优化
对于有依赖关系的函数调用,应使用串行模式并合理安排顺序。例如,数据获取→数据处理→数据可视化的流程应按顺序执行。
错误处理机制
在实际应用中,应充分利用Qwen-Agent的错误处理机制,通过检查函数调用返回结果,实现自动重试或降级策略。相关示例可参考examples/function_calling.py和examples/function_calling_in_parallel.py。
总结与展望
Qwen-Agent的多函数调用提示词设计通过结构化模板和特殊标记系统,实现了高效、灵活的工具调用机制。其核心优势在于:
- 并行调用能力:通过并行模板同时调用多个工具,大幅提升效率
- 鲁棒性设计:完善的预处理和后处理机制处理各种异常情况
- 多语言支持:同时支持中英文提示词模板
- 兼容性良好:与Qwen系列模型深度优化,确保最佳性能
未来,可以进一步探索动态提示词优化、自适应并行度调整等技术,进一步提升多函数调用的效率和准确性。
要开始使用Qwen-Agent的多函数调用功能,可参考以下资源:
- 官方文档:docs/tool.md
- 示例代码:examples/function_calling_in_parallel.py
- 提示词模板源码:qwen_agent/llm/fncall_prompts/
希望本文能帮助你更好地理解和应用Qwen-Agent的多函数调用功能,提升AI应用的效率和能力。如果觉得本文有用,请点赞、收藏并关注项目更新,下期我们将介绍Qwen-Agent的代码解释器高级功能。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
ruoyi-plus-soybeanRuoYi-Plus-Soybean 是一个现代化的企业级多租户管理系统,它结合了 RuoYi-Vue-Plus 的强大后端功能和 Soybean Admin 的现代化前端特性,为开发者提供了完整的企业管理解决方案。Vue06- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00

