Python调大模型,可以直接使用模型厂商(deepseek、qwen、GLM等)提供的API接口,但是需要付费。当然也可以直接调用本地自己部署的大模型。一、调用deepseek开放平台API
样例代码:
# Please install OpenAI SDK first: `pip3 install openai`import osfrom openai import OpenAI# 创建客户端,与AI大模型交换# DEEPSEEK_API_KEY: 环境变量,用于保存你自己的deepseekAPI keyclient = OpenAI( api_key=os.environ.get('DEEPSEEK_API_KEY'), base_url="https://api.deepseek.com")# 与AI大模型交互的参数# role = system 是系统角色,用于给大模型指定角色,content是角色描述# role = user 是用户角色,content是你的问题,也就是提示词response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是一个乐于助人的小助手,你可以准确幽默的回答用户提出的问题"}, {"role": "user", "content": "我想买一些苹果,苹果单价5.9元一斤,苹果单果重量300~500g,我现在有10元钱,那么我能买多少苹果?"}, ], stream=False)# 大模型返回的结果print(response.choices[0].message.content)""" 大模型回答结果中的”结论“部分内容:**结论**: 在 300~500 克范围内, - 如果苹果重量 **超过约 424 克**,你只能买 **1 个**。 - 如果苹果重量 **不超过约 424 克**,你可以买 **2 个**。 由于现实中你可以挑选,所以 **最可能买到 2 个中等偏小的苹果**,但若只买大的,就只能买 1 个。"""
调用需参考官方文档,从DeepSeek官方主页可进入。
如上,还是很简单的,这只是开始,还需不断探索。
二、Python调用ollama本地部署的大模型
通过 Python 调用本地 Ollama 服务来使用 deepseek-r1:1.5b 模型。Ollama 提供了两种常用方式:直接使用 HTTP API 或 使用官方的 ollama Python 库。推荐使用 ollama 库,代码更简洁。
以下是详细步骤、代码示例及注意事项。
1. 环境准备
确保 Ollama 已安装并运行
- 从 ollama.com 下载并安装 Ollama。
- 打开终端/命令行,运行
ollama serve 启动服务(如果已安装并配置为自启动,则服务已运行)。 - 确认模型已拉取:
ollama pull deepseek-r1:1.5b
安装 Python 依赖
安装 ollama Python 库(它是官方提供的 HTTP API 的封装):
(可选)若需手动控制 HTTP 请求,也可安装 requests:
2. Python 代码示例
使用 ollama 库(推荐)
import ollama# 非流式:一次性返回完整结果response = ollama.chat( model='deepseek-r1:1.5b', messages=[ {"role": "system", "content": "你是一个乐于助人的小助手,你可以准确幽默的回答用户提出的问题"}, {"role": "user", "content": "我想买一些苹果,苹果单价5.9元一斤,苹果单果重量300~500g,我现在有10元钱,那么我能买多少苹果?"}, ], stream=False)print(response['message']['content'])""" 答案:根据苹果的价格和重量的关系,以及您的预算,您只能买到约 **1.8 千克** 苹果。解释:- 约 **2 千克** 是以 **每公斤 5.9 元** 的价格购买的。- 每个苹果的重量约为 **300-400 克**,根据苹果的单价计算,您只能买到约 **1.8 千克**。"""
流式输出:
import ollamaresponse = ollama.chat( model='deepseek-r1:1.5b', messages=[{'role': 'user', 'content': '写一首关于春天的短诗。'}], stream=True)for chunk in response: print(chunk['message']['content'], end='', flush=True)
使用 requests 库直接调用 HTTP API
import requestsimport jsonurl = "http://localhost:11434/api/chat"payload = { "model": "deepseek-r1:1.5b", "messages": [{"role": "user", "content": "讲个笑话"}], "stream": False}response = requests.post(url, json=payload)data = response.json()print(data["message"]["content"])
流式输出:
import requestsimport jsonurl = "http://localhost:11434/api/chat"payload = { "model": "deepseek-r1:1.5b", "messages": [{"role": "user", "content": "讲个笑话"}], "stream": True}with requests.post(url, json=payload, stream=True) as r: for line in r.iter_lines(): if line: chunk = json.loads(line) if "message" in chunk and "content" in chunk["message"]: print(chunk["message"]["content"], end="", flush=True)
3. 参数说明与扩展
在 ollama.chat() 中可以通过 options 参数调整生成行为,例如:
ollama.chat( model='deepseek-r1:1.5b', messages=[...], options={ 'temperature': 0.7, # 控制随机性,范围 0~2,值越高越随机 'top_p': 0.9, # 核采样,保留概率质量之和达到 top_p 的 token 'max_tokens': 500, # 最大生成 token 数 'stop': ['\n\n'] # 停止词 })
HTTP API 同样支持 options 字段,将其放入请求的 JSON 中即可。
4. 注意事项
Ollama 服务必须运行
默认监听 http://localhost:11434。如果服务未启动,调用会失败。
模型名称严格匹配
拉取时可能带有版本号,例如 deepseek-r1:1.5b,调用时必须使用完全相同的名称。可通过 ollama list 查看已安装模型。
网络与超时
本地调用一般稳定,但若生成内容较长,建议设置超时(例如 requests.post(..., timeout=60)),避免程序卡住。
资源占用
deepseek-r1:1.5b 是 1.5B 参数的小模型,对显存和 CPU 要求较低,但仍需确保电脑有足够内存(至少 2GB 可用)。
错误处理
添加 try-except 捕获 ollama.ResponseError 或 requests.exceptions.RequestException,便于排查问题。
上下文管理
ollama.chat 本身不维护对话历史,你需要自己将历史消息列表传入 messages 中实现多轮对话。
流式与阻塞
流式输出适合实时显示;非流式则直接返回完整响应,适用于需要一次性处理结果的场景。
5. 多轮对话示例
import ollamamessages = []while True: user_input = input("你: ") if user_input.lower() in ['exit', 'quit']: break messages.append({'role': 'user', 'content': user_input}) response = ollama.chat( model='deepseek-r1:1.5b', messages=messages, stream=False ) assistant_reply = response['message']['content'] print(f"AI: {assistant_reply}") messages.append({'role': 'assistant', 'content': assistant_reply})
通过以上方法,你就可以在 Python 中轻松调用本地 Ollama 部署的 DeepSeek-R1 模型了。根据实际需求选择同步或流式方式,并合理设置生成参数,即可获得满意的服务。