
要调用各家大模型的API,核心是理解每个厂商的认证方式、请求端点、消息格式和参数差异。虽然具体细节不同,但都遵循 RESTful 风格(或 gRPC),返回 JSON。下面我以 Python 为例,详细介绍主流模型的调用方法,并给出一个统一封装的思路。
- API Key:绝大多数服务通过 Bearer Token 或自定义 header 认证。
- Base URL:每个模型有专属 endpoint,如
https://api.openai.com/v1/chat/completions。 - 请求体:通常包含
model、messages(或prompt)、temperature、max_tokens等参数。 - 响应:返回
choices[0].message.content,流式响应则为 Server-Sent Events (SSE)。 - 错误处理:HTTP 状态码(401 认证失败、429 限流、500 服务错误)及错误信息。
import openai import os openai.api_key = os.getenv("OPENAI_API_KEY") response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Explain API calling."} ], temperature=0.7, max_tokens=500, stream=False ) print(response.choices[0].message.content)
流式响应:
stream = openai.ChatCompletion.create( model="gpt-4", messages=[...], stream=True ) for chunk in stream: if chunk.choices[0].delta.get("content"): print(chunk.choices[0].delta.content, end="")
注意:OpenAI 支持 function calling,需要在请求中定义 functions 参数。
Anthropic 使用独立的 API 格式,消息结构为 messages 数组,并且必须包含 system 字段(可选)。
import anthropic client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY")) response = client.messages.create( model="claude-3-opus-", system="You are a helpful assistant.", messages=[ {"role": "user", "content": "Explain API calling."} ], temperature=0.7, max_tokens=500 ) print(response.content[0].text)
特点:
- 不支持
function calling(截至 Claude 3 需借助 XML 或外部工具)。 - 支持多模态(上传图片 base64)。
- 流式响应使用
client.messages.create(..., stream=True)。
Gemini API 使用 generateContent 端点,认证通过 API Key 或 OAuth。
import google.generativeai as genai genai.configure(api_key=os.getenv("GEMINI_API_KEY")) model = genai.GenerativeModel('gemini-pro') response = model.generate_content("Explain API calling.", generation_config=genai.types.GenerationConfig( temperature=0.7, max_output_tokens=500 )) print(response.text)
多轮对话:
chat = model.start_chat(history=[]) chat.send_message("Hello") response = chat.send_message("Explain API calling.")
流式:
response = model.generate_content(prompt, stream=True) for chunk in response: print(chunk.text, end="")
百度使用千帆大模型平台,需要先获取 access token。
import requests # 获取 access token def get_access_token(api_key, secret_key): url = "https://aip.baidubce.com/oauth/2.0/token" params = {"grant_type": "client_credentials", "client_id": api_key, "client_secret": secret_key} return requests.post(url, params=params).json()["access_token"] access_token = get_access_token("your_api_key", "your_secret_key") # 调用文心一言 url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={access_token}" payload = { "messages": [{"role": "user", "content": "Explain API calling."}], "temperature": 0.7, "max_output_tokens": 500 } response = requests.post(url, json=payload).json() print(response["result"])
注意:百度要求先获取短期 token(有效期30天),需要缓存并定期刷新。
阿里使用 DashScope SDK 或 HTTP API。
from dashscope import Generation import os os.environ["DASHSCOPE_API_KEY"] = "your_api_key" response = Generation.call( model="qwen-max", messages=[{"role": "user", "content": "Explain API calling."}], temperature=0.7, max_tokens=500, result_format="message" ) print(response.output.choices[0].message.content)
流式:设置 stream=True,然后迭代 response。
智谱使用 zhipuai SDK,支持异步和同步。
from zhipuai import ZhipuAI client = ZhipuAI(api_key="your_api_key") response = client.chat.completions.create( model="glm-4", messages=[{"role": "user", "content": "Explain API calling."}], temperature=0.7, max_tokens=500 ) print(response.choices[0].message.content)
流式:stream=True,然后循环 response。
- Cohere:
cohere.Client(api_key).generate(model="command", prompt=..., ...) - AI21:
https://api.ai21.com/studio/v1/j2-ultra/complete带Authorization: Bearer。
如果你想用同一套代码调用不同模型,推荐 litellm 库。
import litellm import os os.environ["OPENAI_API_KEY"] = "..." os.environ["ANTHROPIC_API_KEY"] = "..." os.environ["GEMINI_API_KEY"] = "..." # 统一调用 response = litellm.completion( model="gpt-4", # 或 "claude-3-opus", "gemini-pro", "bedrock/anthropic.claude-3-sonnet" messages=[{"role": "user", "content": "Explain API calling."}], temperature=0.7 ) print(response.choices[0].message.content)
litellm 会自动处理认证、重试、流式、输出格式转换,并支持上百种模型。
- 永远使用环境变量或密钥管理服务,不要硬编码。
- 定期轮换 API Key。
import tenacity @tenacity.retry(stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_exponential(multiplier=1, min=2, max=10)) def call_api_with_retry(): # API 调用 pass
- 捕获
openai.error.RateLimitError、requests.exceptions.Timeout等特定异常。 - 实现指数退避。
- 对于长输出,使用
stream=True改善用户体验。 - 设置合理的超时(
timeout=60),避免阻塞。
- 设置
max_tokens上限。 - 监控 usage(
response.usage.total_tokens)。
- 对于高并发场景,使用
asyncio+aiohttp或对应 SDK 的异步版本(如openai.AsyncOpenAI)。
import asyncio from openai import AsyncOpenAI client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY")) async def call_async(): response = await client.chat.completions.create(...) return response
- 定义自己的消息格式,写适配器将不同厂商的响应转为统一结构。
- 或者直接使用 litellm / LangChain 等抽象层。
import os from typing import List, Dict class MultiModelClient: def __init__(self, model_name: str): self.model_name = model_name self._setup_client() def _setup_client(self): if self.model_name.startswith("gpt"): import openai openai.api_key = os.getenv("OPENAI_API_KEY") self.client = openai.ChatCompletion elif self.model_name.startswith("claude"): import anthropic self.client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY")) elif self.model_name.startswith("gemini"): import google.generativeai as genai genai.configure(api_key=os.getenv("GEMINI_API_KEY")) self.client = genai.GenerativeModel(self.model_name) # 继续添加其他模型... def call(self, messages: List[Dict[str, str]], kwargs): if self.model_name.startswith("gpt"): response = self.client.create( model=self.model_name, messages=messages, kwargs ) return response.choices[0].message.content elif self.model_name.startswith("claude"): # 将 openai 格式 messages 转换为 claude 格式 system = next((m["content"] for m in messages if m["role"] == "system"), None) user_msgs = [m for m in messages if m["role"] != "system"] response = self.client.messages.create( model=self.model_name, system=system, messages=user_msgs, kwargs ) return response.content[0].text # ... 其他模型转换
- 官方文档:OpenAI、Anthropic、Google AI Studio、百度千帆、阿里灵积。
- Postman 集合:每个平台都提供 Postman 示例,方便调试。
- 抓包验证:使用
mitmproxy或curl -v查看原始 HTTP 请求。 - 模拟响应:开发阶段可 mock API 返回,避免消耗额度。
调用大模型 API 本质上就是 构造 HTTP 请求 → 解析 JSON → 处理异常。掌握了这个通用模式,再针对每个厂商的特殊字段(如 OpenAI 的 function_call、Google 的 safety_settings)做适配,就能灵活驾驭各种模型。建议从 OpenAI 开始练习,因为它格式最标准、文档最全,然后再拓展到其他厂商。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/258292.html