news 2026/7/1 9:51:45

CrewAI+FastAPI实现多Agent协作完成软件编码项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CrewAI+FastAPI实现多Agent协作完成软件编码项目

目录:

    • 一、项目简介和代码结构
    • 二、apiTest.py(实现游戏代码)
    • 三、问题分析
      • 1、为啥流式和非流式输出都没有指定文件去写入游戏代码的响应,就直接生成一个游戏代码文件?
        • 1.1 后端服务的“黑箱”行为
        • 1.2 客户端脚本的局限性

一、项目简介和代码结构

本项目实现一个python编码智能体;通过三个角色(高级软件工程师,软件质量控制工程师,首席软件质量控制工程师)完成编码工作。

二、apiTest.py(实现游戏代码)

importrequestsimportjsonimportlogging# 设置日志模版logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')logger=logging.getLogger(__name__)url="http://localhost:8012/v1/chat/completions"headers={"Content-Type":"application/json"}# 构造消息体# 默认非流式输出 True or Falsestream_flag=False# 用户输入# game = "What is the game you would like to build? What will be the mechanics?"# game = '''# 1、游戏名称:经典贪吃蛇# 2、游戏描述:玩家控制一条不断移动的蛇,目标是吃掉屏幕上出现的食物,让蛇变得越来越长。游戏结束的条件是蛇撞到自己或墙壁。# 3、游戏机制:# 基本操作:玩家使用方向键(上下左右)控制蛇的移动方向。蛇只能向当前方向前进,不能倒退。# 游戏目标:吃掉屏幕上随机出现的食物,每吃一个,蛇的长度会增加。游戏难度随着蛇的长度增加而提升。# 得分系统:每吃一个食物得1分,游戏结束时,玩家的分数是最终蛇吃到食物的总数。# 游戏结束条件:撞到自己的身体或撞到屏幕边界时,游戏结束。# '''game=''' 1、游戏名称:经典俄罗斯方块 2、游戏描述:玩家通过移动和旋转下落的方块,使它们在底部排成完整的行。每当一行被填满,行就会消失,玩家获得积分。方块下落速度控制在一个合理的速度上,不要快。要求四种不同形状的方块,分别为I、T、L、Z,每个方块由四个小方格组成。 3、游戏机制: (1)基本操作: 方向键左/右:移动方块左右。 方向键下:加速方块下落。 方向键上:旋转方块。 (2)游戏目标: 排列下落的方块,使它们在底部形成完整的行。 当一行被完全填满,没有空隙时,该行会消除并获得积分。 (3)得分系统: 每消除一行得分1分,一次消除多行可获得额外得分。 随着时间推移,方块下落速度逐渐加快,难度逐步提升。 (4)游戏结束条件:当方块堆积到顶部,无法继续放置新的方块时,游戏结束。 '''data={"messages":[{"role":"user","content":game}],"stream":stream_flag,}# 接收流式输出ifstream_flag:try:withrequests.post(url,stream=True,headers=headers,data=json.dumps(data))asresponse:forlineinresponse.iter_lines():ifline:json_str=line.decode('utf-8').strip("data: ")# 检查是否为空或不合法的字符串ifnotjson_str:logger.info(f"收到空字符串,跳过...")continue# 确保字符串是有效的JSON格式ifjson_str.startswith('{')andjson_str.endswith('}'):try:data=json.loads(json_str)ifdata['choices'][0]['finish_reason']=="stop":logger.info(f"接收JSON数据结束")else:logger.info(f"流式输出,响应内容是:{data['choices'][0]['delta']['content']}")exceptjson.JSONDecodeErrorase:logger.info(f"JSON解析错误:{e}")else:print(f"无效JSON格式:{json_str}")exceptExceptionase:print(f"Error occurred:{e}")# 接收非流式输出处理else:# 发送post请求response=requests.post(url,headers=headers,data=json.dumps(data))# logger.info(f"接收到返回的响应原始内容: {response.json()}\n")content=response.json()['choices'][0]['message']['content']logger.info(f"非流式输出,响应内容是:{content}\n")

会根据提示词游戏的规则生成游戏代码,在historyCode目录下。

三、问题分析

1、为啥流式和非流式输出都没有指定文件去写入游戏代码的响应,就直接生成一个游戏代码文件?

您的问题核心在于:为什么流式输出的内容会直接生成一个游戏脚本文件,而代码中并没有显式的文件写入逻辑? 这确实是一个值得深入探讨的现象。以下是详细分析:

关键原因:后端服务的 CrewtestprojectCrew 隐藏了文件生成逻辑

您观察到的现象(自动生成游戏脚本文件)是由 后端服务 的 CrewtestprojectCrew 实现决定的,而 客户端脚本(您提供的代码)仅负责发送请求和打印响应。具体原因如下:

1.1 后端服务的“黑箱”行为

在您的 FastAPI 后端代码中,这一行是关键:

result=CrewtestprojectCrew(model).crew().kickoff(inputs=inputs)

这里的 CrewtestprojectCrew 是一个 LangChain CrewAI 的智能体团队,它的 kickoff() 方法可能默认包含以下隐藏行为:

  • 自动生成文件:CrewAI 的任务(Task)可以配置 output_file 参数(例如
    output_file=“game.py”),导致生成的代码直接保存到文件。
  • 工作目录操作:智能体可能在当前工作目录(运行服务的目录)中创建文件,而无需客户端显式指定路径。
1.2 客户端脚本的局限性

您的客户端代码 仅处理API响应,没有文件写入逻辑:

# 非流式输出content=response.json()['choices'][0]['message']['content']logger.info(f"非流式输出,响应内容是:{content}\n")# 仅打印内容,未写入文件

如果游戏脚本文件自动生成,说明文件写入是由 后端服务 完成的。

项目代码地址:
https://github.com/NanGePlus/CrewAITest/tree/main/crewAIWithCoding

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 11:07:45

CosyVoice3支持语音能量调节吗?响度一致性优化进展

CosyVoice3支持语音能量调节吗?响度一致性优化进展 在智能语音产品日益普及的今天,用户对“听感”的要求早已不再局限于“能听清”,而是追求更自然、更舒适的连续聆听体验。尤其是在虚拟主播、有声书朗读或客服机器人这类需要批量输出语音的…

作者头像 李华
网站建设 2026/7/1 8:31:17

CSS vh响应式布局的常见问题与解决方案

搞定移动端全屏布局:vh的坑与dvh的救赎你有没有遇到过这样的情况?在电脑上调试得好好的登录页,用height: 100vh实现“首屏撑满”,结果一拿到手机 Safari 上预览——页面居然能上下滚动?底部还莫名其妙多出一块白边。用…

作者头像 李华
网站建设 2026/6/29 4:22:55

AUTOSAR软件开发零基础指南:初学者必备知识

AUTOSAR软件开发零基础指南:从“看不懂”到“能上手”的完整路径 当你的同事说“这个模块要走RTE发信号”,你却在想:“RTE是啥?” 如果你刚接触汽车电子,面对满屏的 SWC、RTE、BSW、ARXML 感觉像在读天书——别慌。…

作者头像 李华
网站建设 2026/7/1 0:32:18

CosyVoice3能否用于博物馆导览?多语言解说语音生成

CosyVoice3 能否用于博物馆导览?多语言解说语音生成的实践与突破 在一座国家级博物馆里,一位来自日本的游客戴上导览耳机,轻触屏幕选择了“粤语温柔语气”模式。几秒后,一段带着岭南韵味、语调亲切的粤语解说缓缓响起&#xff1a…

作者头像 李华
网站建设 2026/6/30 1:36:41

CosyVoice3能否用于电话机器人?实时语音合成对接方案

CosyVoice3能否用于电话机器人?实时语音合成对接方案 在智能客服系统日益普及的今天,一个电话机器人是否“像人”,往往决定了用户愿意听下去还是直接挂断。冰冷机械的语音早已无法满足现代服务体验的需求——人们期待的是有温度、有语气、甚至…

作者头像 李华
网站建设 2026/6/26 11:07:18

CosyVoice3支持语音风格迁移泛化能力吗?跨语种情感迁移

CosyVoice3 支持语音风格迁移泛化能力吗?跨语种情感迁移 在多语言内容创作日益频繁的今天,我们是否还能接受一个TTS系统只能“用固定的语气说普通话”?当虚拟主播需要同时演绎中文温情旁白与英文激昂解说时,传统语音合成方案往往束…

作者头像 李华