趋近智
通过编程发送提示并接收回复,需要从你的应用程序向 LLM 提供商的 API 端点发出 HTTP 请求。Python 及其丰富的库生态系统为此类交互提供了好方法。
在 Python 中进行 API 调用主要有两种方法:
requests 这样的库允许你手动构建和发送 HTTP 请求。这让你能精确控制请求的细节。requests 库进行调用requests 库因其简洁和强大,是 Python 中进行 HTTP 请求的常用选择。如果你尚未安装它,可以使用 pip 来安装:
pip install requests
要使用 requests 与 LLM API 交互,你通常需要发送一个 HTTP POST 请求。此请求包含:
https://api.openai.com/v1/chat/completions)。Authorization:包含你的 API 密钥,用于认证(通常以 Bearer 为前缀)。Content-Type:指定你正在发送的数据格式,几乎总是 application/json。temperature 和 max_tokens 等生成参数 (parameter)。让我们用一个针对 LLM API 端点的例子来说明。假设你的 API 密钥存储在一个名为 LLM_API_KEY 的环境变量中。
import requests
import os
import json
# 从环境变量中获取 API 密钥
api_key = os.getenv("LLM_API_KEY")
if not api_key:
raise ValueError("未找到 API 密钥。请设置 LLM_API_KEY 环境变量。")
# 定义 API 端点
api_url = "https://api.example-llm-provider.com/v1/generate" # 替换为实际端点
# 设置请求头
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}
# 构建请求体 (payload)
payload = {
"model": "example-model-v2", # 指定所需的 LLM
"prompt": "解释 HTTP GET 和 POST 请求之间的区别。",
"max_tokens": 150,
"temperature": 0.7,
"stop_sequences": ["\n"] # 可选:生成应停止的序列
}
try:
# 发送 POST 请求
response = requests.post(api_url, headers=headers, data=json.dumps(payload))
# 检查请求是否成功(状态码 200 OK)
response.raise_for_status() # 对于不良响应(4xx 或 5xx)引发 HTTPError
# 解析 JSON 响应
result = response.json()
print("API 响应:")
print(result)
# 提取生成的文本(结构取决于 API)
if "choices" in result and len(result["choices"]) > 0:
generated_text = result["choices"][0].get("text", "未找到文本")
print("\n生成的文本:")
print(generated_text.strip())
else:
print("\n无法从响应中提取生成的文本。")
except requests.exceptions.RequestException as e:
print(f"API 请求期间发生错误:{e}")
except json.JSONDecodeError:
print(f"未能解码 JSON 响应:{response.text}")
except Exception as e:
print(f"发生意外错误:{e}")
在此示例中:
requests、os、json)。headers 字典,包括 Authorization 令牌和 Content-Type。payload 字典。确切的结构和参数名称会因具体的 LLM API 提供商而异。请查阅他们的文档。requests.post() 发送请求。我们传递 URL、请求头和 JSON 序列化的请求体(json.dumps(payload))。response.raise_for_status() 对于基本的错误检查很重要。如果 API 返回错误状态码(如 401 Unauthorized、429 Rate Limit Exceeded 或 500 Internal Server Error),它将引发异常。response.json() 会将 JSON 响应体解析为一个 Python 字典。try...except)被包含在内,以捕获潜在的网络问题、JSON 解析问题或其他异常。使用 requests 提供了透明度,并且适用于任何基于 HTTP 的 API,但它要求你手动处理 JSON 序列化和请求头构建等细节。
LLM 提供商通常提供 Python SDK,以简化与其 API 的交互。这些库抽象了底层的 HTTP 请求细节,提供了更具 Python 风格的接口。
例如,使用 OpenAI Python 库(通过 pip install openai 安装),进行聊天完成请求的代码如下所示:
import os
from openai import OpenAI, OpenAIError
# SDK 通常会自动在环境变量中查找 API 密钥
# (例如 OPENAI_API_KEY),或者你可以在客户端初始化时传入。
# 请确保你的环境中设置了 OPENAI_API_KEY。
try:
client = OpenAI() # API 密钥会从 OPENAI_API_KEY 环境变量中隐式读取
# 使用 SDK 的方法进行 API 调用
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "解释编程中递归的概念。",
}
],
model="gpt-3.5-turbo", # 指定模型
max_tokens=100,
temperature=0.8,
)
# 通过 SDK 对象访问响应内容
print("API 响应对象:")
# print(chat_completion) # 原始 SDK 对象可能很冗长
if chat_completion.choices:
response_content = chat_completion.choices[0].message.content
print("\n生成的文本:")
print(response_content.strip())
else:
print("未找到响应选项。")
# 如果可用,打印使用信息
if chat_completion.usage:
print("\n令牌用量:")
print(f"提示令牌数:{chat_completion.usage.prompt_tokens}")
print(f"完成令牌数:{chat_completion.usage.completion_tokens}")
print(f"总令牌数:{chat_completion.usage.total_tokens}")
except OpenAIError as e:
print(f"发生 OpenAI API 错误:{e}")
except Exception as e:
print(f"发生意外错误:{e}")
与使用 requests 相比,请注意以下区别:
openai 库实例化一个 client 对象。认证通常由 SDK 隐式处理(例如,从环境变量中读取 OPENAI_API_KEY)。client.chat.completions.create)。model、messages、max_tokens 和 temperature 等参数 (parameter)作为函数参数传递。choices[0].message.content 或用量统计等特定字段更加容易。OpenAIError),以便更好地处理与 API 相关的错误。requests:
对于大多数应用程序开发而言,推荐使用官方提供商 SDK,因为它能简化开发和维护。然而,了解如何使用 requests 对于调试、处理不太常见的 API,或当你需要直接控制网络交互时非常有价值。无论采用哪种方法,安全处理 API 密钥和错误处理都是可靠应用程序开发的重要组成部分。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
requests Documentation, Kenneth Reitz and `requests` Contributors, 2024 - Python requests库的官方文档,提供了关于发起HTTP请求的全面指南和API参考。requests库与Web API交互的部分,适合初学者。© 2026 ApX Machine Learning用心打造