Files
aiagent/backend/scripts/generate_android_agent.py
2026-01-20 18:05:31 +08:00

395 lines
12 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
生成Android应用开发助手Agent
这是一个专门用于Android应用开发的Agent能够帮助开发者快速生成、优化和调试Android应用
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from sqlalchemy.orm import Session
from app.core.database import SessionLocal
from app.models.agent import Agent
from app.models.user import User
from datetime import datetime
import uuid
def generate_android_agent(db: Session, username: str = "admin"):
"""生成Android应用开发助手Agent"""
print("=" * 60)
print("生成Android应用开发助手Agent")
print("=" * 60)
print()
# 查找用户
user = db.query(User).filter(User.username == username).first()
if not user:
print(f"❌ 未找到用户 '{username}',请先创建该用户")
return
print(f"✅ 找到用户: {user.username} (ID: {user.id})")
print()
# 生成Android应用开发助手工作流配置
# 工作流结构:
# 开始 -> 需求分析 -> 需求分类 -> [代码生成|架构设计|问题诊断|性能优化] -> 结果整合 -> 格式化输出 -> 结束
nodes = []
edges = []
# 1. 开始节点
start_node = {
"id": "start-1",
"type": "start",
"position": {"x": 50, "y": 400},
"data": {
"label": "开始",
"output_format": "json"
}
}
nodes.append(start_node)
# 2. 需求理解与分析节点LLM节点
requirement_analysis_node = {
"id": "llm-requirement-analysis",
"type": "llm",
"position": {"x": 250, "y": 400},
"data": {
"label": "需求理解与分析",
"provider": "deepseek",
"model": "deepseek-chat",
"temperature": "0.3",
"max_tokens": "2000",
"prompt": """你是一个专业的Android开发顾问。请分析用户的需求提取以下信息
用户需求:{{query}}
请以JSON格式输出分析结果
{
"app_type": "应用类型(工具类、社交类、电商类、游戏类等)",
"core_modules": ["模块1", "模块2", ...],
"target_users": "目标用户群体",
"complexity": "简单|中等|复杂",
"estimated_weeks": 数字,
"tech_stack": ["技术1", "技术2", ...],
"summary": "需求摘要"
}
请确保输出是有效的JSON格式。"""
}
}
nodes.append(requirement_analysis_node)
edges.append({
"id": "e1",
"source": "start-1",
"target": "llm-requirement-analysis"
})
# 3. 数据准备节点Transform节点- 用于传递数据
data_prepare_node = {
"id": "transform-prepare",
"type": "transform",
"position": {"x": 450, "y": 400},
"data": {
"label": "准备数据",
"mode": "merge",
"mapping": {
"requirement_analysis": "{{output}}",
"user_query": "{{query}}"
}
}
}
nodes.append(data_prepare_node)
edges.append({
"id": "e2",
"source": "llm-requirement-analysis",
"target": "transform-prepare"
})
# 4. 需求分类节点(条件节点)
classify_condition = {
"id": "condition-classify",
"type": "condition",
"position": {"x": 650, "y": 400},
"data": {
"label": "需求分类",
"condition": "{user_query} contains '生成' or {user_query} contains '创建' or {user_query} contains '写代码' or {user_query} contains '代码'"
}
}
nodes.append(classify_condition)
edges.append({
"id": "e3",
"source": "transform-prepare",
"target": "condition-classify"
})
# 5. 代码生成节点LLM节点- true分支
code_generation_node = {
"id": "llm-code-generation",
"type": "llm",
"position": {"x": 850, "y": 300},
"data": {
"label": "代码生成",
"provider": "deepseek",
"model": "deepseek-chat",
"temperature": "0.2",
"max_tokens": "4000",
"prompt": """你是一个专业的Android开发工程师。根据以下需求分析生成完整的Android代码。
用户原始需求:{{user_query}}
需求分析结果:{{requirement_analysis}}
请生成以下内容:
1. Java/Kotlin代码包含必要的注释
2. 布局XML文件
3. 资源文件配置(如需要)
4. 依赖配置build.gradle如需要
5. 使用说明
代码要求:
- 遵循Android开发最佳实践
- 使用现代Android架构推荐MVVM
- 包含错误处理
- 代码注释清晰
- 支持Android API 24+
请以Markdown格式输出包含代码块使用正确的语言标识java、kotlin、xml等"""
}
}
nodes.append(code_generation_node)
edges.append({
"id": "e4-true",
"source": "condition-classify",
"target": "llm-code-generation",
"sourceHandle": "true"
})
# 6. 架构设计节点LLM节点- false分支当不是代码生成时
architecture_node = {
"id": "llm-architecture",
"type": "llm",
"position": {"x": 850, "y": 500},
"data": {
"label": "架构设计/问题诊断/性能优化",
"provider": "deepseek",
"model": "deepseek-chat",
"temperature": "0.3",
"max_tokens": "3000",
"prompt": """你是一个Android开发专家。根据用户需求提供专业的开发建议。
用户原始需求:{{user_query}}
需求分析结果:{{requirement_analysis}}
请根据需求类型提供相应的帮助:
**如果是架构设计需求**,请提供:
1. 架构模式选择MVP/MVVM/MVI及理由
2. 模块划分方案
3. 技术栈选型(框架、库、工具)
4. 目录结构设计
5. 数据流设计
6. 扩展性考虑
**如果是问题诊断需求**包含错误、崩溃、问题、bug等关键词请提供
1. 问题类型(崩溃/ANR/内存泄漏/网络错误等)
2. 根本原因分析
3. 解决方案(步骤清晰)
4. 修复代码示例
5. 预防措施
**如果是性能优化需求**(包含优化、性能、速度、卡顿等关键词),请提供:
1. 性能瓶颈分析
2. 优化方案(按优先级排序)
3. 具体优化代码
4. 优化前后对比
5. 性能测试建议
请以Markdown格式输出确保内容专业、清晰、实用。"""
}
}
nodes.append(architecture_node)
edges.append({
"id": "e4-false",
"source": "condition-classify",
"target": "llm-architecture",
"sourceHandle": "false"
})
# 7. 结果整合节点Transform节点
integration_node = {
"id": "transform-integration",
"type": "transform",
"position": {"x": 1050, "y": 400},
"data": {
"label": "结果整合",
"mode": "merge",
"mapping": {
"requirement_analysis": "{{requirement_analysis}}",
"user_query": "{{user_query}}",
"solution": "{{output}}",
"agent_type": "Android应用开发助手",
"timestamp": "{{$timestamp}}"
}
}
}
nodes.append(integration_node)
# 连接代码生成节点到整合节点
edges.append({
"id": "e5-code",
"source": "llm-code-generation",
"target": "transform-integration"
})
# 连接架构设计节点到整合节点
edges.append({
"id": "e5-arch",
"source": "llm-architecture",
"target": "transform-integration"
})
# 8. 格式化输出节点LLM节点
format_node = {
"id": "llm-format",
"type": "llm",
"position": {"x": 1250, "y": 400},
"data": {
"label": "格式化输出",
"provider": "deepseek",
"model": "deepseek-chat",
"temperature": "0.1",
"max_tokens": "4000",
"prompt": """请将以下Android开发方案整理成专业的Markdown文档格式。
方案内容:{{input}}
文档结构:
1. **需求分析摘要**
- 应用类型
- 核心模块
- 技术复杂度
- 开发周期估算
2. **解决方案**
- 详细说明
- 代码示例(如有)
- 架构设计(如有)
3. **实施步骤**
- 步骤清晰的实施指南
4. **注意事项**
- 重要提醒
- 常见问题
5. **参考资料**
- 相关文档链接
请确保格式清晰、代码高亮正确、结构完整。如果输入中已经包含格式良好的内容,请保持原有格式并适当优化。"""
}
}
nodes.append(format_node)
edges.append({
"id": "e6",
"source": "transform-integration",
"target": "llm-format"
})
# 9. 结束节点
end_node = {
"id": "end-1",
"type": "end",
"position": {"x": 1450, "y": 400},
"data": {
"label": "结束",
"description": "返回最终结果"
}
}
nodes.append(end_node)
edges.append({
"id": "e7",
"source": "llm-format",
"target": "end-1"
})
# 创建或更新Agent
workflow_config = {
"nodes": nodes,
"edges": edges
}
agent = db.query(Agent).filter(
Agent.name == "Android应用开发助手",
Agent.user_id == user.id
).first()
if agent:
agent.workflow_config = workflow_config
agent.description = "帮助开发者快速生成、优化和调试Android应用。支持代码生成、架构设计、问题诊断、性能优化等功能。"
agent.updated_at = datetime.now()
agent.status = "published" # 设置为已发布状态,可直接使用
print("⚠️ Agent 'Android应用开发助手' 已存在,将更新它...")
else:
agent = Agent(
id=str(uuid.uuid4()),
name="Android应用开发助手",
description="帮助开发者快速生成、优化和调试Android应用。支持代码生成、架构设计、问题诊断、性能优化等功能。",
workflow_config=workflow_config,
status="published", # 直接设置为已发布状态,可立即使用
user_id=user.id,
version=1
)
db.add(agent)
try:
db.commit()
db.refresh(agent)
print()
print("✅ Agent创建/更新成功!")
print()
print(f"📋 Agent信息")
print(f" - ID: {agent.id}")
print(f" - 名称: {agent.name}")
print(f" - 状态: {agent.status} (已发布,可直接使用)")
print(f" - 版本: {agent.version}")
print(f" - 节点数: {len(nodes)}")
print(f" - 连接数: {len(edges)}")
print()
print("🎯 功能特性:")
print(" ✅ 需求分析与理解")
print(" ✅ 代码生成Activity、ViewModel、Repository等")
print(" ✅ 架构设计建议MVP/MVVM/MVI")
print(" ✅ 问题诊断与修复")
print(" ✅ 性能优化建议")
print(" ✅ 格式化输出")
print()
print("💡 使用提示:")
print(" 1. 在Agent管理页面找到 'Android应用开发助手'")
print(" 2. 点击 '使用' 按钮开始使用")
print(" 3. 输入你的Android开发需求例如")
print(" - '帮我生成一个登录功能的代码'")
print(" - '设计一个电商应用的架构'")
print(" - '我的应用崩溃了,错误信息是...'")
print(" - '如何优化列表页面的滚动性能?'")
print()
return agent
except Exception as e:
db.rollback()
print(f"❌ 创建Agent失败: {str(e)}")
import traceback
traceback.print_exc()
return None
def main():
"""主函数"""
db = SessionLocal()
try:
generate_android_agent(db, username="admin")
finally:
db.close()
if __name__ == "__main__":
main()