Files

1 line
96 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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![优化前](./assets/baseline.png)\n\n使用上述优化后效果:\n![优化后](./assets/after_optimize.png)\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![优化前](./assets/baseline.png)\n\n使用上述优化后效果:\n![优化后](./assets/after_optimize.png)\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``` "}}}}