OpenCode + AI 问题解决报告
使用 OpenCode(Claude Opus 4.7 - Sisyphus)跨项目运维实录
报告时间:2026-05-15
一、引言
本文档记录了使用 OpenCode AI 辅助工具在多个项目中解决的实际问题,涵盖智能化弱电工程数据提取、CMS 系统运维与故障排查、会计文档编制、工作流自动化等领域。旨在总结经验、记录技术决策,为后续运维提供参考。
二、项目概览
| 项目 | 类型 | 涉及技术 |
|---|---|---|
| 某智能化项目 | 数据提取 | Python, Excel, DWG, ezdwg |
| 弱电设备管理系统 | 全栈开发 | Express.js, Vue3, Sequelize, MySQL |
| shopqiu.com (Halo CMS) | 博客运维 | Java, Halo Pro, OpenResty, MySQL |
| 思源笔记 | 知识库 | REST API, Python |
| GreatQiu.cn (WordPress) | 站点优化 | WordPress MCP, Astra/Spectra |
| 商贸企业实操指南 | 文档编制 | Markdown, 会计知识 |
三、各项目问题解决详情
3.1 某智能化项目 — AFG 设备编号提取
背景:某医院智能化弱电工程,需从 Excel 表格和 DWG 图纸中提取 AFG(设备网机柜)编号,共 8 栋楼 150 个 AFG。
使用技能:Python 数据分析、pandas、ezdwg/ezdxf 图纸解析
解决的关键问题:
| 问题 | 解决方案 |
|---|---|
| Excel 跨列合并单元格,各楼栋列数不同 | 自适应列检测,不能使用固定索引 |
| 同一编号出现在多行但单元格为空 | 前值填充(forward fill)续行逻辑 |
| DWG 约 7MB 处文件损坏 | decode_text_entities(file, limit=200) 妥协参数 |
| 平面图 AFG 存储在 PROXY GRAPHIC 中无法解码 | 改用系统图 DWG(MTEXT 实体) |
| 附属建筑无 AFG 设备 | 人工核对确认,排除 11#/13#/17#~21#楼 |
| 文件筛选(~$ 前缀的 Word 锁定文件) | 忽略临时锁定文件 |
设置正确的做法:
- ✅ 使用 pandas 的 header=None 模式绕过合并单元格干扰
- ✅ 提前建立 8 栋楼独立 AFG 数量基线便于校对
- ✅ 系统图扫描作为交叉验证手段
可改进:
- 可联系设计院提供 PDF 系统图进行全量人工复核
- DWG 解析可考虑商业库(如 ODA)提升兼容性
3.2 Halo CMS (shopqiu.com) — 多项运维
背景:个人博客运行 Halo Pro 2.24.2,部署在 1Panel 管理面板,前有阿里云 ESA(边缘安全加速)WAF。
使用技能:Playwright 浏览器自动化、Python API 调试、SSH 远程诊断、Docker/Java 运维
3.2.1 WAF 绕过与 API 直连
| 问题 | 解决方案 |
|---|---|
| 阿里云 ESA WAF 拦截非浏览器 HTTP 请求 | 使用源站 IP 36.150.227.106 + Host: www.shopqiu.com 头绕过 |
| WAF JS 挑战无法通过 | 使用 Playwright 真实浏览器执行 JS 挑战 |
| 域名 API 调用失败 | 区分:WAF 拦截的是行为(非浏览器特征),不是 IP |
设置正确的做法:
- ✅ 确认源站 IP 直连可用
- ✅ 创建永久有效的 PAT Token 替代 Cookie 认证
- ✅ PAT Token 生成路径:
/console/uc/profile?tab=pat
可改进:
- 考虑将 Halo 维护 API 迁移到内网或专线
- PAT Token 应定期轮换(目前永久有效是安全风险)
3.2.2 POST 500 故障根因分析
问题:Halo API 所有 POST/PUT 请求返回 500,GET 正常。
排查过程:
| 步骤 | 方法 | 发现 |
|---|---|---|
| 1 | 本地 curl localhost:8091 | 同样 500,排除网络层 |
| 2 | SSH 查日志 | NullPointerException: Post.getSpec() is null |
| 3 | SSH 查进程命令 | --halo.external-url=http://localhost:8091 |
| 4 | 查 Halo Pro 配置 | License 服务器 license.lxware.cn 返回 404 |
| 5 | 查 1Panel .env 文件 | HALO_EXTERNAL_URL=http://localhost:8091 |
根因:
Halo Pro 的 external-url 被错误配置为 http://localhost:8091
(应为 https://www.shopqiu.com)
↓
License 写入校验时 external-url 与 license 绑定的域名不匹配
↓
校验失败 → NPE → HTTP 500
设置正确的做法:
- ✅ 修复 external-url 为
https://www.shopqiu.com/ - ✅ 确认 .env 文件和启动参数均已修改
- ✅ Server 本地 actuator/health 检查可用
可改进:
- Halo Pro 的 license 验证逻辑有缓存期,重启后缓存过期才暴露问题
- License 服务器
license.lxware.cn返回 404(路径不存在),需联系 Halo 服务商确认 - 建议监控
/actuator/health端点,配置自动告警
3.2.3 存储清理与 Logo 恢复
问题:存储工具箱插件清理附件时误删了 Logo(PNG 文件)。
排查结果:
| 项目 | 状态 |
|---|---|
| Logo PNG(原始文件) | ❌ 已删除(deletionTimestamp 在 DB 中) |
| Logo WebP(自动转换版) | ✅ 仍在磁盘(109KB) |
| Favicon(/upload/favicon.ico) | ✅ 正常 |
| Post Cover(2 篇空封面) | ⚠️ 需重新上传 |
设置正确的做法:
- ✅ Halo 自动将 PNG 转 WebP 的机制实际起到了备份作用
- ✅ 附件文件删除有
deletionTimestamp元数据标记
可改进:
- 存储清理插件操作前建议做全量附件备份
- Logo/Favicon 等关键资产考虑另外保存副本
3.2.4 代码注入管理
问题:之前通过代码注入隐藏了分类和标签链接,现在主题后台已支持此功能,需要移除注入代码。
处理:移除了 4 条 CSS 隐藏规则(隐藏顶部标签导航、卡片分类标签、详情页标签组件、详情页分类标签),保留了 robots meta 标签和分享按钮 JS。
可改进:
- 代码注入应优先使用主题原生功能,避免 CSS hack
- 注入内容应有版本注释,方便日后清理
3.3 思源笔记 — API 集成
背景:思源笔记作为第二个知识库,需要与 Halo 协同发布。
使用技能:Python REST API、思源笔记 SiYuan API
解决的关键问题:
| 问题 | 解决方案 |
|---|---|
| 思源 API 认证格式 | Header 必须用小写 token,大写会失败 |
| 多级路径创建文档 | createDocWithMd + moveDocsByID 两步法 |
| 图片上传文件名被改 | 从 succMap 响应中捕获实际文件名(含时间戳后缀) |
| HTTPS 必须 | HTTP 请求返回 404 |
设置正确的做法:
- ✅ 笔记本 ID 已知固定,可脚本化操作
- ✅ 文档创建流程已标准化
3.4 商贸企业全盘账务实操指南
背景:用户使用柠檬云财务软件,需要一套完整的商贸企业账务处理实操指南。
使用技能:会计知识、Markdown 文档编写、网络搜索
成果:
- 12 章完整指南(建账 → 采购 → 销售 → 库存 → 资金 → 费用 → 固定资产 → 税务 → 月末结转 → 报表 → 特殊业务 → 柠檬云 SOP)
- 120+ 条分录示例
- 柠檬云操作路径适配
- 已发布到 Halo(公开)和思源笔记
可改进:
- 可补充更多行业案例(零售、批发、跨境电商等商贸细分)
- 可与柠檬云官方教程联动
3.5 WordPress 站点优化
背景:GreatQiu.cn(中国采购代理网站),Astra + Spectra 主题 + Fluent Forms。
使用技能:WordPress MCP 工具链
解决的问题:
- Contact 页面短代码修复(
[sureforms] →[fluentform]) - 图片链接 127.0.0.1 修复
- SEO 基础设置检查
设置正确的做法:
- ✅ MCP 工具链操作 WordPress 效率高(无需手动登录后台)
可改进:
- 18 张媒体图片 alt_text 为空,需补充
- 缺少 SEO 插件和 sitemap
- About 页面仍有 Lorem ipsum 占位内容
3.6 文件 → OCR → 双发工作流
背景:经常需要把图片中的技术文档 OCR 后同时发布到思源笔记和 Halo 博客。
使用技能:pytesseract OCR、思源 API、Halo API(IP bypass)
SOP 流水线:
① OCR/解析 → ② 整理现代MD → ③ 上传图片到SiYuan → ④ 发布到SiYuan → ⑤ 上传图片到Halo → ⑥ 发布到Halo
处理过的文档:
- 大华门禁接线图(铁箱型门禁控制器 + ASI 一体机)
- 大华报警主机接线图(总线报警主机 + MBUS 模块 + 报警键盘)
关键踩坑:
| 坑 | 应对 |
|---|---|
| Halo WAF 行为检测(前 2 篇能发后拦截) | IP 直连绕过,非 token 问题 |
| SiYuan 图片名自动加时间戳 | 从 succMap 捕获新名 |
| Halo 上传 PNG 自动转 WebP | 捕获响应 uri 字段 |
| Halo 发布需两步 | create draft → publish |
四、使用的 AI 技能/工具汇总
| 技能/工具 | 用途 | 适用场景 |
|---|---|---|
| Playwright | 浏览器自动化 | Halo 后台操作、WAF 绕过、阿里云控制台 |
| Python/paramiko | SSH 远程诊断 | 服务器日志排查、配置检查 |
| Python/keyring | 凭据管理 | Halo PAT Token 读取 |
| pytesseract | OCR 识别 | 接线图等图片文字提取 |
| markdown + tables | 文档转换 | Markdown→HTML 含表格 |
| pandas/ezdwg/ezdxf | 数据提取 | Excel+DWG 工程图纸解析 |
| WordPress MCP | 站点管理 | WordPress 文章/页面/媒体操作 |
| high-order-thinking | 问题分析 | 复杂技术问题诊断框架 |
五、总结与建议
做得好的
- ✅ 系统化诊断:POST 500 问题从 WAF→License→ 配置逐层排除,定位到
external-url - ✅ 双轨发布机制:API + 浏览器双通道,WAF 封一条走另一条
- ✅ 知识沉淀:踩坑记录写入 AGENTS.md,下次会话自动加载
- ✅ 工作流固化:文件 →OCR→ 双发 固定 SOP,一次触发自动执行
- ✅ 凭据安全:Token 存 Windows Credential Manager,密钥不落地
可改进的
- ⚠️ Halo Pro License 依赖:license 服务器不可用导致写入全挂,建议与服务商确认
- ⚠️ API POST 仍不可用:Halo 内部 NPE Bug 需要升级或补丁修复
- ⚠️ WordPress SEO 未完成:sitemap、alt_text、占位内容待处理
- ⚠️ PAT Token 不轮换:永久有效的 Token 存在安全风险
- ⚠️ SSH 密码认证:建议改用密钥认证
报告由 OpenCode AI (Sisyphus - Claude Opus 4.7) 自动生成