ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Day 2 Lab Chat Completions API 与 OpenAI 兼容端点 —— 云端接口与 Ollama 本地模型调用实践

2026/8/5 20:02:06 拓冰建站 浏览量
Day 2 Lab Chat Completions API 与 OpenAI 兼容端点 —— 云端接口与 Ollama 本地模型调用实践

 

前置准备

1. 安装依赖包

先在终端执行安装所需的 Python 库:
bash
 
 
pip install python-dotenv requests openai beautifulsoup4

 

 

2. 项目根目录新建 .env 文件

填入你的密钥,没有对应密钥可以先留空,对应环节跳过即可:
env
 
 
# OpenAI 云端 API 密钥
OPENAI_API_KEY=sk-proj-你的OpenAI密钥# Google Gemini 兼容端点配置
GOOGLE_API_KEY=AIz你的Google密钥
GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai/"

 

 

实验 1:加载环境变量 & 校验 OpenAI 密钥

对应讲义开头的密钥检查部分:
python
 
运行
 
 
import os
from dotenv import load_dotenv# 加载 .env 文件,override=True 确保每次修改后立即生效
load_dotenv(override=True)# 读取 OpenAI 密钥并校验格式
api_key = os.getenv('OPENAI_API_KEY')if not api_key:print("No API key was found - please head over to the troubleshooting notebook in this folder to identify & fix!")
elif not api_key.startswith("sk-proj-"):print("An API key was found, but it doesn't start sk-proj-; please check you're using the right key - see troubleshooting notebook")
else:print("API key found and looks good so far!")

 

 

实验 2:原生 requests 调用 OpenAI 接口

对应讲义「底层 HTTP 端点调用」部分,不依赖 openai 库,直接发 HTTP 请求:
python
 
运行
 
 
import requests
import json# 请求头:鉴权 + 内容格式
headers = {"Authorization": f"Bearer {api_key}","Content-Type": "application/json"
}# 请求体:模型名 + 对话消息
payload = {"model": "gpt-5-nano","messages": [{"role": "user", "content": "Tell me a fun fact"}]
}# 发送 POST 请求
response = requests.post("https://api.openai.com/v1/chat/completions",headers=headers,json=payload
)# 打印完整返回结果
print("完整响应:")
print(json.dumps(response.json(), indent=2, ensure_ascii=False))# 提取并打印模型回复内容
print("\n模型回复:")
print(response.json()["choices"][0]["message"]["content"])

 

 

实验 3:使用 openai 官方客户端库调用

对应讲义「Python 客户端库」部分,是对上面 HTTP 请求的封装,代码更简洁:
python
 
运行
 
 
from openai import OpenAI# 初始化 OpenAI 客户端(自动读取 .env 里的 OPENAI_API_KEY)
openai_client = OpenAI()# 调用聊天补全接口
response = openai_client.chat.completions.create(model="gpt-5-nano",messages=[{"role": "user", "content": "Tell me a fun fact"}]
)# 提取回复内容
print(response.choices[0].message.content)

 

 
讲义特别说明:openai 库只是轻量的接口调用封装,本身不包含任何大模型代码,模型全部在 OpenAI 云端运行。

实验 4:OpenAI 兼容端点 - Google Gemini

对应讲义「兼容端点」知识点:复用 openai 客户端,只改 base_urlapi_key 就能调用其他厂商模型:
python
 
运行
 
 
import os
from dotenv import load_dotenv
from openai import OpenAIload_dotenv(override=True)# 读取 Gemini 配置
google_api_key = os.getenv("GOOGLE_API_KEY")
gemini_base_url = os.getenv("GEMINI_BASE_URL")# 密钥校验
if not google_api_key:print("No API key was found - please be sure to add your key to the .env file, and save the file!")
elif not google_api_key.startswith(("AIz", "AQ.")):print("An API key was found, but it doesn't start with AIz or AQ.")
else:print("Google API key found and looks good so far!")# 用 openai 客户端调用 Gemini 兼容接口gemini_client = OpenAI(base_url=gemini_base_url,api_key=google_api_key)response = gemini_client.chat.completions.create(model="gemini-3.1-flash-lite",messages=[{"role": "user", "content": "Tell me a fun fact"}])print(response.choices[0].message.content)

 

 

实验 5:OpenAI 兼容端点 - Ollama 本地开源模型(核心)

对应讲义最关键的本地化离线部分:本地运行的 Ollama 同样提供 OpenAI 兼容接口,完全断网也能调用。

步骤 1:检查本地 Ollama 服务是否启动

python
 
运行
 
 
import requests# 访问 Ollama 默认本地地址
try:res = requests.get("http://localhost:11434")print("Ollama is running")
except Exception as e:print("Ollama 未启动,请先在终端执行 ollama serve")

 

 

步骤 2:拉取本地开源模型(终端执行,二选一即可)

bash
 
 
# 推荐基础版,3B 参数,普通电脑可跑
ollama pull llama3.2# 电脑配置较低可选 1B 参数版本
# ollama pull llama3.2:1b# 额外:DeepSeek 推理模型
# ollama pull deepseek-r1:1.5b

 

 

步骤 3:用 openai 客户端调用本地 Llama3.2 模型

python
 
运行
 
 
from openai import OpenAI# Ollama 本地兼容端点配置
OLLAMA_BASE_URL = "http://localhost:11434/v1"# 初始化客户端:api_key 随便填,Ollama 不校验
ollama_client = OpenAI(base_url=OLLAMA_BASE_URL,api_key="ollama"
)# 调用本地模型,和调用云端 API 代码完全一致
response = ollama_client.chat.completions.create(model="llama3.2",messages=[{"role": "user", "content": "Tell me a fun fact"}]
)print(response.choices[0].message.content)

 

 

步骤 4:调用本地 DeepSeek-R1 模型

python
 
运行
 
 
response = ollama_client.chat.completions.create(model="deepseek-r1:1.5b",messages=[{"role": "user", "content": "Tell me a fun fact"}]
)print(response.choices[0].message.content)

 

 

课后作业参考实现:本地 Ollama 版网页摘要工具

作业要求:把 Day 1 的「网页摘要项目」从 OpenAI 云端 API 改造成 Ollama 本地模型实现。
以下是完整可运行代码:
python
 
运行
 
 
import requests
from bs4 import BeautifulSoup
from openai import OpenAI# ========== 1. 配置本地 Ollama 客户端 ==========
OLLAMA_BASE_URL = "http://localhost:11434/v1"
MODEL = "llama3.2"  # 配置低可改成 llama3.2:1bollama_client = OpenAI(base_url=OLLAMA_BASE_URL,api_key="ollama"
)# ========== 2. 工具函数:抓取网页正文 ==========
def get_webpage_text(url):"""输入网址,提取网页纯文本内容"""headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}response = requests.get(url, headers=headers)response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.text, "html.parser")# 移除脚本和样式标签for tag in soup(["script", "style"]):tag.decompose()# 提取纯文本并清理多余空白text = soup.get_text(separator="\n", strip=True)return text# ========== 3. 本地模型生成摘要 ==========
def summarize_webpage(url):"""输入网址,返回本地模型生成的摘要"""# 抓取网页内容content = get_webpage_text(url)# 内容过长时截断,避免超出模型上下文content = content[:4000]prompt = f"""请用中文为以下网页内容生成一段简洁的摘要,控制在150字以内:
    {content}"""
    response = ollama_client.chat.completions.create(model=MODEL,messages=[{"role": "user", "content": prompt}],temperature=0.3)return response.choices[0].message.content# ========== 4. 测试运行 ==========
if __name__ == "__main__":test_url = "https://edwarddonner.com/2024/11/13/llm-engineering-resources/"summary = summarize_webpage(test_url)print("网页摘要结果:")print(summary)

 

 

关键提示

这套「OpenAI 兼容端点」模式是你实现断网本地化校园咨询系统的核心:RAG、Agent 项目,默认都是用 OpenAI 云端 API 编写,你只需要像上面一样,把 base_url 改成本地 Ollama 地址、模型名改成本地模型名,就能无缝切换为断网可用的本地版本,业务代码几乎不用修改。