更新:v 0.2


一个基于 FastAPI 的 OpenAI 兼容API接口本地代理工具,主要用于辅助规避 GPT 在逆向分析等场景下道德限制问题:

  • 将本地 /v1/* 请求转发到目标模型接口

  • 对目标模型最后一条回复做拒答关键词检测

  • 若命中拒答词,则丢弃该轮回复,调用辅助模型仅改写最后一条用户消息后重试

  • GUI 内置“目标接口测试”“改写接口测试”按钮,可直接验证当前配置是否可用


1. 配置文件

运行时使用的配置文件为当前运行目录下的 config.json

如果不存在,则自动生成默认配置。

1.1 当前配置结构

{
    "target_model": {
        "model": "gpt-5.4",
        "message_type": "responses",
        "reasoning_depth": "high",
        "baseurl": "",
        "apikey": ""
    },
    "optimization_model": {
        "model": "",
        "baseurl": "https://openrouter.ai/api/v1",
        "apikey": "",
        "log_full_refined_content": true,
        "system_prompt": "你是一名提示优化助手......",
        "only_main_user_request": true,
        "auxiliary_hint_keywords": []
    },
    "response_filter": {
        "denylist": [
            "抱歉",
            "不能协助",
            "无法协助",
            "无法提供",
            "不能提供",
            "不能帮助",
            "无法帮助",
            "不能继续",
            "I'm sorry",
            "I cannot assist",
            "as an AI",
            "不受支持"
        ]
    }
}

2. 配置说明

2.1 target_model

目标模型配置。

target_model.model

最终转发到目标后端时使用的模型名。

target_model.message_type

仅用于记录/展示目标接口类型,常见值:

  • responses

  • chat.completions

target_model.reasoning_depth

用于记录目标模型期望推理深度,代理本身不强制解释该字段。

target_model.baseurl

目标模型接口地址,建议填写到 /v1

例如:

"baseurl": "http://127.0.0.1:8137/v1"

target_model.apikey

目标模型接口密钥。

若目标接口不需要密钥,可留空;当前版本不会再发送空的 Authorization: Bearer


2.2 optimization_model

辅助改写模型配置。 当前版本只在目标模型拒答后才会调用它。

optimization_model.model

辅助模型名。

optimization_model.baseurl

辅助模型接口地址。

optimization_model.apikey

辅助模型接口密钥。

optimization_model.log_full_refined_content

是否在日志中记录完整改写结果。

  • true:记录

  • false:不记录

optimization_model.system_prompt

辅助模型的系统提示词。

当前建议风格是:

  • 不机械替换关键词

  • 不套固定模板

  • 保留 URL、API、参数、工具名、输入输出要求

  • 结合上一轮拒答内容做更自然的表达优化

optimization_model.only_main_user_request

是否只对“主用户请求”启用拒答后改写链路。

  • true:只处理主请求,标题生成/摘要等辅助请求直接透传

  • false:所有请求都可能进入改写链路

optimization_model.auxiliary_hint_keywords

辅助请求识别提示词列表。

用于识别诸如:

  • 会话标题生成

  • 摘要/简述

  • 标签/命名

这类请求默认不会进入拒答后改写与响应过滤逻辑。


2.3 response_filter

目标模型拒答词过滤配置。

response_filter.denylist

若目标模型最后一条 assistant 回复中包含任一关键词,则:

  • 判定为拒答

  • 丢弃本轮回复

  • 进入下一轮改写重试

例如:

"denylist": [
    "抱歉",
    "不能协助",
    "无法提供",
    "不能提供",
    "不能帮助"
]

3. 日志说明

默认日志文件:

proxy.log

位置:EXE 同目录

说明:

  • GUI 启动时会清空 proxy.log

  • 代理进程启动时也会以新文件覆盖写入

  • 因此日志默认只保留本次启动后的内容

常见日志含义:

  • 请求进入 | ...

    • 请求刚进入代理,已记录 method/path/content-length 等基础信息

  • 请求体读取完成 | body_len=...

    • 请求体已成功读取

  • 请求 | POST /v1/responses

    • 收到新请求

  • 本地伪造 models

    • /v1/models 由本地直接返回

  • 请求分类 | is_main=...

    • 主请求 / 辅助请求识别结果

  • 首轮直发目标模型

    • 第一轮不改写,直接发送目标模型

  • 命中过滤 | #1 | [...]

    • 目标模型最后回复命中 denylist

  • 丢弃本轮

    • 本轮目标模型回复被拒绝

  • 改写 | #2 | retry_after_refusal=#1

    • 开始第 2 轮重写并重试

  • 放行 | stream=True | len=...

    • 回复已返回给客户端

  • 转发失败 | url=...

    • 代理向上游发送请求时报错

  • 跳过非ASCII请求头

    • 某个原始请求头值含非 ASCII 字符,已自动过滤,避免 httpx 编码异常


4. GUI 说明

4.1 目标模型页

  • 可配置目标模型名称、接口类型、推理深度、目标接口地址、目标接口密钥

  • “目标接口地址”右侧提供 测试 按钮

    • 会按当前配置直接向目标接口发送测试请求

4.2 改写模型页

  • 可配置改写模型名称、接口地址、接口密钥

  • “改写接口地址”右侧提供 测试 按钮

    • 会按当前配置向改写接口发送一次 /chat/completions 测试请求

4.3 响应过滤页

  • 当前版本是否触发改写,完全由 目标模型回复是否命中 denylist 决定

  • 旧版 trigger_keywords 已移除,不再使用

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。