用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 的核心价值在于:

方式五:流式输出与异步调用

在生产环境中,用户体验往往取决于“首字延迟”。如果让用户等 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 多模型切换、成本优化
流式 / 异步 实时聊天、高并发

实战建议

根据我自己的踩坑经验,给几条实用建议:

  1. 从 OpenAI SDK 起步:新手不要一上来就上 LangChain,先把基础调用、流式、函数调用跑通,理解 token、temperature、system prompt 的作用。
  2. 尽早接入统一 API:哪怕你只用 GPT,也建议从一开始就用 EnlyAI 这类聚合接口。未来想换模型时,改一个字符串就行,而不是重构整个项目。
  3. 生产环境务必加超时和重试:LLM API 偶尔会超时或返回 5xx,用 tenacity 库做指数退避重试是标配。
  4. 监控 token 消耗:每次请求都记录 prompt_tokens 和 completion_tokens,否则账单会悄悄失控。
  5. 把密钥放环境变量:永远不要把 API key 写死在代码里,用 os.getenv("OPENAI_API_KEY") 读取。

掌握这五种方式,基本能覆盖 99% 的 LLM 开发场景。剩下的 1%,往往就是把这些方式组合起来——比如用 LangChain 编排逻辑、用 EnlyAI 统一接入多模型、用异步流式提升体验。

想用一套 API 调用所有主流大模型?

EnlyAI 提供 OpenAI 兼容的统一接口,支持 GPT、Claude、Gemini 等数十种模型,注册即送免费额度,无需分别申请多个平台账号。

立即注册 EnlyAI →