import re with open('index.html', 'r', encoding='utf-8') as f: content = f.read() # 備份 with open('index.html.backup', 'w', encoding='utf-8') as f: f.write(content) print("Backup created: index.html.backup") # 舊代碼 old = ''' async function callClaudeAPI(prompt) { try { const response = await fetch("https://api.anthropic.com/v1/messages", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ model: "claude-sonnet-4-20250514", max_tokens: 2000, messages: [ { role: "user", content: prompt } ] }) }); if (!response.ok) { throw new Error(`API request failed: ${response.status}`); } const data = await response.json(); let responseText = data.content[0].text; responseText = responseText.replace(/```json\\n?/g, "").replace(/```\\n?/g, "").trim(); return JSON.parse(responseText); } catch (error) { console.error("Error calling Claude API:", error); throw error; } }''' # 新代碼 new = ''' async function callClaudeAPI(prompt, api = 'gemini') { try { // 調用後端 Flask API,避免 CORS 錯誤 const response = await fetch("/api/llm/generate", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ api: api, prompt: prompt, max_tokens: 2000 }) }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || `API 請求失敗: ${response.status}`); } const data = await response.json(); if (!data.success) { throw new Error(data.error || 'API 調用失敗'); } let responseText = data.text; responseText = responseText.replace(/```json\\n?/g, "").replace(/```\\n?/g, "").trim(); return JSON.parse(responseText); } catch (error) { console.error("Error calling LLM API:", error); alert(`AI 生成錯誤: ${error.message}\\n\\n請確保:\\n1. Flask 後端已啟動 (python app_updated.py)\\n2. 已在 .env 文件中配置 LLM API Key\\n3. 網路連線正常`); throw error; } }''' # 替換 new_content = content.replace(old, new) if new_content == content: print("ERROR: Pattern not found, trying alternative method...") # 使用更簡單的替換 new_content = content.replace( 'const response = await fetch("https://api.anthropic.com/v1/messages", {', 'const response = await fetch("/api/llm/generate", {' ) new_content = new_content.replace( 'async function callClaudeAPI(prompt) {', 'async function callClaudeAPI(prompt, api = \'gemini\') {' ) if new_content != content: print("SUCCESS: Applied simple replacement") else: print("ERROR: Could not fix the file") exit(1) else: print("SUCCESS: Pattern replaced") # 寫回 with open('index.html', 'w', encoding='utf-8') as f: f.write(new_content) print("File updated: index.html") print("\nNext steps:") print("1. Start Flask backend: python app_updated.py") print("2. Reload browser page (Ctrl+F5)") print("3. Test AI generation")