更新: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

评论(0)