Python 调用 8848AI API 完整教程:requests 和 openai 库两种方式详解

你兴冲冲写好了 Python 代码,import openai,填好 API Key,运行——

ConnectionError: HTTPSConnectionPool: Max retries exceeded

换个节点再试——403 Forbidden

折腾两小时,翻遍 Stack Overflow,一行有效的 AI 输出都没拿到。

这不是你的代码问题,这是中国开发者调用 OpenAI/Anthropic 官方 API 的三道必经之坎:网络不稳定、支付门槛高(需要境外信用卡)、账号随时可能被封

今天这篇教程,就是要彻底终结这种体验。

我们用 8848AI(api.884819.xyz)作为 API 中转平台——国内网络直连、人民币充值、一个 Key 调用 GPT-4o / Claude 3.5 / Gemini 等全系模型。我会手把手演示两种最主流的 Python 调用方式,读完即可上手,不废话。

---

一、准备工作:5 分钟搞定环境与密钥

1.1 获取 API Key

打开 8848AI 官网([api.884819.xyz](https://api.884819.xyz)),注册账号并登录。新用户注册即有免费额度,足够跟完本教程所有示例。

进入控制台 → API Keys → 点击「创建新密钥」,复制生成的 Key(格式类似 sk-xxxxxxxxxxxxxxxx)。

⚠️ 安全提示:API Key 是你的账户凭证,绝对不要硬编码进代码里,更不要上传到 GitHub。

1.2 配置环境变量

把 Key 写入环境变量是最佳实践:

# macOS / Linux

export OPENAI_API_KEY="sk-你的密钥"

Windows PowerShell

$env:OPENAI_API_KEY="sk-你的密钥"

或者在项目根目录创建 .env 文件(记得加入 .gitignore):

OPENAI_API_KEY=sk-你的密钥

1.3 安装依赖库

pip install requests openai python-dotenv

1.4 环境自检脚本

运行以下脚本,确认所有准备工作就绪:

# check_env.py

import os

import sys

import requests

from dotenv import load_dotenv

load_dotenv()

print(f"Python 版本: {sys.version}")

api_key = os.getenv("OPENAI_API_KEY")

if not api_key:

print("❌ 未找到 OPENAI_API_KEY,请检查环境变量配置")

sys.exit(1)

print(f"✅ API Key 已加载: {api_key[:8]}{'' 20}")

BASE_URL = "https://api.884819.xyz/v1" # 8848AI 接口地址

try:

resp = requests.get(f"{BASE_URL}/models",

headers={"Authorization": f"Bearer {api_key}"},

timeout=10)

if resp.status_code == 200:

models = resp.json().get("data", [])

print(f"✅ 接口连通,当前可用模型数量: {len(models)}")

else:

print(f"❌ 接口返回异常: {resp.status_code}")

except Exception as e:

print(f"❌ 连接失败: {e}")

看到三个 ✅,说明你已经准备好了。接下来进入正题。

---

二、方式一:用 requests 库"裸调" API

为什么要学这种方式?

requests 方式不依赖任何 AI SDK,让你真正理解 API 通信的本质——本质上就是一个 HTTP POST 请求,带着你的 Key 和对话内容,发到服务器,拿回 JSON 响应。理解了这个,你就能把 AI 能力嵌入任意框架,不受 SDK 版本限制。

2.1 基础对话调用

# requests_basic.py

import os

import requests

from dotenv import load_dotenv

load_dotenv()

API_KEY = os.getenv("OPENAI_API_KEY")

BASE_URL = "https://api.884819.xyz/v1" # 8848AI 接口地址

def chat(message: str, model: str = "gpt-4o") -> str:

headers = {

"Authorization": f"Bearer {API_KEY}",

"Content-Type": "application/json",

}

body = {

"model": model,

"messages": [

{"role": "user", "content": message}

],

"temperature": 0.7,

"max_tokens": 1024,

}

response = requests.post(

f"{BASE_URL}/chat/completions",

headers=headers,

json=body,

timeout=30,

)

response.raise_for_status()

return response.json()["choices"][0]["message"]["content"]

if __name__ == "__main__":

reply = chat("用一句话解释什么是大语言模型")

print(reply)

运行后,终端会打出 AI 的回复。恭喜——你刚刚完成了第一次 AI API 调用。

2.2 多轮对话(携带上下文)

单轮对话解决不了实际需求,多轮对话的关键是把历史消息一起发给 API

# requests_multi_turn.py

import os

import requests

from dotenv import load_dotenv

load_dotenv()

API_KEY = os.getenv("OPENAI_API_KEY")

BASE_URL = "https://api.884819.xyz/v1" # 8848AI 接口地址

def multi_turn_chat():

history = [] # 存储对话历史

while True:

user_input = input("你: ").strip()

if user_input.lower() in ("exit", "quit", "q"):

break

history.append({"role": "user", "content": user_input})

response = requests.post(

f"{BASE_URL}/chat/completions",

headers={"Authorization": f"Bearer {API_KEY}",

"Content-Type": "application/json"},

json={"model": "gpt-4o", "messages": history},

timeout=30,

)

response.raise_for_status()

assistant_msg = response.json()["choices"][0]["message"]

history.append(assistant_msg) # 把 AI 回复也存入历史

print(f"AI: {assistant_msg['content']}\n")

if __name__ == "__main__":

multi_turn_chat()

2.3 流式输出(SSE 解析)

流式输出让回复像打字机一样逐字显示,用户体验远好于"等待 → 一次性输出":

# requests_stream.py

import os

import json

import requests

from dotenv import load_dotenv

load_dotenv()

API_KEY = os.getenv("OPENAI_API_KEY")

BASE_URL = "https://api.884819.xyz/v1" # 8848AI 接口地址

def stream_chat(message: str):

response = requests.post(

f"{BASE_URL}/chat/completions",

headers={"Authorization": f"Bearer {API_KEY}",

"Content-Type": "application/json"},

json={

"model": "gpt-4o",

"messages": [{"role": "user", "content": message}],

"stream": True, # 开启流式

},

stream=True, # requests 也要开启流式读取

timeout=60,

)

response.raise_for_status()

print("AI: ", end="", flush=True)

for line in response.iter_lines():

if not line:

continue

line = line.decode("utf-8")

if line.startswith("data: "):

data = line[6:]

if data == "[DONE]":

break

chunk = json.loads(data)

delta = chunk["choices"][0]["delta"].get("content", "")

print(delta, end="", flush=True)

print() # 换行

if __name__ == "__main__":

stream_chat("写一首关于程序员的五言绝句")

---

三、方式二:用 openai 官方库"无缝迁移"

最大的惊喜:只改两行代码

如果你已有基于 OpenAI SDK 的项目,迁移到 8848AI 只需修改两个参数:

# 原来的代码

client = openai.OpenAI(api_key="sk-官方key")

改成这样,其他代码零改动

client = openai.OpenAI(

api_key=os.getenv("OPENAI_API_KEY"),

base_url="https://api.884819.xyz/v1", # 8848AI 接口地址

)

就这两行。你所有的上层业务逻辑、Prompt 模板、对话管理代码,全部不用动。

3.1 同步调用

# openai_basic.py

import os

import openai

from dotenv import load_dotenv

load_dotenv()

client = openai.OpenAI(

api_key=os.getenv("OPENAI_API_KEY"),

base_url="https://api.884819.xyz/v1", # 8848AI 接口地址

)

response = client.chat.completions.create(

model="gpt-4o",

messages=[{"role": "user", "content": "Python 和 Go 各适合什么场景?"}],

temperature=0.7,

max_tokens=1024,

)

print(response.choices[0].message.content)

print(f"\n📊 Token 用量 | 输入: {response.usage.prompt_tokens} | 输出: {response.usage.completion_tokens}")

3.2 异步调用(asyncio)

高并发场景下,异步调用能显著提升吞吐量:

# openai_async.py

import os

import asyncio

import openai

from dotenv import load_dotenv

load_dotenv()

async_client = openai.AsyncOpenAI(

api_key=os.getenv("OPENAI_API_KEY"),

base_url="https://api.884819.xyz/v1", # 8848AI 接口地址

)

async def async_chat(prompt: str) -> str:

response = await async_client.chat.completions.create(

model="gpt-4o",

messages=[{"role": "user", "content": prompt}],

)

return response.choices[0].message.content

async def main():

# 并发发送 3 个请求

tasks = [

async_chat("解释递归"),

async_chat("解释闭包"),

async_chat("解释装饰器"),

]

results = await asyncio.gather(*tasks)

for i, result in enumerate(results, 1):

print(f"--- 回复 {i} ---\n{result}\n")

if __name__ == "__main__":

asyncio.run(main())

3.3 流式输出

# openai_stream.py

import os

import openai

from dotenv import load_dotenv

load_dotenv()

client = openai.OpenAI(

api_key=os.getenv("OPENAI_API_KEY"),

base_url="https://api.884819.xyz/v1", # 8848AI 接口地址

)

stream = client.chat.completions.create(

model="claude-3-5-sonnet-20241022", # 换个模型试试

messages=[{"role": "user", "content": "给我讲一个程序员的睡前故事"}],

stream=True,

)

print("AI: ", end="", flush=True)

for chunk in stream:

delta = chunk.choices[0].delta.content or ""

print(delta, end="", flush=True)

print()

---

四、两种方式怎么选?

| 对比维度 | requests 裸调 | openai 官方库 | | 代码量 | 稍多,需手动构造请求 | 少,SDK 封装完善 | | 学习曲线 | 需理解 HTTP/JSON 结构 | 几乎零门槛 | | 灵活性 | ⭐⭐⭐⭐⭐ 完全自定义 | ⭐⭐⭐ 受 SDK 约束 | | 功能完整度 | 取决于你自己实现多少 | 开箱即用,含异步/流式/函数调用 | | 迁移成本 | 无历史包袱 | 已有 OpenAI 项目:改两行搞定 | | 推荐场景 | 嵌入特殊框架、学习原理 | 新项目首选、快速开发 | 结论:新项目直接用 openai 库;有历史 OpenAI 项目直接改两行迁移;需要深度定制或理解底层原理时选 requests。

---

五、生产级封装与避坑指南

5.1 常见错误码速查

| 状态码 | 含义 | 解决方案 | | 401 | API Key 无效或过期 | 检查 Key 是否正确,是否已过期 | | 403 | 无权访问该模型 | 确认账户余额,检查模型名称是否正确 | | 429 | 请求频率超限 | 添加重试机制,指数退避 | | 500 | 服务端错误 | 稍后重试,或切换备用模型 | | 503 | 服务暂时不可用 | 等待后重试 |

5.2 生产级封装工具类

这段代码包含了重试机制、超时处理、Token 统计和日志记录,可以直接复制进项目:

# ai_client.py —— 生产级封装,可直接复用

import os

import time

import logging

import openai

from dotenv import load_dotenv

load_dotenv()

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")

logger = logging.getLogger(__name__)

class AIClient:

def __init__(self, model: str = "gpt-4o", max_retries: int = 3, timeout: int = 30):

self.client = openai.OpenAI(

api_key=os.getenv("OPENAI_API_KEY"),

base_url="https://api.884819.xyz/v1", # 8848AI 接口地址

timeout=timeout,

)

self.model = model

self.max_retries = max_retries

self.total_tokens = 0 # 累计 Token 用量

def chat(self, messages: list, **kwargs) -> str:

"""带重试机制的对话调用"""

for attempt in range(1, self.max_retries + 1):

try:

response = self.client.chat.completions.create(

model=self.model,

messages=messages,

**kwargs,

)

usage = response.usage

self.total_tokens += usage.total_tokens

logger.info(f"本次 Token | 输入:{usage.prompt_tokens} 输出:{usage.completion_tokens} | 累计:{self.total_tokens}")

return response.choices[0].message.content

except openai.RateLimitError:

wait = 2 ** attempt # 指数退避:2s, 4s, 8s

logger.warning(f"触发限速,{wait}s 后重试(第 {attempt} 次)")

time.sleep(wait)

except openai.APITimeoutError:

logger.warning(f"请求超时,重试中(第 {attempt} 次)")

except openai.APIError as e:

logger.error(f"API 错误: {e}")

if attempt == self.max_retries:

raise

raise RuntimeError(f"重试 {self.max_retries} 次后仍然失败")

def cost_estimate(self, input_price_per_1k: float = 0.005,

output_price_per_1k: float = 0.015) -> str:

"""估算费用(单位:元)"""

cost = self.total_tokens / 1000 * ((input_price_per_1k + output_price_per_1k) / 2)

return f"累计消耗 {self.total_tokens} tokens,预估费用约 ¥{cost:.4f}"

使用示例

if __name__ == "__main__":

client = AIClient(model="gpt-4o")

reply = client.chat([

{"role": "system", "content": "你是一个专业的 Python 代码审查专家"},

{"role": "user", "content": "帮我审查这段代码的性能问题:for i in range(len(lst)): print(lst[i])"},

])

print(reply)

print(client.cost_estimate())

5.3 几个实用建议

关于 temperature:创意写作用 0.8-1.0,代码生成用 0.1-0.3,问答类用 0.5-0.7。 关于 max_tokens:不要设置过小,否则回复会被截断。GPT-4o 支持最大 4096 输出 token,日常对话设 1024 够用。 关于成本控制:system prompt 越短越省钱;多轮对话要控制历史长度,超过 10 轮可以做摘要压缩;开发调试阶段用 gpt-4o-mini,成本约为 GPT-4o 的 1/15。

---

写在最后

回到最开头那个场景——Connection Timeout,403 Forbidden,两小时零产出。

今天跟完这篇教程,你已经能用两种方式稳定调用 GPT-4o、Claude 3.5 等顶级模型,还有一个可以直接复制进项目的生产级工具类。

网络不是门槛,支付不是门槛,不动手才是唯一的门槛。

现在打开终端,跑起来第一段代码吧。

---

📌 资源汇总

  • 8848AI 官网:[api.884819.xyz](https://api.884819.xyz)
  • API 文档:[api.884819.xyz/docs](https://api.884819.xyz/docs)
  • 模型与价格:[api.884819.xyz/pricing](https://api.884819.xyz/pricing)

---

🔜 下一篇预告

>

今天我们学会了调用 API——但 API 只是起点。

>

你有没有想过,把这个能力包装成一个微信聊天机器人,让朋友直接在微信里跟 GPT-4o 对话?或者做成飞书工作助手,帮团队自动处理日报、会议纪要?

>

下一篇《用 Python + 8848AI 搭建你的第一个 AI 聊天机器人(微信 / 飞书 / Telegram 三平台实战)》,我们将基于今天写的 AIClient 工具类,30 分钟内部署一个真正能对话的 AI Bot——代码你已经有了一半。

>

关注收藏,下周见。

---

本文由8848AI原创,转载请注明出处。