前置准备
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_url 和 api_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 地址、模型名改成本地模型名,就能无缝切换为断网可用的本地版本,业务代码几乎不用修改。