-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAutoDev.py
More file actions
231 lines (201 loc) · 7.01 KB
/
Copy pathAutoDev.py
File metadata and controls
231 lines (201 loc) · 7.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# Day41 - 项目3:AI全自动软件开发团队(AutoDev)
# 一句话需求 → 产品→架构→开发→测试→文档→完整交付
import os
import sys
from datetime import datetime
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 检查 API Key
KIMI_API_KEY = os.getenv("OPENAI_API_KEY", "")
KIMI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.moonshot.cn/v1")
KIMI_MODEL = "moonshot-v1-32k"
if not KIMI_API_KEY:
print("⚠️ 警告: 未设置 OPENAI_API_KEY 环境变量")
print(" 请在 .env 文件中设置 Kimi API Key")
sys.exit(1)
# ===================== 配置 =====================
from langchain_openai import ChatOpenAI
from crewai import Agent, Task, Crew, Process
llm = ChatOpenAI(
model=KIMI_MODEL,
api_key=KIMI_API_KEY,
base_url=KIMI_BASE_URL,
temperature=0.2
)
print(f"🚀 使用 Kimi 模型: {KIMI_MODEL}")
# ===================== 1. 5人AI专家团队 =====================
# 1)产品经理
pm = Agent(
role="产品经理",
goal="输出清晰、可落地、完整的需求文档",
backstory="资深互联网PM,8年产品经验,擅长需求拆解、功能定义、用户体验设计,善于把握产品方向",
llm=llm,
verbose=True,
allow_delegation=False
)
# 2)架构师
architect = Agent(
role="架构师",
goal="设计简洁可扩展的Python项目架构",
backstory="10年AI架构师,精通Agent、RAG、后端服务设计,擅长高可用、可扩展系统架构",
llm=llm,
verbose=True,
allow_delegation=False
)
# 3)开发工程师
coder = Agent(
role="Python高级工程师",
goal="编写完整、可直接运行、无Bug的代码",
backstory="严谨、工程化强,5年AI项目开发经验,精通Python、FastAPI、Gradio、数据库等技术栈",
llm=llm,
verbose=True,
allow_delegation=False
)
# 4)测试工程师
tester = Agent(
role="测试专家",
goal="找出Bug、给出修复方案、验证功能",
backstory="细节狂魔,专注于单元测试、集成测试、端到端测试,保证系统稳定可用",
llm=llm,
verbose=True,
allow_delegation=False
)
# 5)文档工程师
writer = Agent(
role="技术文档工程师",
goal="编写清晰易懂的README、使用教程",
backstory="技术写作专家,文档清晰、规范、使用者友好,擅长API文档和用户手册",
llm=llm,
verbose=True,
allow_delegation=False
)
# ===================== 2. 完整开发流程 =====================
# 【你只需要改这里!】输入任意项目需求
IDEA = "开发一个AI智能问答助手,带记忆、工具、Web界面"
# 创建输出目录
OUTPUT_DIR = f"./autodev_output_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
os.makedirs(OUTPUT_DIR, exist_ok=True)
def save_output(file_name, content):
"""保存输出到文件"""
file_path = os.path.join(OUTPUT_DIR, file_name)
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
print(f"✓ 已保存: {file_path}")
task1 = Task(
description=f"""
根据以下idea输出完整产品需求文档:
{IDEA}
需求文档应包含:
1. 产品定位和目标用户
2. 核心功能列表(用户故事)
3. 优先级排序
4. MVP版本功能范围
5. 非功能需求(性能、安全等)
""",
agent=pm,
expected_output="完整PRD需求文档,包含产品定位、功能列表、优先级、MVP范围"
)
task2 = Task(
description="""
根据需求文档设计项目架构:
1. 技术选型(语言、框架、数据库等)
2. 模块划分和职责
3. 核心流程图
4. 目录结构
5. 关键类和方法设计
6. 数据库设计(如果需要)
""",
agent=architect,
expected_output="架构设计文档,包含技术栈、模块划分、流程图、目录结构",
context=[task1]
)
task3 = Task(
description="""
根据架构设计编写完整可运行的Python代码:
1. 创建项目目录结构
2. 编写所有源代码文件
3. 确保代码可直接运行
4. 包含必要的配置文件
5. 添加注释说明
""",
agent=coder,
expected_output="完整项目代码,包含所有源文件、配置文件",
context=[task1, task2]
)
task4 = Task(
description="""
测试代码并输出测试报告:
1. 检查代码语法错误
2. 找出潜在Bug
3. 给出修复方案
4. 提供单元测试示例
5. 验证功能完整性
""",
agent=tester,
expected_output="测试报告,包含问题清单、修复方案、测试用例",
context=[task1, task2, task3]
)
task5 = Task(
description="""
编写完整的技术文档:
1. README.md - 项目介绍、安装方法、使用说明
2. 快速入门指南
3. API文档(如果有)
4. 部署指南
5. 常见问题解答
""",
agent=writer,
expected_output="完整技术文档,包含README、使用教程、部署指南",
context=[task1, task2, task3, task4]
)
# ===================== 3. 启动全自动开发 =====================
crew = Crew(
agents=[pm, architect, coder, tester, writer],
tasks=[task1, task2, task3, task4, task5],
process=Process.sequential,
verbose=True
)
# 执行!
if __name__ == "__main__":
print("="*80)
print("🚀 AI全自动软件开发团队启动")
print("="*80)
print(f"💡 需求: {IDEA}")
print(f"📁 输出目录: {OUTPUT_DIR}")
print("="*80)
print("\n等待项目交付... (预计需要5-10分钟)\n")
try:
result = crew.kickoff()
print("\n" + "="*80)
print("🎉 项目开发完成!")
print("="*80)
# 保存结果
if result:
# 保存每个任务的输出
if task1.output:
save_output("1_prd.md", str(task1.output))
if task2.output:
save_output("2_architecture.md", str(task2.output))
if task3.output:
save_output("3_code.md", str(task3.output))
if task4.output:
save_output("4_test_report.md", str(task4.output))
if task5.output:
save_output("5_documentation.md", str(task5.output))
# 保存完整结果
save_output("final_result.md", str(result))
print(f"\n📁 输出文件已保存到: {OUTPUT_DIR}")
print("\n📋 输出清单:")
print(" - 1_prd.md (需求文档)")
print(" - 2_architecture.md (架构设计)")
print(" - 3_code.md (代码实现)")
print(" - 4_test_report.md (测试报告)")
print(" - 5_documentation.md (技术文档)")
print("\n✨ 任务完成!")
except Exception as e:
print(f"\n❌ 开发过程中发生错误: {type(e).__name__}")
print(f" 错误信息: {str(e)}")
import traceback
print(f" 详细错误:\n{traceback.format_exc()}")
sys.exit(1)