用Python调用LLM API的5种方式
大语言模型(LLM)已经从研究实验室走进了日常开发流程。无论你在做智能客服、内容生成、代码辅助还是数据分析,几乎都绕不开“用 Python 调一个 LLM API”这件事。然而市面上的调用方式五花八门:官方 SDK、原生 HTTP、第三方框架、统一聚合接口、流式输出……新手很容易被绕晕。
本文整理了 5 种最常用的 Python 调用 LLM API 的方式,从最基础的 OpenAI SDK 讲到统一聚合 API,每种都附带可直接运行的代码示例。读完之后,你可以根据项目规模、团队习惯和成本预算,选择最适合自己的一种。
方式一:使用 OpenAI 官方 SDK
这是最经典也是最广泛使用的方式。OpenAI 官方提供了 openai 这个 Python 包,封装好了鉴权、请求、重试、流式等逻辑,开箱即用。绝大多数兼容 OpenAI API 格式的服务(包括 EnlyAI)都可以直接用这套 SDK 接入。
首先安装:
# 安装 OpenAI 官方 SDK
pip install openai
然后写一个最简单的调用:
from openai import OpenAI
client = OpenAI(
api_key="sk-your-api-key",
# 如果使用 EnlyAI,只需把 base_url 改成聚合地址
# base_url="https://enlyai.com/v1"
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "你是一个简洁的助手"},
{"role": "user", "content": "用一句话解释什么是向量数据库"}
]
)
print(response.choices[0].message.content)
这种方式的优势是生态最成熟,几乎所有教程、示例、工具链都基于它。缺点是默认只能调用 OpenAI 自家的模型,如果想用 Claude 或 Gemini,需要换 SDK 或换 base_url。
提示:把
base_url改成https://enlyai.com/v1,同一套代码就能在 GPT、Claude、Gemini 等几十种模型之间无缝切换,无需修改任何业务代码。
方式二:使用 requests 库直接调用 HTTP API
如果你不想引入额外依赖,或者需要对请求做更细粒度的控制(自定义 header、代理、超时),可以直接用 Python 标准库的 urllib 或第三方 requests 调用 REST 接口。LLM API 本质上就是一个 HTTP POST 请求。
import requests
import json
url = "https://enlyai.com/v1/chat/completions"
headers = {
"Authorization": "Bearer sk-your-api-key",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "写一首关于秋天的五言绝句"}
],
"temperature": 0.7
}
resp = requests.post(url, headers=headers, json=payload, timeout=60)
data = resp.json()
print(data["choices"][0]["message"]["content"])
对应的 cURL 命令如下,方便你在终端快速测试:
curl https://enlyai.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "写一首关于秋天的五言绝句"}]
}'
原生 HTTP 方式的好处是零依赖、最透明,出问题时排查方便。缺点是需要自己处理错误重试、流式解析、类型转换等细节,代码量会偏多。
方式三:使用 LangChain 框架
当你的应用涉及多步推理、工具调用、文档检索(RAG)时,手写 prompt 链会非常痛苦。LangChain 是目前最流行的 LLM 应用框架,它把“模型调用 + 提示词模板 + 记忆 + 工具”抽象成可组合的组件。
pip install langchain langchain-openai
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 通过 EnlyAI 统一接入,可随时切换底层模型
llm = ChatOpenAI(
model="gpt-4o-mini",
api_key="sk-your-api-key",
base_url="https://enlyai.com/v1",
temperature=0.3
)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位资深 {role},请用专业但易懂的语言回答。"),
("user", "{question}")
])
chain = prompt | llm
result = chain.invoke({
"role": "数据库工程师",
"question": "为什么 PostgreSQL 比 MySQL 更适合复杂查询?"
})
print(result.content)
LangChain 适合中大型 LLM 应用,尤其是需要 Agent、RAG、多轮对话的场景。它的学习曲线相对陡峭,但一旦熟悉后,开发效率会大幅提升。需要注意的是,LangChain 默认对接 OpenAI,但通过 base_url 参数同样可以接入 EnlyAI 这类聚合平台。
方式四:使用 EnlyAI 统一 API(一行代码切换模型)
前面三种方式都有一个共同痛点:换模型就要改代码。比如你今天用 GPT-4o,明天想试 Claude 3.5 Sonnet,后天又想用 Gemini 2.0 Flash,每个模型都有自己的 SDK 和鉴权方式,维护起来很麻烦。
EnlyAI 提供了一个统一 API 接口,完全兼容 OpenAI API 格式,你只需要改 model 字段就能在几十种模型之间切换,API base URL 统一是 https://enlyai.com/v1。
from openai import OpenAI
client = OpenAI(
api_key="sk-your-enlyai-key",
base_url="https://enlyai.com/v1"
)
# 同一套代码,只需改 model 名称
models = ["gpt-4o-mini", "claude-3-5-sonnet", "gemini-2.0-flash"]
for model in models:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "1+1等于几?"}]
)
print(f"[{model}] -> {resp.choices[0].message.content}")
统一 API 的核心价值在于:
- 一套密钥:不用在每个平台分别注册、充值、管理 key。
- 统一计费:所有模型调用汇总在一个账单,方便成本分析。
- 故障转移:某个模型服务波动时,可快速切换到备用模型。
- 零迁移成本:原本基于 OpenAI SDK 的代码几乎不用改。
方式五:流式输出与异步调用
在生产环境中,用户体验往往取决于“首字延迟”。如果让用户等 10 秒才看到完整回复,体验会很差;但如果能像 ChatGPT 那样一个字一个字地“吐”出来,感知速度会快很多。这就需要用到流式输出(Streaming)。
同步流式
from openai import OpenAI
client = OpenAI(api_key="sk-your-key", base_url="https://enlyai.com/v1")
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "讲一个 300 字的科幻小故事"}],
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
异步批量调用
当你需要同时处理大量请求(比如批量翻译、批量摘要)时,同步调用会非常慢。使用 AsyncOpenAI 可以并发发起多个请求,大幅提升吞吐量。
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key="sk-your-key", base_url="https://enlyai.com/v1")
async def ask(question: str):
resp = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": question}]
)
return resp.choices[0].message.content
async def main():
questions = ["什么是 RAG?", "什么是 Agent?", "什么是 MoE?"]
results = await asyncio.gather(*[ask(q) for q in questions])
for q, a in zip(questions, results):
print(f"Q: {q}\nA: {a}\n")
asyncio.run(main())
异步 + 流式是高并发 LLM 服务的标配组合。配合 FastAPI 等 Web 框架,可以轻松搭建一个支持 SSE(Server-Sent Events)的聊天后端。
五种方式对比总结
| 方式 | 适用场景 | 学习成本 | 灵活性 |
|---|---|---|---|
| OpenAI SDK | 快速原型、通用业务 | 低 | 中 |
| requests / HTTP | 轻量依赖、定制化 | 低 | 高 |
| LangChain | RAG、Agent、复杂链路 | 高 | 高 |
| EnlyAI 统一 API | 多模型切换、成本优化 | 低 | 高 |
| 流式 / 异步 | 实时聊天、高并发 | 中 | 高 |
实战建议
根据我自己的踩坑经验,给几条实用建议:
- 从 OpenAI SDK 起步:新手不要一上来就上 LangChain,先把基础调用、流式、函数调用跑通,理解 token、temperature、system prompt 的作用。
- 尽早接入统一 API:哪怕你只用 GPT,也建议从一开始就用 EnlyAI 这类聚合接口。未来想换模型时,改一个字符串就行,而不是重构整个项目。
- 生产环境务必加超时和重试:LLM API 偶尔会超时或返回 5xx,用
tenacity库做指数退避重试是标配。 - 监控 token 消耗:每次请求都记录 prompt_tokens 和 completion_tokens,否则账单会悄悄失控。
- 把密钥放环境变量:永远不要把 API key 写死在代码里,用
os.getenv("OPENAI_API_KEY")读取。
掌握这五种方式,基本能覆盖 99% 的 LLM 开发场景。剩下的 1%,往往就是把这些方式组合起来——比如用 LangChain 编排逻辑、用 EnlyAI 统一接入多模型、用异步流式提升体验。
想用一套 API 调用所有主流大模型?
EnlyAI 提供 OpenAI 兼容的统一接口,支持 GPT、Claude、Gemini 等数十种模型,注册即送免费额度,无需分别申请多个平台账号。
立即注册 EnlyAI →