一篇文章讲清楚:中转API如何用Python调用ChatGPT

你是否遇到过这样的场景?
想把 ChatGPT 接入自己的应用,却被模型限制、价格波动、接口差异搞得一头雾水;
刚写好的代码,换一个模型就要重构一遍;
好不容易跑通了,又发现前端、后端、流式输出全都要重新适配。

现在,这些问题可以用一个“中转 API”一次性解决。

本教程将手把手带你使用神马中转API兼容 OpenAI Chat Completions 的中转 API,通过 Python 快速部署一个可切换多模型的 ChatGPT 应用。无论你使用的是 OpenAI、Claude、Gemini、DeepSeek,还是其他对话模型,只需要 一个统一接口、一套请求格式,就能完成调用。


这套中转API是什么

这套神马中转API接口兼容OpenAI 的 Chat Completions 格式:你只需要在请求体里改 model,就可以切换 OpenAI / Claude / Gemini / DeepSeek / Grok / Qwen 等模型。

你给的接口是Chat(聊天)

  • 方法:POST

  • 路径:/v1/chat/completions


准备工作:Base URL 与 API Key

文档说明:

  • BaseURL:通常是神马中转API域名,也可以在工作台页面查看

  • API key:在令牌页面获取

你可以把它们放到环境变量里(推荐):

export GPT_BEST_BASE_URL="你的BaseURL(例如:https://api.whatai.cc)" export GPT_BEST_API_KEY="你的API_KEY"

按文档拼请求:Header + Body

Header

文档示例里用的是:

  • Accept: application/json

  • Authorization: Bearer {{YOUR_API_KEY}}

  • Content-Type: application/json

Body

请求体(application/json)文档示例包含这些字段:model、messages、temperature、top_p、n、stream、stop、max_tokens、presence_penalty、frequency_penalty、logit_bias、user、response_format、seen、tools、tool_choice。

最小可用通常是 model + messages,其他按需加。


Python同步请求示例(requests)

import os import requests BASE_URL = os.getenv("GPT_BEST_BASE_URL") # 你的 BaseURL,https://api.whatai.cc) API_KEY = os.getenv("GPT_BEST_API_KEY") if not BASE_URL or not API_KEY: raise RuntimeError("请先设置 GPT_BEST_BASE_URL 和 GPT_BEST_API_KEY 环境变量") url = f"{BASE_URL.rstrip('/')}/v1/chat/completions" # 接口路径 headers = { "Accept": "application/json", "Authorization": f"Bearer {API_KEY}", # Bearer 方式 "Content-Type": "application/json", } payload = { "model": "gpt-4o-mini", # 按需替换成你要用的模型名 "messages": [ {"role": "system", "content": "你是一个严谨的编程助手。"}, {"role": "user", "content": "用Python写一个快速排序,并解释时间复杂度。"}, ], "temperature": 0.7, "top_p": 1, "n": 1, "stream": False, # 非流式 "max_tokens": 800, } resp = requests.post(url, headers=headers, json=payload, timeout=60) resp.raise_for_status() data = resp.json() # 返回格式示例:choices[0].message.content print(data["choices"][0]["message"]["content"]) print("usage:", data.get("usage"))

Python流式输出示例(stream=true)

文档请求体里有 stream: true 字段示例。

流式一般是服务端不断返回分片(常见是 SSE:data: ...)。

import os import json import requests BASE_URL = os.getenv("GPT_BEST_BASE_URL") API_KEY = os.getenv("GPT_BEST_API_KEY") url = f"{BASE_URL.rstrip('/')}/v1/chat/completions" headers = { "Accept": "application/json", "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", } payload = { "model": "gpt-4o-mini", "messages": [ {"role": "user", "content": "请用三句话解释什么是递归,并给一个Python例子。"} ], "stream": True, # 流式 "temperature": 0.6, } with requests.post(url, headers=headers, json=payload, stream=True, timeout=60) as r: r.raise_for_status() for line in r.iter_lines(decode_unicode=True): if not line: continue # 常见 SSE 行:data: {...} 或 data: [DONE] if line.startswith("data:"): line = line[len("data:"):].strip() if line == "[DONE]": break try: chunk = json.loads(line) except json.JSONDecodeError: # 如果服务端不是 SSE 格式而是纯JSON片段,可在这里按需兼容 continue # OpenAI 风格流式:choices[0].delta.content delta = chunk.get("choices", [{}])[0].get("delta", {}) content = delta.get("content") if content: print(content, end="", flush=True) print() # 换行

“部署一个 ChatGPT 应用”的最小后端:FastAPI转发(可选)

这个小服务做两件事:

  1. 接收你自己的前端请求

  2. 转发到中转 API 的 /v1/chat/completions(仍然保持文档要求的 Header/Body 结构)

import os import requests from fastapi import FastAPI, HTTPException from pydantic import BaseModel BASE_URL = os.getenv("GPT_BEST_BASE_URL") API_KEY = os.getenv("GPT_BEST_API_KEY") app = FastAPI() class ChatReq(BaseModel): model: str messages: list temperature: float | None = None top_p: float | None = None n: int | None = None stream: bool | None = None stop: str | None = None max_tokens: int | None = None presence_penalty: float | None = None frequency_penalty: float | None = None logit_bias: dict | None = None user: str | None = None response_format: dict | None = None seen: int | None = None tools: list | None = None tool_choice: dict | None = None @app.post("/chat") def chat(req: ChatReq): if not BASE_URL or not API_KEY: raise HTTPException(status_code=500, detail="Missing GPT_BEST_BASE_URL / GPT_BEST_API_KEY") url = f"{BASE_URL.rstrip('/')}/v1/chat/completions" # headers = { "Accept": "application/json", "Authorization": f"Bearer {API_KEY}", # "Content-Type": "application/json", } resp = requests.post(url, headers=headers, json=req.model_dump(exclude_none=True), timeout=60) if resp.status_code != 200: raise HTTPException(status_code=resp.status_code, detail=resp.text) return resp.json()

启动(示例):

uvicorn your_file_name:app --host 0.0.0.0 --port 8000

返回结果怎么看

文档给的返回示例结构是:

  • choices: 数组

  • choices[0].message.role/content

  • usage.prompt_tokens / completion_tokens / total_tokens

你在 Python 里通常取:

data["choices"][0]["message"]["content"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能井盖安全监测系统的设计与实现

目录智能井盖安全监测系统的设计原理系统硬件组成软件架构设计关键技术实现典型应用场景系统优势特点源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!智能井盖安全监测系统的设计原理 智能井盖安全监测系统通过物联网技术实时监控井盖状…

深度测评9个论文写作工具,自考学生一键生成论文工具推荐!

深度测评9个论文写作工具,自考学生一键生成论文工具推荐! 自考论文写作的革新之路 随着人工智能技术的飞速发展,越来越多的学生开始借助AI工具来提升论文写作效率。尤其是在自考群体中,面对繁重的学习任务和严格的论文要求&#x…

【节点】[NormalVector节点]原理解析与实际应用

在Unity的Shader Graph中,NormalVector节点是一个基础且重要的工具,它允许着色器访问网格的法线矢量信息。法线矢量在计算机图形学中扮演着关键角色,它定义了表面的朝向,是光照计算【Unity Shader Graph 使用与特效…

我在运动-轨迹查看器

我在运动-轨迹查看器我在运动-轨迹查看器v0.28 我在运动-轨迹查看器 使用帮助 功能: 导入运动、旅行走过的轨迹,在地图上动画真实还原 基本功能自定义动画标记、支持时区偏移时间、轨迹暂停模式 打开轨迹文件: 支持 K…

我在这儿--给照片加定位

我在这儿--给照片加定位我在这儿--给照片加定位 v0.21 增加exiftool及高德地图API批量添加水印 我在这儿--给照片加定位 使用说明这是《我在哪儿--照片定位查看助手》的同门兄弟,专门给没有GPS的照片、图片添加定位信…

2026年做得好的上海花旗大厦广告代理公司联系方式,上海外滩广告/电视台广告/公交广告,户外led大屏广告公司推荐

随着城市商业空间升级与品牌传播需求多元化,户外LED大屏广告凭借高曝光、强互动、精准触达等特性,成为品牌抢占核心商圈流量、塑造高端形象的关键载体。上海作为国际消费中心城市,花旗大厦等标志性建筑周边的大屏资…

如何在Azure Pipeline中使用PowerShell从OneDrive for Business下载指定文件

最近在配置AzureDevOps Pipeline的时候需要在执行任务之前下载一个cli工具,但是由于工具的下载服务器速度不稳定,有时候会造成Pipeline执行速度过慢导致整个流水线超时, 这时我想到可以把文件上传到OneDrive for Bu…

YOLOv26自行车部件检测识别系统实现

1. YOLOv26自行车部件检测识别系统实现 1.1. 系统概述 近年来,随着智能交通和城市共享单车系统的快速发展,自行车部件检测与识别技术在车辆管理、故障检测和维护保养等方面发挥着越来越重要的作用。YOLOv26作为一种先进的实时目标检测算法,…

35.LRU 缓存

面试题 16.25. LRU 缓存 设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近…

初学者使用 docker 快速体验 TDengine 功能

TDengine Docker 初学者完整指南 什么是 TDengine? TDengine 是一款专为物联网、工业互联网等场景设计的高性能时序数据库(Time-Series Database, TSDB)。它能够高效地处理海量时序数据的写入、存储和查询,广泛应用于智能制造、…

【LeetCode】四数之和 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

我在哪儿-- 照片定位查看助手

我在哪儿-- 照片定位查看助手我在哪儿-- 照片定位查看助手 功能:查看图片和缩略图 自动提取图片GPS信息 自动显示地理位置信息 在百度地图、高德地图和谷歌地图中查看位置使用说明:文件菜单:打开图片: 选择单个图片文件…

2026年企业AI获客必看:GEO服务商选型权威指南

随着生成式AI的全面普及,用户信息获取方式正经历历史性迁移。截至2026年初,国内主流AI平台日活跃用户已突破5000万,其中DeepSeek DAU超2000万,豆包MAU近6000万。据艾瑞咨询预测,2026年AI搜索将承接30%以上的商业查…

LoRA微调target module设置

目录原则1️⃣ 注意力 Q/K/V2️⃣ FFN(前馈层)target modules 最佳组合Q/V + 顶层 2~4 层 FFN 配置一、先给你一个“能直接用”的结论版本(以 Qwen / LLaMA 系结构为例)1️⃣ Q / V 的 target modules(必选)2️…

Claude Skills 保姆级教程:无脑照做就能用出效果

大家好,我是六哥。 Claude Skills 我也是上周一才知道有这么个东西,具体是什么完全没概念,想想还是自己知道的太晚了。 但说实话,这玩意成功的引起了我的好奇心,所以就有了这篇文章! 没有所谓的方法论和废话,下…

人工智能之核心技术 深度学习 第一章 神经网络基础

人工智能之核心技术 深度学习 第一章 神经网络基础—公式关注公众号 文章目录 人工智能之核心技术 深度学习一、感知器模型1.1 线性感知器(Perceptron)1.2 多层感知器(MLP, Multi-Layer Perceptron) 二、激活函数常见激活函数对比…

慢充3.3kW占20%,普通7kW占50%,快充11kW占20%,超充20kW占10

基于蒙特卡洛思想生成10000台充电汽车充电负荷曲线充电汽车负荷预测这事挺有意思的。咱们今天直接上干货,用蒙特卡洛方法撸出一万辆车子的充电曲线。别被名字吓到,说白了就是靠大量随机采样模拟真实场景——就像在赌场扔骰子,次数多了总能逼近…

2026年青少年心理辅导优选名单,口碑机构来助力,家庭教育指导/叛逆孩子教育/青少年心理咨询,青少年心理辅导学校排名

近年来,青少年心理健康问题日益凸显,厌学、叛逆、沉迷网络、抑郁焦虑等现象频发,引发社会广泛关注。据《2024年中国青少年心理健康蓝皮书》显示,我国青少年抑郁风险检出率达24.1%,亲子关系紧张、家庭教育缺失成为…

完整教程:目前流行的前端框架

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

电力市场出清程序。 IEEE14节点考虑输电阻塞,求解机组边际电价和节点边际电价。 采用拉格朗...

电力市场出清程序。 IEEE14节点考虑输电阻塞,求解机组边际电价和节点边际电价。 采用拉格朗日乘子进行分析计算,目标函数为发电成本最小。 运用matlab中的linprog()函数实现此程序,均为m程序。 其他测试系统完全可以根…