1 line
96 KiB
JSON
1 line
96 KiB
JSON
{"repo": "anionex/free-sophnet-api", "files": {"config.yml.example": {"670394221cdc8864ee84cd3f6ba7db4fd79bb295": {"t": 1785746861.107658, "n": 1682, "h": "8e8d3c3a67c03f6f", "c": "# OpenAI Chat Proxy 配置文件示例\n# 复制此文件为 openai-chat-proxy-config.yaml 并根据需要修改\n\n# 连接超时时间(秒)\ntimeout: 30\n\n# 转发的目标基础URL\n# 可以是官方API: https://api.openai.com\n# 也可以是其他兼容的API服务: https://api.your-alt-service.com\napi_host: \"https://sophnet.com\"\n\n# 代理服务器URL(如果需要)\n# 示例: http://127.0.0.1:7890 推荐使用socks5\n\n# 自定义转发目标路径\n# 接收的请求路径始终为 /v1/chat/completions\n# 但会将请求转发到此处指定的目标路径\n# 例如,设置为 \"/chat\" 时,请求 /v1/chat/completions 会被转发到 https://api.openai.com/chat\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n\n# 字段别名映射\n# 定义请求JSON数据中字段名的转换规则\n# 将请求中的原始字段名映射为目标服务需要的字段名\nfield_aliases:\n # \"原始字段名\": \"目标字段名\"\n # 例如,将标准OpenAI请求中的model字段转换为model_id:\n \"model\": \"model_id\"\n # 保持为空对象时不进行任何转换\n\n# 默认温度\ndefault_temperature: 0.6\n\n# 默认最大令牌数\ndefault_max_tokens: 16384\n\n# 默认模型\ndefault_model: \"DeepSeek-V3-Fast\"\n\n# API密钥映射\n# 前端密钥到实际密钥的映射关系\n# 可以使用自定义前端密钥简化管理和控制访问权限\napi_keys:\n # 左边是验证密钥: 右边是实际OpenAI API密钥\n \"sk-2jc7k79eca#\": \"anon-eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhbm9ueW1vdXNfdG9rZW4iLCJleHAiOjE3NDk3OTI2NTV9.MteK3Vwp2mcuRdzlyUAvYnMtT-dHCHJ46z0QdMkU-WQ\"\n\n# IP白名单(留空表示允许所有IP)\nip_whitelist: \n # - \"127.0.0.1\"\n # - \"192.168.1.100\"\n\n# IP黑名单\nip_blacklist:\n # - \"10.0.0.1\"\n\n# 日志设置\n# 日志级别控制所有日志输出\n# DEBUG - 显示所有日志,包括请求和响应内容\n# INFO - 显示信息性日志,但不包含请求和响应详情\n# WARNING - 只显示警告和错误\n# ERROR - 只显示错误\nlog_level: \"INFO\" # 日志级别: DEBUG, INFO, WARNING, ERROR\n\n# HTTP连接池配置\nconnection_limit: 1000 # HTTP连接池连接数上限\nconnection_limit_per_host: 100 # 每个主机的连接数上限\nkeepalive_timeout: -1 # 连接保持活跃时间(秒)\nforce_close: true # 是否强制关闭连接,当代理是轮询IP时,启用以减少429 too many requests错误\n\n# 进程与性能配置\nworkers: null # 工作进程数,null表示使用CPU核心数\n"}, "5cd5d6009561991f9fa91dbbebdf1849b330fc05": {"t": 1785768109.3272476, "n": 1682, "h": "8e8d3c3a67c03f6f", "c": "# OpenAI Chat Proxy 配置文件示例\n# 复制此文件为 openai-chat-proxy-config.yaml 并根据需要修改\n\n# 连接超时时间(秒)\ntimeout: 30\n\n# 转发的目标基础URL\n# 可以是官方API: https://api.openai.com\n# 也可以是其他兼容的API服务: https://api.your-alt-service.com\napi_host: \"https://sophnet.com\"\n\n# 代理服务器URL(如果需要)\n# 示例: http://127.0.0.1:7890 推荐使用socks5\n\n# 自定义转发目标路径\n# 接收的请求路径始终为 /v1/chat/completions\n# 但会将请求转发到此处指定的目标路径\n# 例如,设置为 \"/chat\" 时,请求 /v1/chat/completions 会被转发到 https://api.openai.com/chat\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n\n# 字段别名映射\n# 定义请求JSON数据中字段名的转换规则\n# 将请求中的原始字段名映射为目标服务需要的字段名\nfield_aliases:\n # \"原始字段名\": \"目标字段名\"\n # 例如,将标准OpenAI请求中的model字段转换为model_id:\n \"model\": \"model_id\"\n # 保持为空对象时不进行任何转换\n\n# 默认温度\ndefault_temperature: 0.6\n\n# 默认最大令牌数\ndefault_max_tokens: 16384\n\n# 默认模型\ndefault_model: \"DeepSeek-V3-Fast\"\n\n# API密钥映射\n# 前端密钥到实际密钥的映射关系\n# 可以使用自定义前端密钥简化管理和控制访问权限\napi_keys:\n # 左边是验证密钥: 右边是实际OpenAI API密钥\n \"sk-2jc7k79eca#\": \"anon-eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhbm9ueW1vdXNfdG9rZW4iLCJleHAiOjE3NDk3OTI2NTV9.MteK3Vwp2mcuRdzlyUAvYnMtT-dHCHJ46z0QdMkU-WQ\"\n\n# IP白名单(留空表示允许所有IP)\nip_whitelist: \n # - \"127.0.0.1\"\n # - \"192.168.1.100\"\n\n# IP黑名单\nip_blacklist:\n # - \"10.0.0.1\"\n\n# 日志设置\n# 日志级别控制所有日志输出\n# DEBUG - 显示所有日志,包括请求和响应内容\n# INFO - 显示信息性日志,但不包含请求和响应详情\n# WARNING - 只显示警告和错误\n# ERROR - 只显示错误\nlog_level: \"INFO\" # 日志级别: DEBUG, INFO, WARNING, ERROR\n\n# HTTP连接池配置\nconnection_limit: 1000 # HTTP连接池连接数上限\nconnection_limit_per_host: 100 # 每个主机的连接数上限\nkeepalive_timeout: -1 # 连接保持活跃时间(秒)\nforce_close: true # 是否强制关闭连接,当代理是轮询IP时,启用以减少429 too many requests错误\n\n# 进程与性能配置\nworkers: null # 工作进程数,null表示使用CPU核心数\n"}, "da4879e45de55d7992bb88bd0d0892729c3f33d0": {"t": 1785768110.6133819, "n": 1679, "h": "f29227c10ceab79d", "c": "# OpenAI Chat Proxy 配置文件示例\n# 复制此文件为 openai-chat-proxy-config.yaml 并根据需要修改\n\n# 连接超时时间(秒)\ntimeout: 30\n\n# 转发的目标基础URL\n# 可以是官方API: https://api.openai.com\n# 也可以是其他兼容的API服务: https://api.your-alt-service.com\nbase_url: \"https://sophnet.com\"\n\n# 代理服务器URL(如果需要)\n# 示例: http://127.0.0.1:7890 推荐使用socks5\n\n# 自定义转发目标路径\n# 接收的请求路径始终为 /v1/chat/completions\n# 但会将请求转发到此处指定的目标路径\n# 例如,设置为 \"/chat\" 时,请求 /v1/chat/completions 会被转发到 https://api.openai.com/chat\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n\n# 字段别名映射\n# 定义请求JSON数据中字段名的转换规则\n# 将请求中的原始字段名映射为目标服务需要的字段名\nfield_aliases:\n # \"原始字段名\": \"目标字段名\"\n # 例如,将标准OpenAI请求中的model字段转换为model_id:\n \"model\": \"model_id\"\n # 保持为空对象时不进行任何转换\n\n# 默认温度\ndefault_temperature: 0.6\n\n# 默认最大令牌数\ndefault_max_tokens: 16384\n\n# 默认模型\ndefault_model: \"DeepSeek-V3-Fast\"\n\n# API密钥映射\n# 前端密钥到实际密钥的映射关系\n# 可以使用自定义前端密钥简化管理和控制访问权限\napi_keys:\n # 左边是验证密钥: 右边是实际OpenAI API密钥\n \"sk-2jc7k79eca#\": \"anon-eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhbm9ueW1vdXNfdG9rZW4iLCJleHAiOjE3NDk3OTI2NTV9.MteK3Vwp2mcuRdzlyUAvYnMtT-dHCHJ46z0QdMkU-WQ\"\n\n# IP白名单(留空表示允许所有IP)\nip_whitelist: \n # - \"127.0.0.1\"\n # - \"192.168.1.100\"\n\n# IP黑名单\nip_blacklist:\n # - \"10.0.0.1\"\n\n# 日志设置\n# 日志级别控制所有日志输出\n# DEBUG - 显示所有日志,包括请求和响应内容\n# INFO - 显示信息性日志,但不包含请求和响应详情\n# WARNING - 只显示警告和错误\n# ERROR - 只显示错误\nlog_level: \"INFO\" # 日志级别: DEBUG, INFO, WARNING, ERROR\n\n# HTTP连接池配置\nconnection_limit: 1000 # HTTP连接池连接数上限\nconnection_limit_per_host: 100 # 每个主机的连接数上限\nkeepalive_timeout: -1 # 连接保持活跃时间(秒)\nforce_close: true # 是否强制关闭连接,当代理是轮询IP时,启用以减少429 too many requests错误\n\n# 进程与性能配置\nworkers: null # 工作进程数,null表示使用CPU核心数\n"}, "8798fe7bce52824ab6dd9d67395a19306a0f8c81": {"t": 1785768111.8471978, "n": 1671, "h": "6ffe22b18c4359b2", "c": "# OpenAI Chat Proxy 配置文件示例\n# 复制此文件为 openai-chat-proxy-config.yaml 并根据需要修改\n\n# 连接超时时间(秒)\ntimeout: 30\n\n# 转发的目标基础URL\n# 可以是官方API: https://api.openai.com\n# 也可以是其他兼容的API服务: https://api.your-alt-service.com\nbase_url: \"https://sophnet.com\"\n\n# 代理服务器URL(如果需要)\n# 示例: http://127.0.0.1:7890\nproxy: null\n\n# 自定义转发目标路径\n# 接收的请求路径始终为 /v1/chat/completions\n# 但会将请求转发到此处指定的目标路径\n# 例如,设置为 \"/chat\" 时,请求 /v1/chat/completions 会被转发到 https://api.openai.com/chat\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n\n# 字段别名映射\n# 定义请求JSON数据中字段名的转换规则\n# 将请求中的原始字段名映射为目标服务需要的字段名\nfield_aliases:\n # \"原始字段名\": \"目标字段名\"\n # 例如,将标准OpenAI请求中的model字段转换为model_id:\n \"model\": \"model_id\"\n # 保持为空对象时不进行任何转换\n\n# 默认温度\ndefault_temperature: 0.6\n\n# 默认最大令牌数\ndefault_max_tokens: 16384\n\n# 默认模型\ndefault_model: \"DeepSeek-V3-Fast\"\n\n# API密钥映射\n# 前端密钥到实际密钥的映射关系\n# 可以使用自定义前端密钥简化管理和控制访问权限\napi_keys:\n # 左边是验证密钥: 右边是实际OpenAI API密钥\n \"sk-2jc7k79eca#\": \"anon-eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhbm9ueW1vdXNfdG9rZW4iLCJleHAiOjE3NDk3OTI2NTV9.MteK3Vwp2mcuRdzlyUAvYnMtT-dHCHJ46z0QdMkU-WQ\"\n\n# IP白名单(留空表示允许所有IP)\nip_whitelist: \n # - \"127.0.0.1\"\n # - \"192.168.1.100\"\n\n# IP黑名单\nip_blacklist:\n # - \"10.0.0.1\"\n\n# 日志设置\n# 是否记录请求数据\nlog_requests: false\n# 是否记录响应数据\nlog_responses: false\n\n# HTTP连接池配置\nconnection_limit: 1000 # HTTP连接池连接数上限\nconnection_limit_per_host: 100 # 每个主机的连接数上限\nkeepalive_timeout: 60 # 连接保持活跃时间(秒)\n\n# 进程与性能配置\nworkers: null # 工作进程数,null表示使用CPU核心数\nlog_level: \"INFO\" # 日志级别: DEBUG, INFO, WARNING, ERROR\n\n# Function Call功能配置\nenable_function_call: true # 是否启用函数调用功能\nfunction_call_timeout: 60 # 函数调用超时时间(秒) "}, "58810ba46b5db007bdc11969a3420f7151433a1b": {"t": 1785768113.0276973, "n": 1239, "h": "7d2783e638dbee6c", "c": "# OpenAI Chat Proxy 配置文件示例\n# 复制此文件为 openai-chat-proxy-config.yaml 并根据需要修改\n\n# 连接超时时间(秒)\ntimeout: 30\n\n# 转发的目标基础URL\n# 可以是官方API: https://api.openai.com\n# 也可以是其他兼容的API服务: https://api.your-alt-service.com\nbase_url: \"https://sophnet.com\"\n\n# 代理服务器URL(如果需要)\n# 示例: http://127.0.0.1:7890\nproxy: null\n\n# 自定义转发目标路径\n# 接收的请求路径始终为 /v1/chat/completions\n# 但会将请求转发到此处指定的目标路径\n# 例如,设置为 \"/chat\" 时,请求 /v1/chat/completions 会被转发到 https://api.openai.com/chat\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n\n# 字段别名映射\n# 定义请求JSON数据中字段名的转换规则\n# 将请求中的原始字段名映射为目标服务需要的字段名\nfield_aliases:\n # \"原始字段名\": \"目标字段名\"\n # 例如,将标准OpenAI请求中的model字段转换为model_id:\n \"model\": \"model_id\"\n # 保持为空对象时不进行任何转换\n\n# 默认温度\ndefault_temperature: 0.6\n\n# 默认最大令牌数\ndefault_max_tokens: 16384\n\n# 默认模型\ndefault_model: \"DeepSeek-V3-Fast\"\n\n# API密钥映射\n# 前端密钥到实际密钥的映射关系\n# 可以使用自定义前端密钥简化管理和控制访问权限\napi_keys:\n # 左边是验证密钥: 右边是实际OpenAI API密钥\n \"sk-2jc7k79eca#\": \"anon-eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhbm9ueW1vdXNfdG9rZW4iLCJleHAiOjE3NDk3OTI2NTV9.MteK3Vwp2mcuRdzlyUAvYnMtT-dHCHJ46z0QdMkU-WQ\"\n\n# IP白名单(留空表示允许所有IP)\nip_whitelist: \n # - \"127.0.0.1\"\n # - \"192.168.1.100\"\n\n# IP黑名单\nip_blacklist:\n # - \"10.0.0.1\"\n\n# 日志设置\n# 是否记录请求数据\nlog_requests: false\n# 是否记录响应数据\nlog_responses: false "}}, "README.md": {"670394221cdc8864ee84cd3f6ba7db4fd79bb295": {"t": 1785747209.6440873, "n": 5819, "h": "db52506cec43bec3", "c": "# Free SophNet API 代理 \n> 如果觉得该项目有用,欢迎star & fork⭐!\n\n最新更新:原方法已失效 项目待维护\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查\n- 支持获取模型列表\n\n## 快速开始\n### 小白向快速启动脚本\n(linux需要先安装docker compose,windows需要先安装docker desktop)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\ncp config.yml.example config.yml\ndocker compose up -d\n# 请求默认密匙为“sk-2jc7k79eca#”\n```\n### 从源码开始启动(进阶向)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\n```\n1. 复制示例配置文件并根据需要修改:\n\n ```\n cp config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数(也可以直接全部保持默认)。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:<br>\n使用pip来安装:\n```\npip install -e .\n```\n\n✨或者使用 `uv`(推荐):\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥(默认为sk-2jc7k79eca#):\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```bash\ncurl -X POST http://localhost:8000/v1/chat/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer your_frontend_key\" \\\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n本人水平有限,仅作参考 如果有更好的方法,欢迎交流!\n"}, "720f0106358044fab9b2c3edfe7661d00820a2ca": {"t": 1785768110.9020858, "n": 5800, "h": "3fb1fe9ad5b6e097", "c": "# Free SophNet API 代理 \n> 如果觉得该项目有用,欢迎star & fork⭐!\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查\n- 支持获取模型列表\n\n## 快速开始\n### 小白向快速启动脚本\n(linux需要先安装docker compose,windows需要先安装docker desktop)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\ncp config.yml.example config.yml\ndocker compose up -d\n# 请求默认密匙为“sk-2jc7k79eca#”\n```\n### 从源码开始启动(进阶向)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\n```\n1. 复制示例配置文件并根据需要修改:\n\n ```\n cp config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数(也可以直接全部保持默认)。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:<br>\n使用pip来安装:\n```\npip install -e .\n```\n\n✨或者使用 `uv`(推荐):\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥(默认为sk-2jc7k79eca#):\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```bash\ncurl -X POST http://localhost:8000/v1/chat/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer your_frontend_key\" \\\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n本人水平有限,仅作参考 如果有更好的方法,欢迎交流!\n"}, "b1aada7c964267d5e682f2ffab9646b40fee9d16": {"t": 1785768112.6465383, "n": 5770, "h": "ce180e462b8988ec", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查\n- 支持获取模型列表\n\n## 快速开始\n### 小白向快速启动脚本\n(linux需要先安装docker compose,windows需要先安装docker desktop)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\ncp config.yml.example config.yml\ndocker compose up -d\n# 请求默认密匙为“sk-2jc7k79eca#”\n```\n### 从源码开始启动(进阶向)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\n```\n1. 复制示例配置文件并根据需要修改:\n\n ```\n cp config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数(也可以直接全部保持默认)。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:<br>\n使用pip来安装:\n```\npip install -e .\n```\n\n✨或者使用 `uv`(推荐):\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥(默认为sk-2jc7k79eca#):\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```bash\ncurl -X POST http://localhost:8000/v1/chat/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer your_frontend_key\" \\\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n本人水平有限,仅作参考 如果有更好的方法,欢迎交流!\n"}, "dceb2d99996994a015890ffd844a91a31c9f71d4": {"t": 1785768114.0014954, "n": 5475, "h": "c1f407855d711f4a", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n- 该接口也支持function call/tool call功能\n\n## 快速开始\n### 小白向快速启动脚本\n(linux需要安装docker compose,windows需要先安装docker desktop)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\ncp config.yml.example config.yml\ndocker compose up -d\n```\n### 从源码开始启动(进阶向)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\n```\n1. 复制示例配置文件并根据需要修改:\n\n ```\n cp config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数(也可以直接全部保持默认)。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n✨推荐使用 `uv`:\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥(默认为sk-2jc7k79eca#):\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n如果有更好的方法,欢迎交流!\n"}, "36e764255a3ebad52d549f204e36bc92ce7ef2d9": {"t": 1785768115.5046704, "n": 5446, "h": "d0d727bf1a52c0b7", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n- 该接口也支持function call/tool call功能\n\n## 快速开始\n### 小白向快速启动脚本\n(linux需要安装docker compose,windows需要先安装docker desktop)\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\ncp config.yml.example config.yml\ndocker compose up -d\n```\n### 配置\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\n```\n1. 复制示例配置文件并根据需要修改:\n\n ```\n cp config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数(也可以直接全部保持默认)。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n✨推荐使用 `uv`:\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n如果有更好的方法,欢迎交流!\n"}, "876539b992ce92c0a7600db3db6104e800b12a92": {"t": 1785768116.895705, "n": 5244, "h": "8b295da1f08101ce", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n- 该接口也支持function call/tool call功能\n\n## 快速开始\n\n### 配置\n```\ngit clone https://github.com/Anionex/free-sophnet-api\ncd free-sophnet-api\n```\n1. 复制示例配置文件并根据需要修改:\n\n ```\n cp config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数(也可以直接全部保持默认)。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n✨推荐使用 `uv`:\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n如果有更好的方法,欢迎交流!\n"}, "901b9e991592544728ccf284e06a0edf2b4382d6": {"t": 1785768118.2459896, "n": 5152, "h": "45014b564389cdd4", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n- 该接口也支持function call/tool call功能\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n\n ```\n copy config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数。\n\n### 依赖库\n\n使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n✨推荐使用 `uv`:\n\n```\nuv sync # 环境安装\nuv run soph_forward # 运行\n```\n\n### 启动服务\n\n由于 uvloop 依赖不支持 windows, 故推荐在 linux 上启动:\n\n```\npython -m src.main\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker, ✨推荐)\n\n(可选步骤):\n1. 在 `docker-compose.yml` 中添加 `restart: always` 以开机自启动.\n2. 编辑 `ports` 端口映射 (服务在容器内监听 `8000` 端口).\n\n启动:\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `forward_chat_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nforward_chat_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\n# powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce_close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的 `x-real-ip` 等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令(evalscope):\n\n```bash\nuv run tests/bench.py --host http://localhost:8000\n# 或\npython tests/bench.py --host http://localhost:8000\n```\n\n> [!NOTE]\n> 需要主程序正在运行, 上面的 `--host` 参数设置为主程序绑定的地址.\n\n压测结果:\n\n| 项目 | 优化前 | 优化后 |\n| :------------------------- | :-------- | :-------- |\n| 并发数 | 16 | 16 |\n| 总请求数 | 100 | 100 |\n| 成功请求数 | 42 | 88 |\n| 失败请求数 | 58 | 12 |\n| 输出吞吐量 (tok/s) | 797.8415 | 951.4029 |\n| 总吞吐量 (tok/s) | 827.2852 | 992.081 |\n| 请求吞吐量 (req/s) | 1.4652 | 1.8644 |\n| 平均延迟 (s) | 7.3841 | 7.6495 |\n| 平均首次 token 时间 (s) | 0.8123 | |\n| 平均每个输出 token 时间 (s) | 0.0122 | |\n| 测试总耗时 (s) | | 47.1998 |\n\n优化后详细测试结果:\n\n| Percentiles | TTFT (s) | ITL (s) | TPOT (s) | Latency (s) | Input tokens | Output tokens | Output (tok/s) | Total (tok/s) |\n| :---------- | :------- | :------ | :------- | :---------- | :------------ | :------------ | :------------- | :------------ |\n| 10% | 0.4447 | 0.0108 | 0.015 | 3.956 | 13 | 237 | 44.2754 | 48.2932 |\n| 25% | 0.4718 | 0.0293 | 0.0154 | 7.0817 | 17 | 361 | 48.9376 | 51.8933 |\n| 50% | 0.5084 | 0.0342 | 0.0174 | 8.8157 | 23 | 450 | 53.9693 | 57.393 |\n| 66% | 0.528 | 0.0363 | 0.0183 | 9.545 | 26 | 526 | 58.0365 | 61.0627 |\n| 75% | 0.5557 | 0.0391 | 0.019 | 10.0414 | 27 | 567 | 59.1532 | 62.4369 |\n| 80% | 0.5686 | 0.0435 | 0.0194 | 10.2598 | 31 | 582 | 61.1363 | 63.1524 |\n| 90% | 0.7113 | 0.0637 | 0.0205 | 10.8933 | 33 | 617 | 62.8718 | 66.3666 |\n| 95% | 0.7288 | 0.0779 | 0.0216 | 11.759 | 35 | 670 | 65.0002 | 67.1137 |\n| 98% | 0.957 | 0.1292 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n| 99% | 0.957 | 0.1763 | 0.0225 | 13.7054 | 37 | 762 | 68.2566 | 73.3314 |\n\n如果有更好的方法,欢迎交流!\n"}, "7d362e2aaa054f2ea427144b972bb4d65eae33a0": {"t": 1785768119.4134629, "n": 2992, "h": "66f1d50bf2be1015", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用\n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n- 该接口也支持function call/tool call功能\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n\n ```\n copy config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数。\n\n### 启动服务\n\n在 Windows 系统上:\n\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker)\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n\n```\npip install aiohttp fastapi uvicorn loguru orjson pydantic pyyaml uvloop httptools\n```\n\n或使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n\n```\nkeepalive_timeout: 0\nforce close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的x-real-ip等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令:\n\n```\nevalscope perf \\\n --url \"http://127.0.0.1:8000/v1/chat/completions\" \\\n --parallel 16 \\\n --model \"DeepSeek-V3-Fast\" \\\n --number 100 \\\n --api openai \\\n --api-key \"sk-2jc7k79eca#\" \\\n --dataset openqa \\\n --stream\n```\n\n优化前:\n\n\n使用上述优化后效果:\n\n\n如果有更好的方法,欢迎交流!\n"}, "73a42deedea4bc1a59f524f5ff15d9324150aa9d": {"t": 1785768120.7539868, "n": 2991, "h": "41a0e2fac112a210", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用 \n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n- 该接口也支持function call/tool call功能\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n\n ```\n copy config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数。\n\n### 启动服务\n\n在 Windows 系统上:\n\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker)\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n\n```\npip install aiohttp fastapi uvicorn loguru orjson pydantic pyyaml uvloop httptools\n```\n\n或使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n\n\n## 如何获得更好的性能?\n\n研究发现性能瓶颈在于官网对/chat/completions接口的rate limit。因此解决方案是使用代理池发出请求以尽量减少被限制的次数。\n\n在config.yml中配置代理:\n```\n# 代理服务器URL(如果需要)\n# 示例: socks5://127.0.0.1:7890 推荐使用socks5\n```\n\n同时,在config.yml中设置参数:\n```\nkeepalive_timeout: 0\nforce close: true\n```\n\n当配置了proxy,脚本会自动将请求头中的x-real-ip等字段统一设置为当前发起请求的IP地址。虽然实测没有太多差别;\n\n压测命令:\n```\nevalscope perf \\\n --url \"http://127.0.0.1:8000/v1/chat/completions\" \\\n --parallel 16 \\\n --model \"DeepSeek-V3-Fast\" \\\n --number 100 \\\n --api openai \\\n --api-key \"sk-2jc7k79eca#\" \\\n --dataset openqa \\\n --stream\n```\n\n优化前:\n\n\n使用上述优化后效果:\n\n\n如果有更好的方法,欢迎交流!\n"}, "8798fe7bce52824ab6dd9d67395a19306a0f8c81": {"t": 1785768121.932877, "n": 4270, "h": "c4a413ffa81c4b96", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用 \n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- 支持 OpenAI Function Calling 与 Tools 功能\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n\n ```\n copy config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数。\n\n### 启动服务\n\n在 Windows 系统上:\n\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker)\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n### Function Call 功能\n\n服务支持 OpenAI 兼容的 Function Call 和 Tools 接口格式,可以让模型调用外部函数或执行特定任务。\n\n#### 请求示例 (Function Call)\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"明天北京的天气如何?\"}],\n \"functions\": [\n {\n \"name\": \"get_weather\",\n \"description\": \"获取指定地区的天气预报\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"城市名称,例如:北京\"\n },\n \"date\": {\n \"type\": \"string\",\n \"description\": \"日期,例如:2023-05-01\"\n }\n },\n \"required\": [\"location\"]\n }\n }\n ],\n \"function_call\": \"auto\"\n }'\n```\n\n#### 请求示例 (Tools)\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"明天北京的天气如何?\"}],\n \"tools\": [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"description\": \"获取指定地区的天气预报\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"城市名称,例如:北京\"\n },\n \"date\": {\n \"type\": \"string\",\n \"description\": \"日期,例如:2023-05-01\"\n }\n },\n \"required\": [\"location\"]\n }\n }\n }\n ],\n \"tool_choice\": \"auto\"\n }'\n```\n\n#### 配置 Function Call\n\n在 `config.yml` 中配置 Function Call 功能:\n\n```yaml\n# Function Call功能配置\nenable_function_call: true # 是否启用函数调用功能\nfunction_call_timeout: 60 # 函数调用超时时间(秒)\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n\n```\npip install aiohttp fastapi uvicorn loguru orjson pydantic pyyaml uvloop httptools\n```\n\n或使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n"}, "91f804dd2c33e4017c2657e9b0fa8478e7f98971": {"t": 1785768123.3439949, "n": 2261, "h": "4b79271a4ee65a57", "c": "# Free SophNet API 代理\n\n> **声明:** \n> 仅供网络安全学习交流使用 \n> 请在24小时内删除,造成的任何后果与项目开发者无关\n\n这是一个轻量级的 API 代理服务,专注于转发请求到 SophNet API 服务。支持流式响应输出,API 密钥映射,自动获取匿名 token,以及 IP 访问控制。\n\n## 功能特点\n\n- 兼容 OpenAI `/v1/chat/completions` 接口格式\n- 支持流式输出 (SSE)\n- 支持自动获取 SophNet 匿名 token\n- 支持自定义转发目标路径\n- 支持请求字段别名映射(如 model 到 model_id)\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n- 健康检查 API\n- 支持获取模型列表\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n\n ```\n copy config.yml.example config.yml\n ```\n\n2. 编辑 `config.yml` 文件,设置你的配置参数。\n\n### 启动服务\n\n在 Windows 系统上:\n\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker)\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 OpenAI API 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer your_frontend_key\n```\n\n服务会自动将其映射为实际的 SophNet API 密钥或自动获取匿名 token。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 SophNet 特定路径\nproxy_url_path: \"/api/open-apis/projects/Ar79PWUQUAhjJOja2orHs/chat/completions\"\n```\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer your_frontend_key\" `\n -d '{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n\n```\npip install aiohttp fastapi uvicorn loguru orjson pydantic pyyaml uvloop httptools\n```\n\n或使用项目的 pyproject.toml 安装:\n\n```\npip install -e .\n```\n\n## 健康检查\n\n可以通过访问 `/health` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/health\n```\n\n## 获取模型列表\n\n可以通过访问 `/v1/models` 端点查询可用的模型:\n\n```\nhttp://localhost:8000/v1/models\n```\n"}, "58810ba46b5db007bdc11969a3420f7151433a1b": {"t": 1785768124.778167, "n": 2119, "h": "8393bfb8cfa334c1", "c": "# OpenAI Chat Proxy\n\n这是一个轻量级的 OpenAI API 代理服务,专注于转发 `/v1/chat/completions` 接口的请求到 OpenAI 或其他兼容的服务。支持流式响应输出,API 密钥映射,以及 IP 访问控制。\n\n## 功能特点\n\n- 支持 OpenAI `/v1/chat/completions` 接口的完整功能\n- 支持流式输出 (SSE)\n- 支持自定义转发目标路径\n- 支持请求字段别名映射\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n\n ```\n copy config.yml.example config.yml\n ```\n\n2. 编辑 `config.yaml` 文件,设置你的 API 密钥和其他参数。\n\n### 启动服务\n\n在 Windows 系统上:\n- 双击 `run_proxy.bat` 或 `run_proxy.ps1` 启动服务\n\n或者使用命令行:\n\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n### 启动服务(docker)\n\n```\ndocker compose up -d\n```\n\n## 使用方法\n\n服务启动后,可以将原本发送到 `https://api.openai.com/v1/chat/completions` 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer my_key_1\n```\n\n服务会自动将其映射为实际的 OpenAI API 密钥。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 /chat 路径\nproxy_url_path: \"/chat\"\n```\n\n这样,当客户端请求 `/v1/chat/completions` 时,服务会将请求转发到 `https://api.openai.com/chat`(或你配置的其他基础URL)。\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则。这对于连接不同API格式的服务非常有用:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer my_key_1\" `\n -d '{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n\n```\npip install fastapi uvicorn aiohttp pydantic loguru orjson pyyaml\n```\n\n## 健康检查\n\n可以通过访问 `/healthz` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/healthz\n```\n"}, "4d097a5b1ae7149235824142b9ff383af4c7e283": {"t": 1785768125.989817, "n": 2124, "h": "3de84092c993e0ff", "c": "# OpenAI Chat Proxy\n\n这是一个轻量级的 OpenAI API 代理服务,专注于转发 `/v1/chat/completions` 接口的请求到 OpenAI 或其他兼容的服务。支持流式响应输出,API 密钥映射,以及 IP 访问控制。\n\n## 功能特点\n\n- 支持 OpenAI `/v1/chat/completions` 接口的完整功能\n- 支持流式输出 (SSE)\n- 支持自定义转发目标路径\n- 支持请求字段别名映射\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n ```\n copy openai-chat-proxy-config.example.yaml openai-chat-proxy-config.yaml\n ```\n\n2. 编辑 `openai-chat-proxy-config.yaml` 文件,设置你的 API 密钥和其他参数。\n\n### 启动服务\n\n在 Windows 系统上:\n- 双击 `run_proxy.bat` 或 `run_proxy.ps1` 启动服务\n\n或者使用命令行:\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n## 使用方法\n\n服务启动后,可以将原本发送到 `https://api.openai.com/v1/chat/completions` 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer my_key_1\n```\n\n服务会自动将其映射为实际的 OpenAI API 密钥。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 /chat 路径\nproxy_url_path: \"/chat\"\n```\n\n这样,当客户端请求 `/v1/chat/completions` 时,服务会将请求转发到 `https://api.openai.com/chat`(或你配置的其他基础URL)。\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则。这对于连接不同API格式的服务非常有用:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer my_key_1\" `\n -d '{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n```\npip install fastapi uvicorn aiohttp pydantic loguru orjson pyyaml\n```\n\n## 健康检查\n\n可以通过访问 `/healthz` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/healthz\n``` "}, "a56fc49bb84dafd2ebe0241fc15b85c9b6359d9b": {"t": 1785768128.7648544, "n": 2124, "h": "3de84092c993e0ff", "c": "# OpenAI Chat Proxy\n\n这是一个轻量级的 OpenAI API 代理服务,专注于转发 `/v1/chat/completions` 接口的请求到 OpenAI 或其他兼容的服务。支持流式响应输出,API 密钥映射,以及 IP 访问控制。\n\n## 功能特点\n\n- 支持 OpenAI `/v1/chat/completions` 接口的完整功能\n- 支持流式输出 (SSE)\n- 支持自定义转发目标路径\n- 支持请求字段别名映射\n- API 密钥映射,便于管理和保护实际 API 密钥\n- IP 白名单/黑名单访问控制\n- 可配置的请求和响应日志记录\n- 支持 HTTP 代理\n\n## 快速开始\n\n### 配置\n\n1. 复制示例配置文件并根据需要修改:\n ```\n copy openai-chat-proxy-config.example.yaml openai-chat-proxy-config.yaml\n ```\n\n2. 编辑 `openai-chat-proxy-config.yaml` 文件,设置你的 API 密钥和其他参数。\n\n### 启动服务\n\n在 Windows 系统上:\n- 双击 `run_proxy.bat` 或 `run_proxy.ps1` 启动服务\n\n或者使用命令行:\n```\npython openai_chat_proxy.py\n```\n\n服务默认在 `0.0.0.0:8000` 上启动,可以通过修改代码中的端口号来更改。\n\n## 使用方法\n\n服务启动后,可以将原本发送到 `https://api.openai.com/v1/chat/completions` 的请求改为发送到:\n\n```\nhttp://localhost:8000/v1/chat/completions\n```\n\n在请求头中使用你在配置文件中设置的前端密钥:\n\n```\nAuthorization: Bearer my_key_1\n```\n\n服务会自动将其映射为实际的 OpenAI API 密钥。\n\n### 自定义转发路径\n\n你可以在配置文件中设置 `proxy_url_path` 参数来自定义转发目标的路径。例如:\n\n```yaml\n# 将请求转发到 /chat 路径\nproxy_url_path: \"/chat\"\n```\n\n这样,当客户端请求 `/v1/chat/completions` 时,服务会将请求转发到 `https://api.openai.com/chat`(或你配置的其他基础URL)。\n\n### 字段别名映射\n\n你可以在配置文件中设置 `field_aliases` 参数来自定义请求JSON数据中字段名的转换规则。这对于连接不同API格式的服务非常有用:\n\n```yaml\nfield_aliases:\n \"model\": \"model_id\" # 将请求中的model字段转换为model_id\n```\n\n使用此配置,当发送以下请求时:\n\n```json\n{\n \"model\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n服务会自动将其转换为以下格式后再转发:\n\n```json\n{\n \"model_id\": \"DeepSeek-V3-Fast\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"你好\"\n }\n ],\n \"temperature\": 0,\n \"stream\": true\n}\n```\n\n字段别名功能会递归应用到嵌套的对象和数组中,非常适合处理复杂的JSON结构。\n\n### 请求示例\n\n使用 curl 发送请求:\n\n```powershell\ncurl -X POST http://localhost:8000/v1/chat/completions `\n -H \"Content-Type: application/json\" `\n -H \"Authorization: Bearer my_key_1\" `\n -d '{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],\n \"stream\": true\n }'\n```\n\n## 依赖库\n\n需要安装以下 Python 依赖:\n```\npip install fastapi uvicorn aiohttp pydantic loguru orjson pyyaml\n```\n\n## 健康检查\n\n可以通过访问 `/healthz` 端点来检查服务是否正常运行:\n\n```\nhttp://localhost:8000/healthz\n``` "}}}} |