Ollama本地化部署专题②:API接口实战,Python对接本地大模型

Ollama本地化部署专题②:API接口实战,Python对接本地大模型

上篇咱们从零搞定了Ollama安装、模型拉取和命令行对话,不少小伙伴反馈:光手动聊天不够用,想把本地大模型接入自己的脚本、小程序或者项目里!

别急,本篇专题直接上API接口实战干货,手把手教你用Python调用Ollama本地接口,实现自动化问答、批量处理等功能,兼容OpenAI格式,零基础也能看懂代码,看完直接复用!

前置必读:必须先完成上篇的Ollama安装+模型拉取,且保持ollama serve服务后台运行,否则接口调用会失败!

一、先吃透:Ollama API核心规则

Ollama自带RESTful API服务,默认启动在11434端口,无需额外配置网关,核心接口就两个,完全覆盖日常需求:

  • 生成对话接口:POST http://localhost:11434/api/generate(单轮问答)
  • 聊天对话接口:POST http://localhost:11434/api/chat(多轮记忆对话,推荐)

两大亮点:支持流式输出(逐字打印回复)、参数可自定义(温度、上下文长度、模型名称),而且全程本地调用,无外网依赖、无流量费,隐私性拉满。

二、环境准备:Python极简配置

不需要复杂依赖,只用Python内置库就能调用,新手推荐Python3.8及以上版本,无需安装第三方包,极致轻量化。

# 检查Python版本
python --version
# 无额外安装,直接用requests库(内置,若缺失执行下方命令)
pip install requests

三、实战1:基础单轮对话(非流式)

适合简单问答、数据处理场景,代码带逐行注释,复制就能跑,新手首选!

# 导入请求库
import requests
import json

# Ollama本地API地址(默认端口11434,无需修改)
OLLAMA_API_URL = "http://localhost:11434/api/chat"

def ollama_chat(question, model_name="qwen2.5:7b"):
    """
    本地大模型对话函数
    :param question: 用户提问内容
    :param model_name: 已下载的模型名称(必须和ollama list一致)
    :return: 模型回复结果
    """
    # 请求参数配置(多轮对话格式,支持上下文记忆)
    payload = {
        "model": model_name,  # 指定本地模型
        "messages": [
            # 角色:user=用户,assistant=AI,system=系统提示
            {"role": "user", "content": question}
        ],
        "stream": False,  # 关闭流式输出,一次性返回结果
        "temperature": 0.7  # 温度参数:0=严谨,1=发散,默认0.7即可
    }

    try:
        # 发送POST请求
        response = requests.post(OLLAMA_API_URL, json=payload)
        response.raise_for_status()  # 捕获请求异常
        # 解析返回结果
        result = response.json()
        return result["message"]["content"]
    except Exception as e:
        return f"接口调用失败:{str(e)}"

# 测试调用
if __name__ == "__main__":
    # 自定义问题
    user_question = "用通俗易懂的话解释什么是大模型本地化部署"
    # 调用函数
    answer = ollama_chat(user_question)
    # 打印结果
    print(" AI回复:")
    print(answer)

运行说明

  • 确保ollama serve服务在后台运行(上篇命令)
  • model_name必须和本地已下载模型一致(ollama list查看)
  • 直接运行脚本,即可看到AI逐字回复(关闭流式则一次性输出)

四、实战2:流式输出对话(逐字打印)

模拟ChatGPT逐字回复效果,提升交互体验,适合做聊天界面、脚本演示,核心改动就是开启stream参数,处理流式响应。

import requests

# 流式对话函数
def ollama_stream_chat(question, model_name="qwen2.5:7b"):
    payload = {
        "model": model_name,
        "messages": [{"role": "user", "content": question}],
        "stream": True,  # 开启流式输出
        "temperature": 0.7
    }

    # 发送流式请求
    with requests.post("http://localhost:11434/api/chat", json=payload, stream=True) as response:
        print(" AI回复:", end="", flush=True)
        # 逐行解析流式数据
        for line in response.iter_lines():
            if line:
                # 解析JSON数据
                data = eval(line.decode("utf-8"))
                if "message" in data:
                    # 逐字打印,不换行
                    print(data["message"]["content"], end="", flush=True)
        print()  # 结束换行

# 测试流式调用
if __name__ == "__main__":
    ollama_stream_chat("写一段Python自动化办公的入门代码")

五、实战3:多轮记忆对话(保留上下文)

真正的智能对话核心!让AI记住之前的对话内容,实现连贯交流,只需维护messages列表即可。

import requests

# 初始化对话历史(全局维护上下文)
chat_history = []

def ollama_multi_chat(question, model_name="qwen2.5:7b"):
    # 追加用户问题到历史
    chat_history.append({"role": "user", "content": question})
    payload = {
        "model": model_name,
        "messages": chat_history,  # 传入完整上下文
        "stream": False
    }

    response = requests.post("http://localhost:11434/api/chat", json=payload)
    result = response.json()
    # 追加AI回复到历史
    ai_answer = result["message"]["content"]
    chat_history.append({"role": "assistant", "content": ai_answer})
    return ai_answer

# 测试多轮对话
if __name__ == "__main__":
    # 第一轮提问
    q1 = "我是一名Python新手,该怎么入门"
    print(f" 我:{q1}")
    print(f" AI:{ollama_multi_chat(q1)}")

    # 第二轮提问(基于上文)
    q2 = "那入门后先学哪个库最实用"
    print(f" 我:{q2}")
    print(f" AI:{ollama_multi_chat(q2)}")

六、高频问题避坑(必看)

  • ❌ 连接超时:检查ollama serve是否启动,端口11434是否被占用
  • ❌ 模型不存在:用ollama list核对名称,大小写、后缀必须完全一致
  • ❌ 无返回结果:降低模型参数(换量化版),检查内存是否足够
  • ❌ 流式乱码:确保Python环境编码为UTF-8,迭代时正确解码

七、下篇预告

本篇搞定了API基础调用,下一篇专题将讲解Ollama进阶优化:国内镜像加速下载、模型量化精简、自定义系统提示、端口修改+权限配置,解决下载慢、占内存两大痛点,让本地大模型跑得更丝滑!


#Ollama教程 #大模型API #Python对接AI #本地化部署实战

© 版权声明

相关文章

1 条评论

  • 头像
    王白石 投稿者

    [db:评论]

    无记录
    回复