本文将以OpenAI接口为例,介绍调用大模型API的三种方式,从最高级的封装到最原始的http请求,依次介绍LangChain、OpenAI官方SDK、requests请求。

LangChain 封装调用

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
temperature=0.2,
model_name=os.environ.get("QWEN_MODEL_NAME"),
openai_api_key=os.environ.get("QWEN_API_KEY"),
openai_api_base=os.environ.get("QWEN_API_URL"),
max_tokens=int(os.environ.get("MAX_TOKENS", 1000))
)

response = llm.invoke("你是谁?")
print(response.content)

特点

  • 封装层次高:LangChain 封装了模型调用、上下文管理、提示模版等,用户只需调用 invoke() 就能得到模型输出。

  • 适合复杂应用:可以很方便地在多轮对话、链式调用、工具调用等场景下使用。

  • 默认处理:LangChain 会帮你做一些参数处理和返回值封装,比如 response.content

  • 限制:自定义底层请求参数比较麻烦,不适合做一些非常特殊的 API 调用。


OpenAI 官方 SDK 调用

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os
from openai import OpenAI

client = OpenAI(
api_key=os.environ.get("QWEN_API_KEY"),
base_url=os.environ.get("QWEN_API_URL")
)

messages = [
{'role': 'system', 'content': '请仔细分析用户的问题,并在回答前先进行逐步推理。'},
{'role': 'user', 'content': '你是谁?/think'}
]

completion = client.chat.completions.create(
model=os.environ.get("QWEN_MODEL_NAME"),
messages=messages,
extra_body={
"enable_thinking": False,
"enable_search": False
},
temperature=0.1,
top_p=1.0
)

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

特点

  • 官方 SDK:由 OpenAI 提供,接口与 API 完全一致。
  • 参数灵活:可以直接传入模型特有的扩展参数(如 extra_body)。
  • 支持流式输出、批量调用等高级特性。
  • 限制:没有内置 prompt 组合、记忆等高级功能。如需上下文,需要手动更新messages
  • 返回值:需要自己去解析 completion.choices[0].message.content

原生 HTTP API 调用

其实说白了调用大模型的API就是发送HTTP请求,因此也可以用最原始的requests包进行

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import requests
import os

API_KEY = os.environ.get("QWEN_API_KEY")
API_URL = os.environ.get("QWEN_API_URL")
MODEL = os.environ.get("QWEN_MODEL_NAME")
API_URL = f"{API_URL}/chat/completions"

headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": MODEL,
"messages": [
{"role": "system", "content": "你是一个细心的助手。"},
{"role": "user", "content": "你是谁"}
],
"temperature": 0.2,
"top_p": 0.9,
"max_tokens": 20000,
"extra_body": {
"enable_thinking": True,
"enable_search": False
}
}

response = requests.post(API_URL, headers=headers, json=data)
print(response.json()['choices'][0]['message']['content'])

特点

  • 完全底层:直接用 requests 构造 HTTP POST 请求。
  • 零依赖:不需要任何 SDK 或框架。
  • 跨语言通用:任何能发 HTTP 请求的环境都能用。
  • 局限性:需要手动处理返回值 JSON,需要自己处理请求构造、返回解析、错误处理等。缺少高级封装(比如自动处理多轮对话或流式输出)。

三种方式对比总结

调用方式 封装程度 灵活性 易用性 适用场景
LangChain 构建多步骤 AI 应用
OpenAI SDK 灵活传参、直接调用模型
HTTP API 最高 中低 跨语言调用、完全定制化

总结建议

  • 如果你是快速原型 + 多功能集成 → 用 LangChain
  • 如果你只想直接用 LLM 且需要模型扩展参数 → 用 OpenAI SDK
  • 如果你需要跨语言调用或极端定制化 → 用 原生 HTTP API

选择哪种方式取决于项目的复杂度、团队的技术栈,以及对灵活性与封装性的取舍。


拓展阅读