OpenCode:拒绝回复修复与推理链清理工具箱

March 26, 2026

最近一直在折腾 OpenCode,发现 GPT 类模型在处理某些敏感或复杂指令时,经常会触发拒绝回答。为了优化使用体验,我顺手写了一个工具箱:opencode-gpt-unlocked

该项目发布仅 1 天,目前在 GitHub 上已收获 36 Stars9 Forks alt text 这个项目提供了两种实现方案,分别应对“事后修复”和“实时干预”两种场景。

1. OpenCode Patcher (数据库修复)

这是我最常用的方式,直接对 OpenCode 的本地 SQLite 数据库 (opencode.db) 下手。当你在某个重要会话里被模型“拒了”,或者推理块导致界面转圈圈时,它可以一键修复。

核心逻辑

  • 一键脱敏: 自动搜寻最新会话,把最后一条拒绝消息替换为“确认协助”之类的积极占位符。这种方案的核心在于通过修改上下文,让模型误以为自己已经答应了要求。为了保证人设的一致性,模型通常会顺着这个“假象”继续执行任务。需要注意的是,如果后续对话过长,模型可能会在推理过程中重新识别出原始指令的违规性并再次拒绝。
  • 推理清理: 删除 reasoning 分片,防止前端解析异常。
  • 自动定位: 脚本会自动去 XDG 路径或用户目录找数据库,不需要手动敲路径。

使用方法

安装后直接敲命令即可,修改前会自动备份 .bak 文件,安全第一。

pip install -e .
opencode-patcher --select # 交互式挑选需要修复的会话

2. Refusal Patcher Plugin (实时拦截)

如果你觉得手动修库太麻烦,我也顺便写了一个 TS 插件,可以直接加载到 OpenCode 的插件系统里。

工作原理

它通过实时拦截 API 交互,在模型输出时进行关键词检测和 AI 二次判定。如果判定为拒绝,插件会自动干预:

  • 实时改写: 将拒绝文本改写成积极的回复。
  • AI 判定: 通过调用 OpenAI API,判断当前回复是否属于拒绝,如果是则进行改写。
  • 静默处理: 自动清空后台数据库中的推理块,防止后续报错。
  • npm 包形式: 直接发布到 npm,安装后在 opencode.json 中配置即可。

配置方式

opencode.jsonplugin 数组中加入包名或脚本绝对路径即可:

{
  "plugin": ["opencode-gpt-unlocked@latest"],
  "experimental": {
    "refusal_patcher": {
      "enabled": true,
      "ai_rewrite": true,
      "base_url": "https://api.openai.com/v1",
      "api_key": "your-key",
      "model": "gpt-5-4-mini"
    }
  }
}

GitHub 仓库地址


Profile picture

Written by Prosumer , an undergraduate student at ShanghaiTech.
Welcome to my GitHub:)