3.6 KiB
3.6 KiB
opencode 代码修復工作流
2026-06-20 新增,来自 XSS 修复 + Python backend bug 修复 + 部署验证 牧尘纠正:所有编码任务用 opencode,不要自己 patch
适用场景
任何需要修改 gaokao-site 代码的任务(Python 后端、HTML/JS 前端、CSS):
- 修 bug(API 500、JS 崩溃、XSS)
- 加功能(新 API、新页面元素)
- 改文案(导航改名、法律声明更新)
- 重构(提取公共代码、清理重复)
工作流
我(小唯)
├─ 分析问题,定位文件:行号
├─ opencode run --dir ~/mc/gaokao-site "具体修复指令"
│ └─ opencode 读代码 → patch → 编译/验证
├─ 我验收改动
├─ rsync 到服务器
├─ systemctl restart gaokao-chat
└─ curl 验证 API + 页面
opencode 调用模板
# 修 Python 后端
DEEPSEEK_API_KEY="sk-b12...6bbd" opencode run \
--dir ~/mc/gaokao-site \
-m deepseek/deepseek-v4-flash \
"修复问题...每次修完用 python3 -c 'import py_compile; py_compile.compile(\"文件.py\", doraise=True); print(\"OK\")' 验证"
# 修 HTML/JS 前端
DEEPSEEK_API_KEY="sk-b12...6bbd" opencode run \
--dir ~/mc/gaokao-site \
-m deepseek/deepseek-v4-flash \
"修复 HTML XSS...修改后用 python3 验证"
关键参数说明
| 参数 | 值 | 说明 |
|---|---|---|
--dir |
~/mc/gaokao-site |
opencode 的工作目录 |
-m |
deepseek/deepseek-v4-flash |
模型选择 |
| 环境变量 | DEEPSEEK_API_KEY=... |
必须显式传递,否则 opencode 找不到 key |
部署验证
# 1. 上传文件
rsync -avz \
~/mc/gaokao-site/gaokao_chat_server_v2.py \
~/mc/gaokao-site/index.html \
root@192.144.179.11:/www/wwwroot/gaokao/
# 2. 重启服务
sshpass -p 'xue.2538' ssh root@192.144.179.11 "systemctl restart gaokao-chat"
sleep 2
# 3. 验证服务 + API
sshpass -p 'xue.2538' ssh root@192.144.179.11 "systemctl is-active gaokao-chat && curl -s http://127.0.0.1:8080/health"
sshpass -p 'xue.2538' ssh root@192.144.179.11 'curl -s -X POST -H "Content-Type: application/json" -d "{\"score\":550,\"subject\":\"物理类\"}" http://127.0.0.1:8080/api/prob' | python3 -c "import json,sys;d=json.load(sys.stdin);print('chong:',len(d['chong']),'wen:',len(d['wen']),'bao:',len(d['bao']))"
# 4. 验证 AI 对话
sshpass -p 'xue.2538' ssh root@192.144.179.11 'SID=$(curl -s -X POST -H "Content-Type: application/json" -d "{\"message\":\"你好\"}" http://127.0.0.1:8080/api/chat/start | python3 -c "import json,sys;print(json.load(sys.stdin)[\"session_id\"])"); curl -s -X POST -H "Content-Type: application/json" -d "{\"message\":\"我550分物理类能上什么学校\",\"session_id\":\"$SID\"}" http://127.0.0.1:8080/api/chat/respond | python3 -c "import json,sys;d=json.load(sys.stdin);print(len(d[\"reply\"]),\"chars\");print(d[\"reply\"][:100])"'
# 5. 同步本地 + git commit
rsync -avz root@192.144.179.11:/www/wwwroot/gaokao/ ~/mc/gaokao-site/ --exclude='.git' --exclude='__pycache__' --exclude='venv' --exclude='*.db'
cd ~/mc/gaokao-site && git add -A && git commit -m "fix: ..."
git push origin master
注意事项
- 不要因为改动小就跳过 opencode — 即使只有一行改动也走 opencode
- 多个问题分步修 — opencode 一次处理一个文件,修完验证再修下一个
- 线上和本地代码可能不同 — 服务器运行
gaokao_chat_server_v2.py(下划线),本地有下划线 + 连字符两个版本。确认在改哪个 - gunicorn import 陷阱 —
systemctl restart比 kill+手动启动更可靠,自动清__pycache__ - DEEPSEEK_API_KEY 必须显式传递 — opencode 不继承 Hermes 环境变量