wsl 安装部署ollama 调用代码示例
·
wsl 安装部署ollama 调用代码示例
网络上设置

安装ollama
安装ollama
sudo apt-get install zstd
curl -fsSL https://ollama.com/install.sh | sh
ollama安装模型
- deepseek-r1
ollama run deepseek-r1:1.5b - qwen3.5
ollama run qwen3.5:2b
修改ollama监听地址
-
停止旧服务
sudo pkill ollama # 或者 sudo systemctl stop ollama -
修改启动服务添加环境变量
sudo vim /etc/systemd/system/ollama.service -
修改启动服务添加环境变量内容如下
[Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/local/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="OLLAMA_HOST=0.0.0.0" Environment="PATH=/usr/local/cuda-13/bin:/usr/local/cuda-13/bin:/usr/local/cuda-13/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" [Install] WantedBy=default.target -
重载服务
sudo systemctl daemon-reload -
重启
ollama服务sudo systemctl restart ollama
四种调用方式
- httpx:原生 HTTP 请求,最基础的调用方式
- OpenAI 兼容接口:Ollama 自带 /v1 兼容接口,可直接用 OpenAI SDK
- LangChain:主流大模型开发框架,支持链式调用
- LangGraph:进阶工作流,实现多模型并行 / 串行调用
httpx 原生调用 Ollama
Ollama API HTTPX 客户端模块
开发思路
本模块使用 httpx 库实现与 Ollama API 的同步通信,
主要功能是通过 POST 请求调用本地部署的 Ollama 大语言模型服务。
采用同步阻塞方式等待模型响应,适用于简单直接的 API 调用场景。
设计要点:
- 使用 httpx.Client 创建同步客户端,通过上下文管理器确保连接正确关闭
- 配置较长的超时时间(120 秒)以应对大模型的生成延迟
- 封装统一的调用接口,简化后续使用
- 使用 raise_for_status() 自动处理 HTTP 错误状态码
安装依赖
pip install httpx
代码示例
# 导入 httpx 库,用于发送 HTTP 请求
import httpx
# 配置 Ollama 服务的基准 URL,格式为 "http://IP 地址:端口号"
OLLAMA_BASE_URL = "http://10.0.20.32:11434"
# 配置使用的模型名称,格式为 "模型名:版本号"
MODEL = "deepseek-r1:1.5b"
def ollama_httpx_call(prompt: str) -> str:
"""
使用 httpx 同步调用 Ollama API 生成文本回复
Args:
prompt (str): 用户输入的提示词/问题
Returns:
str: 模型生成的回复文本
Raises:
httpx.HTTPStatusError: 当 HTTP 响应状态码表示错误时抛出
"""
# 构建完整的 API 端点 URL,在基准 URL 后追加 "/api/generate" 路径
url = f"{OLLAMA_BASE_URL}/api/generate"
# 构造请求体字典,包含模型名称、提示词和流式传输设置
payload = {
"model": MODEL, # 指定使用的模型
"prompt": prompt, # 用户输入的提示词
"stream": False # 设置为非流式模式,一次性返回完整响应
}
# 创建 httpx 同步客户端实例,设置超时时间为 120 秒以防止长文本生成时超时
# 使用 with 语句确保客户端在使用完毕后自动关闭
with httpx.Client(timeout=120.0) as client:
# 向 Ollama API 发送 POST 请求,json 参数会自动将 payload 转换为 JSON 格式
resp = client.post(url, json=payload)
# 检查 HTTP 响应状态码,如果是 4xx 或 5xx 错误则抛出异常
resp.raise_for_status()
# 解析 JSON 响应,提取 "response" 字段并返回生成的文本内容
return resp.json()["response"]
# 测试入口
if __name__ == "__main__":
# 调用函数并传入测试提示词:"请用一句话解释大语言模型"
result = ollama_httpx_call("请用一句话解释大语言模型")
# 打印分隔标识,表明使用的是 httpx 方式
print("=== httpx 结果 ===")
# 打印模型返回的结果
print(result)
注意事项
- 确保 Ollama 服务已启动且可访问
- MODEL 参数需替换为实际可用的模型名称
- OLLAMA_BASE_URL 需根据实际部署地址修改
OpenAI 兼容接口调用
Ollama API OpenAI 兼容客户端模块
开发思路
本模块使用 OpenAI 官方 SDK 实现与 Ollama API 的通信,利用 Ollama 提供的 OpenAI 兼容接口。
通过这种方式可以使用 OpenAI 的标准调用方式来访问本地部署的 Ollama 大语言模型服务,
便于后续迁移到真正的 OpenAI API 或其他兼容服务(如 vLLM、LocalAI 等)。
设计要点:
- 使用 OpenAI 官方 SDK,保证类型安全和代码规范性
- 通过 base_url 参数将请求路由到本地 Ollama 服务
- 使用 ChatCompletionUserMessageParam 确保消息格式符合 OpenAI 标准
- 设置 temperature=0.1 降低随机性,使输出更加稳定一致
- 封装统一的调用接口,简化后续使用
安装依赖
pip install openai
使用示例
# 从 openai 库导入 OpenAI 客户端类,用于创建 API 客户端实例
from openai import OpenAI
# 从 openai.types.chat 导入聊天完成用户消息参数类型,用于确保消息格式正确
from openai.types.chat import ChatCompletionUserMessageParam
# 配置 Ollama 服务的基准 URL,指向 OpenAI 兼容接口的 /v1 端点
# 格式为 "http://IP 地址:端口号/v1"
OLLAMA_BASE_URL = "http://10.0.20.32:11434/v1"
# 配置使用的模型名称,格式为 "模型名:版本号"
MODEL = "qwen3.5:2b"
def ollama_openai_call(prompt: str) -> str:
"""
使用 OpenAI SDK 调用 Ollama API 生成文本回复
Args:
prompt (str): 用户输入的提示词/问题
Returns:
str: 模型生成的回复文本
"""
# 创建 OpenAI 客户端实例
# base_url: 指定 API 端点地址,这里指向本地 Ollama 服务
# api_key: API 密钥,Ollama 不需要真实密钥,传入任意值即可
client = OpenAI(
base_url=OLLAMA_BASE_URL,
api_key="ollama" # 无需真实 key,Ollama 不验证
)
# 构建消息列表,使用官方推荐的 ChatCompletionUserMessageParam 类型
# 该类型确保消息格式符合 OpenAI Chat Completion API 的标准
messages: list[ChatCompletionUserMessageParam] = [
# 创建用户角色的消息,包含用户输入的提示词
{"role": "user", "content": prompt}
]
# 调用 chat.completions.create 方法发送聊天完成请求
# model: 指定使用的模型名称
# messages: 消息列表,包含对话历史
# temperature: 温度参数,控制输出的随机性(0.1 表示较低随机性,输出更稳定)
resp = client.chat.completions.create(
model=MODEL,
messages=messages,
temperature=0.1
)
# 从响应中提取第一个选择的消息内容
# resp.choices[0]: 获取第一个候选回复
# .message.content: 获取消息的实际内容
# or "": 如果内容为 None 则返回空字符串
return resp.choices[0].message.content or ""
# 测试入口
if __name__ == "__main__":
# 调用函数并传入测试提示词:"请用一句话解释大语言模型"
result = ollama_openai_call("请用一句话解释大语言模型")
# 打印分隔标识,表明使用的是 OpenAI 兼容接口方式
print("=== OpenAI 兼容接口结果 ===")
# 打印模型返回的结果
print(result)
注意事项
- 确保 Ollama 服务已启动且可访问
- OLLAMA_BASE_URL 需指向正确的 /v1 端点
- MODEL 参数需替换为实际可用的模型名称
- api_key 可以设置为任意值(Ollama 不验证)
LangChain 调用
Ollama LangChain 集成模块
开发思路
本模块使用 LangChain 框架实现与 Ollama API 的集成,利用 LangChain 的高级抽象和链式调用能力。
LangChain 提供了统一的接口来管理 LLM 调用、提示词模板和输出解析,使代码更具可扩展性和可维护性。
通过这种方式可以方便地构建复杂的 AI 应用流程,如多轮对话、RAG(检索增强生成)、Agent 等。
设计要点:
- 使用 langchain_ollama 集成包,这是 LangChain 官方提供的 Ollama 连接器
- 使用 ChatPromptTemplate 创建结构化的提示词模板,便于管理和复用
- 使用管道操作符(|)构建简洁的调用链(chain),体现 LangChain 的核心设计理念
- 设置 system 角色消息来定义 AI 助手的行为特征
- 封装统一的调用接口,简化后续使用
安装依赖
pip install langchain-ollama langchain-core
使用示例
# 从 langchain_ollama 导入 OllamaLLM 类,用于创建 Ollama 大语言模型实例
from langchain_ollama import OllamaLLM
# 从 langchain_core.prompts 导入 ChatPromptTemplate,用于创建聊天提示词模板
from langchain_core.prompts import ChatPromptTemplate
# 配置 Ollama 服务的基准 URL,格式为 "http://IP 地址:端口号"
# 注意:这里不需要添加 /v1 后缀,直接使用基础 URL 即可
OLLAMA_BASE_URL = "http://10.0.20.32:11434"
# 配置使用的模型名称,格式为 "模型名:版本号"
MODEL = "deepseek-r1:1.5b"
def ollama_langchain_call(prompt: str) -> str:
"""
使用 LangChain 调用 Ollama API 生成文本回复
Args:
prompt (str): 用户输入的提示词/问题
Returns:
str: 模型生成的回复文本
"""
# 创建 OllamaLLM 实例,配置模型参数
# base_url: 指定 Ollama 服务地址
# model: 指定使用的模型名称
# temperature: 温度参数,控制输出的随机性(0.1 表示较低随机性,输出更稳定)
llm = OllamaLLM(
base_url=OLLAMA_BASE_URL,
model=MODEL,
temperature=0.1
)
# 使用 ChatPromptTemplate.from_messages 创建提示词模板
# 该模板定义了消息的结构,包含 system 和 user 两种角色
prompt_template = ChatPromptTemplate.from_messages([
# system 角色消息:设定 AI 助手的人设和行为准则
("system", "你是一个专业 AI 助手,回答简洁准确"),
# user 角色消息:使用 {input} 占位符,后续会被实际输入替换
("user", "{input}")
])
# 使用管道操作符(|)将提示词模板与 LLM 连接成链(chain)
# 这是 LangChain 的核心语法,体现了函数式编程的思想
# chain 对象可以直接调用,自动完成"填充模板 -> 调用模型 -> 返回结果"的流程
chain = prompt_template | llm
# 调用 chain.invoke() 方法执行整个链路
# 传入字典 {"input": prompt} 会替换模板中的 {input} 占位符
# 返回值即为模型的生成结果
return chain.invoke({"input": prompt})
# 测试入口
if __name__ == "__main__":
# 调用函数并传入测试提示词:"请用一句话解释大语言模型"
result = ollama_langchain_call("请用一句话解释大语言模型")
# 打印分隔标识,表明使用的是 LangChain 方式
print("=== LangChain 结果 ===")
# 打印模型返回的结果
print(result)
注意事项
- 确保 Ollama 服务已启动且可访问
- MODEL 参数需替换为实际可用的模型名称
- OLLAMA_BASE_URL 不需要加 /v1 后缀(与 OpenAI 兼容接口不同)
- LangChain 提供了更多高级功能,如流式输出、异步调用等,可按需扩展
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)