"""
Antigravity代碼生成器 - 藍圖小老鼠 v6.0
調用用戶的Antigravity AI生成代碼,並進行17層驗證
"""
import asyncio
import json
import os
from typing import Dict, Any, Optional
# 導入17層驗證
try:
from validation_17_layers import validate_code_17_layers
except ImportError:
print("⚠️ validation_17_layers未找到,使用模擬驗證")
def validate_code_17_layers(code, node_id, spec=None):
return {
'passed': True,
'quality_score': 85,
'layers': [],
'suggestions': []
}
# 導入Prompt生成器
from prompt_generator import generate_code_prompt, generate_fix_prompt
async def generate_code_with_ai(
requirement: str,
framework: str,
socratic_answers: Dict[str, str],
max_retries: int = 3
) -> Dict[str, Any]:
"""
使用Antigravity AI生成代碼,帶17層驗證和自動修復循環
這是核心:BYOK模式,用戶的AI生成,我們驗證
Args:
requirement: 用戶需求
framework: 框架選擇
socratic_answers: 蘇格拉底答案
max_retries: 最大重試次數
Returns:
生成結果字典
"""
print(f"🚀 開始代碼生成流程")
print(f" 需求: {requirement}")
print(f" 框架: {framework}")
print(f" 答案: {socratic_answers}")
# 1. 生成初始Prompt
prompt = generate_code_prompt(
requirement=requirement,
framework=framework,
socratic_answers=socratic_answers
)
print(f"\n📝 Prompt已生成,長度: {len(prompt)}")
# 2. 迭代生成+驗證
for attempt in range(1, max_retries + 1):
print(f"\n🔄 嘗試 {attempt}/{max_retries}")
# 調用Antigravity AI生成代碼
code_result = await call_antigravity_ai(prompt)
if not code_result['success']:
print(f" ❌ AI調用失敗: {code_result.get('error')}")
continue
code = code_result['code']
print(f" ✅ 代碼已生成,長度: {len(code)}")
# 17層驗證
print(f" 🔍 開始17層驗證...")
validation = validate_code_17_layers(
code=code,
node_id=f"bluemouse_generated_{attempt}",
spec=None
)
print(f" 📊 驗證結果:")
print(f" 通過: {validation['passed']}")
print(f" 質量分數: {validation['quality_score']}/100")
print(f" 通過層級: {validation.get('passed_layers', 0)}/{validation.get('total_layers', 17)}")
if validation['passed']:
print(f"\n✅ 代碼生成成功!")
return {
'success': True,
'code': code,
'validation': validation,
'attempts': attempt,
'quality_score': validation['quality_score']
}
else:
print(f" ⚠️ 驗證未通過,生成修復Prompt...")
# 生成修復Prompt
prompt = generate_fix_prompt(code, validation)
print(f" 🔧 修復Prompt已生成")
# 最大重試後仍失敗
print(f"\n❌ 達到最大重試次數,使用最後一次生成的代碼")
return {
'success': False,
'code': code,
'validation': validation,
'attempts': max_retries,
'quality_score': validation['quality_score'],
'error': '未通過17層驗證'
}
async def call_antigravity_ai(prompt: str) -> Dict[str, Any]:
"""
調用用戶的Antigravity AI
這裡是寄生架構的核心:調用宿主的AI能力
Args:
prompt: 代碼生成Prompt
Returns:
{'success': bool, 'code': str, 'error': str}
"""
# 檢查是否在Antigravity環境中
antigravity_mode = os.getenv('ANTIGRAVITY_MODE') == 'true'
if antigravity_mode:
# 嘗試調用Antigravity的內聯生成
try:
# 這裡需要根據實際的Antigravity API調整
# 暫時使用模擬
print(f" 🤖 調用Antigravity AI...")
# 模擬AI生成(實際應該調用Antigravity的API)
# 在真實環境中,這裡會是:
# response = await antigravity.ai.generate(prompt)
# 暫時返回模擬代碼
code = generate_mock_code(prompt)
return {
'success': True,
'code': code
}
except Exception as e:
return {
'success': False,
'error': f'Antigravity AI調用失敗: {str(e)}'
}
else:
# 非Antigravity環境,返回模擬代碼
print(f" ⚠️ 非Antigravity環境,使用模擬AI")
code = generate_mock_code(prompt)
return {
'success': True,
'code': code
}
def generate_mock_code(prompt: str) -> str:
"""
生成高品質模擬代碼(具現化強化版)
"""
if 'FastAPI' in prompt:
return """
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel, Field
from typing import List, Optional
import time
app = FastAPI(title="BlueMouse Generated API")
class Item(BaseModel):
name: str = Field(..., example="高效組件")
price: float = Field(..., gt=0)
stock: int = Field(..., ge=0)
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
\"\"\"
建立項目 - 具備 Pydantic 類型驗證與防錯處理
\"\"\"
try:
# 模擬數據庫寫入循環 (用於效能壓測)
start_time = time.time()
# 實作邏輯...
return item
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
"""
elif 'Django' in prompt:
return """
# models.py
from django.db import models
from django.db.models import F
class Product(models.Model):
\"\"\"商品模型 - 實現樂觀鎖\"\"\"
name = models.CharField(max_length=200)
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.IntegerField()
version = models.IntegerField(default=0)
def purchase(self, quantity: int):
# 實作樂觀鎖優化
updated = Product.objects.filter(id=self.id, version=self.version, stock__gte=quantity).update(
stock=F('stock') - quantity,
version=F('version') + 1
)
return updated > 0
"""
else:
return "# 模擬代碼\n# BlueMouse Engine: Generic Fallback\ndef main():\n print('Hello World')\n\nif __name__ == '__main__':\n main()"
async def test_workflow():
"""測試完整工作流程"""
print("\n" + "="*60)
print("🧪 測試藍圖小老鼠 v6.0 工作流程")
print("="*60)
result = await generate_code_with_ai(
requirement="電商系統",
framework="Django",
socratic_answers={
"q1": "optimistic_lock",
"q2": "polling"
},
max_retries=3
)
print("\n" + "="*60)
print("📋 最終結果")
print("="*60)
print(f"成功: {result['success']}")
print(f"質量分數: {result['quality_score']}/100")
print(f"嘗試次數: {result['attempts']}")
if result['success']:
print(f"\n✅ 代碼已生成並通過驗證!")
else:
print(f"\n⚠️ 代碼未通過驗證,但已生成")
print(f"建議: {result['validation'].get('suggestions', [])}")
return result
if __name__ == '__main__':
# 運行測試
asyncio.run(test_workflow())