基于 Qwen2.5-Coder 与 CrewAI 构建智能编程系统
9 月 19 日,阿里开源了 Qwen2.5 系列大模型全家桶。除常规的语言模型 Qwen2.5 之外,还发布了专门针对编程的 Qwen2.5-Coder 模型和数学的 Qwen2.5-Math 模型,并且针对每个模型都提供了不同规模参数版本。
- Qwen2.5-Coder 编程模型:1.5B, 7B, 以及即将推出的 32B
- Qwen2.5 语言模型:0.5B, 1.5B, 3B, 7B, 14B, 32B 和 72B
- Qwen2.5-Math 数学模型:1.5B, 7B 和 72B
在国内开源大模型中,Qwen2.5 系列表现突出。本文重点介绍如何利用 Qwen2.5-Coder 结合 CrewAI 多智能体框架,实现一个能根据软件需求编写程序代码的系统。

本文将分为以下三部分:
- Qwen2.5-Coder 本地部署和简单验证
- CrewAI 多智能体设计、和基于 Qwen2.5-Coder 的实现代码
- 最终,验证 CrewAI 智能体编写的程序
一、Qwen2.5-Coder 本地部署
为了快速在本地部署和推理大模型,我们将使用 Ollama。关于 Ollama 的详细介绍和使用教程,可参考官方文档或社区资源。
1. 安装 Ollama
首先确保已安装 Ollama 程序。Windows、macOS 和 Linux 用户均可通过官网下载安装包进行安装。
2. 下载并运行模型
安装好 Ollama 程序之后,通过以下一条命令,即可完成大模型的下载和部署:
ollama run qwen2.5-coder:7b
下载和部署成功之后,Ollama 默认自带了一个终端对话窗口,可以直接进行交互测试。

至此,Qwen2.5-Coder 模型本地部署就成功了,接下来我们来实现多智能体代码逻辑。
二、CrewAI 多智能体设计和实现
CrewAI 是一个强大的多智能体框架,允许开发者定义多个具有特定角色的 AI 代理(Agent),让它们协同工作以完成复杂任务。

1. 环境准备
工欲善其事,必先利其器。我们先准备一下 CrewAI 的研发环境,推荐使用 Miniconda 管理 Python 虚拟环境。
conda create -n CrewAI python=3.10 -y
conda activate CrewAI
pip install crewai
此外,由于我们的示例将生成贪吃蛇游戏,还需要安装 pygame 库:
pip install pygame
2. 角色定义
我们的编程智能体为游戏智能编程团队,这个团队由 3 个角色 组成(即:3 个智能体),他们的工作职责设定如下:
- 软件工程师:负责根据需求编写程序代码。
- 质量工程师:发现并修复软件工程师的代码 Bug 和错误。
- 首席质量工程师:检测程序完整性,并检测是否符合软件需求。
我们通过以下步骤,完成 游戏智能编程团队 整体逻辑(Python 文件:CrewAI-Game.py),首先我们需要导入程序的均依赖类:
import os
from textwrap import dedent
from crewai import Agent, Task, Crew
【第一步:配置 Qwen2.5-Coder 大模型】
我们需要配置环境变量,让 CrewAI 能够连接到本地运行的 Ollama 服务。
os.environ["OPENAI_API_BASE"] = 'http://127.0.0.1:11434/v1'
os.environ["OPENAI_MODEL_NAME"] = 'qwen2.5-coder:7b'
os.environ["OPENAI_API_KEY"] = 'EMPTY'
注意:OPENAI_API_BASE 指向 Ollama 的默认 API 地址,OPENAI_API_KEY 设置为空字符串即可绕过认证。
【第二步:定义 3 个角色(即:3 个智能体)】
3 个智能体分别是:高级软件工程师、高级质量工程师和首席质量工程师。
def senior_engineer_agent():
"""高级软件工程师智能体"""
return Agent(
role='高级软件工程师',
goal='根据需求完成软件编程',
backstory=dedent('''你是一位国际领先的科技公司的高级软件工程师。
你非常擅长 Python 编程,并尽自己的最大努力编写功能齐全、运行良好的完美代码。
'''),
allow_delegation=False,
verbose=True
)
def qa_engineer_agent():
"""高级软件质量工程师智能体"""
return Agent(
role='高级软件质量工程师',
goal='分析程序代码,找出其中的错误,并修复这些错误代码',
backstory=dedent('''你是一位检测代码的高级工程师。
你对代码细节很敏锐,非常擅长找出代码中的 Bug,包括检查是否缺少导入、变量声明、不匹配括号和语法错误等。
您还能检查出代码的安全漏洞和逻辑错误。
'''),
allow_delegation=False,
verbose=True
)
def chief_qa_engineer_agent():
"""首席软件质量工程师智能体"""
return Agent(
role='首席软件质量工程师',
goal='确保代码实现了需求',
backstory='''你怀疑程序员没有按照需求编写软件,你特别专注于编写高质量的代码。''',
allow_delegation=True,
verbose=True
)
【第三步:定义 3 个任务(即:3 个智能体的任务)】
与 3 个智能体对应,每个智能体均对应有 1 个任务:
def code_task(agent, game):
return Task(
description=dedent(f'''你将按照软件需求,使用 Python 编写程序:
软件需求
------------
{game}
'''),
expected_output='你的输出是完整的 Python 代码,特别注意只需要输出 Python 代码,不要输出其他任何内容!',
agent=agent
)
def review_task(agent, game):
return Task(
description=dedent(f'''你将按照软件需求,进一步使用 Python 完善给定的程序:
软件需求
------------
{game}
根据给定的 Python 程序代码,检查其中的错误。包括检查逻辑错误语法错误、缺少导入、变量声明、括号不匹配,以及安全漏洞。
'''),
expected_output='你的输出是完整的 Python 代码,特别注意只需要输出 Python 代码,不要输出其他任何内容!',
agent=agent
)
def evaluate_task(agent, game):
return Task(
description=dedent(f'''你将按照软件需求,进一步使用 Python 完善给定的程序:
软件需求
------------
{game}
查看给定的 Python 程序代码,确保程序代码完整,并且符合软件需求。
'''),
expected_output='你的输出是完整的 Python 代码,特别注意只需要输出 Python 代码,不要输出其他任何内容!',
agent=agent
)
【第四步:定义团队,组织智能体协同执行任务】
CrewAI 中,Crew 代表团队,它有 agents 和 tasks 这 2 个核心属性,最终通过 kickoff() 方法触发执行整个流程:
print('')
game = input('# 您好,我们是游戏智能编程团队,请输入游戏的详细描述:\n\n')
print('')
senior_engineer_agent = senior_engineer_agent()
qa_engineer_agent = qa_engineer_agent()
chief_qa_engineer_agent = chief_qa_engineer_agent()
code_game = code_task(senior_engineer_agent, game)
review_game = review_task(qa_engineer_agent, game)
approve_game = evaluate_task(chief_qa_engineer_agent, game)
crew = Crew(
agents=[
senior_engineer_agent,
qa_engineer_agent,
chief_qa_engineer_agent
],
tasks=[
code_game,
review_game,
approve_game
],
verbose=True
)
game_code = crew.kickoff()
最后,我们拿到 Python 代码之后,希望能保存到本地文件(Python 文件:Game.py):
print("\n\n########################")
print("## 游戏代码结果")
print("########################\n")
print(game_code)
filename = 'Game.py'
print("\n\n########################\n")
with open(filename, 'w', encoding='utf-8') as file:
file.write(game_code)
print(f"游戏代码已经存储到文件: {filename}")
print(f'你可以运行游戏:python {filename}')
以上步骤即完成了我们智能编程团队代码,接下就可以执行了:python CrewAI-Game.py
3. 执行过程监控
CrewAI 执行过程中,我们可以看到 3 个智能体执行的详细信息,包括思考过程、工具调用(如有)和最终输出。



4. 运行生成的程序
最后,我们运行本地存储的小游戏程序:python Game.py
因为程序使用到了 Pygame 包,如果虚拟环境没有的话,需要安装一下:pip install pygame
最终我们运行起来了贪吃蛇游戏:

至此,本次需求基本完成了。我们通过定义的 3 个智能体和对应的任务,最终智能体与 Qwen2.5-Coder 交互完成软件需求程序的编写。
程序最终还能跑起来,这也进一步体现了 Qwen2.5-Coder 模型的语言和代码推理能力!
三、常见问题与最佳实践
在实际开发中,可能会遇到一些常见问题,以下是排查思路和最佳实践建议。
1. 模型响应超时或中断
如果 crew.kickoff() 执行时间过长或中断,可能是由于本地显存不足或网络请求超时。建议:
- 检查 Ollama 进程是否正常运行:
ollama ps
- 尝试减小模型参数量(如从 7B 切换到 1.5B)进行测试。
- 增加
timeout 参数(如果 CrewAI 版本支持)或在脚本中添加重试机制。
2. 代码格式不符合预期
有时模型输出的代码可能包含 Markdown 标记(如 python ... )。可以在 Prompt 的 expected_output 中强调'仅输出纯文本代码',或者在接收输出后使用正则表达式清洗。
3. 智能体协作冲突
如果多个智能体互相覆盖对方的修改,可以调整 allow_delegation 参数。例如,让首席质量工程师拥有更高的权限,或者设置任务顺序为串行而非并行,确保逻辑闭环。
4. 扩展性建议
- 增加角色:可以根据需求增加'产品经理'角色来细化需求描述,或增加'安全审计员'角色。
- 记忆功能:利用 CrewAI 的 Memory 功能,让智能体记住之前的对话上下文,提高长任务的连贯性。
- 工具集成:可以为智能体挂载外部工具,如代码解释器、搜索引擎等,增强实际解决问题的能力。
四、总结
本文详细介绍了如何基于 Qwen2.5-Coder 模型和 CrewAI 多智能体框架构建智能编程系统。通过本地部署 Ollama 实现低成本推理,利用 CrewAI 编排多个专业角色(工程师、QA、审核),实现了从需求输入到代码生成、审查、落地的全流程自动化。
这一方案不仅展示了大模型在代码生成领域的潜力,也为构建更复杂的 AI 辅助开发工具提供了可行的技术路径。随着模型能力的进一步提升和多智能体框架的成熟,未来有望实现更自主的软件工程自动化。
注:本文旨在技术交流,代码仅供参考。生产环境使用时请注意数据安全和模型合规性。