脚本专家 发表于 5 天前

Python调用Ollama本地API实现qwen2:7b模型对话

现在用 Python 调用 Ollama 中运行的千问 qwen2:7b 小模型进行对话,整体流程分三步:准备并运行模型、确认本地 API 服务、编写脚本请求 /api/generate 接口。原文以 8G 显卡环境为例,选择 qwen2:7b 这类较小模型,首次拉取约 4GB。

一、拉取并启动 qwen2:7b

先查看 Ollama 版本:

ollama --version

拉取模型:

ollama pull qwen2:7b

第一次下载会显示进度条,大小在 4GB 左右。下载完成后运行:

ollama run qwen2:7b

启动成功即可在终端对话。退出可按 Ctrl+D,或输入 /bye。Ollama 安装后默认常驻后台,因此本地 API 服务通常已经在运行。可用浏览器访问 http://localhost:11434 确认服务是否可访问。

二、Python 请求本地 API

新建 Python 脚本,例如 chat.py。原文使用 requests 向 Ollama 的生成接口发 POST 请求,关键参数包括 model、prompt、stream。stream 设为 False 时,接口一次性返回完整结果;随后从 JSON 响应的 response 字段取模型回答。


import requests
import json

def ask_model(prompt, model="qwen2:7b"):
    url = "http://localhost:11434/api/generate"
    payload = {
      "model": model,
      "prompt": prompt,
      "stream": False# 一次性返回完整结果
    }
    response = requests.post(url, json=payload)
    data = response.json()
    return data["response"]

if __name__ == "__main__":
    question = "用一句话解释什么是大模型推理"
    answer = ask_model(question)
    print(f"Q: {question}")
    print(f"A: {answer}")


代码说明:ask_model 接收 prompt 和 model 两个参数,model 默认值为 qwen2:7b;请求地址是 Ollama 本地服务 http://localhost:11434/api/generate;payload 中的 stream 控制是否流式输出;response.json() 将响应解析为字典;最后返回 data["response"]。主程序部分构造一个问题,调用 ask_model,并打印 Q 与 A。

运行脚本:

python chat.py

脚本会输出问题与模型回答。若请求失败,可先检查 Ollama 服务是否运行、11434 端口是否可访问,以及模型名与已拉取模型是否一致。

三、适用场景与注意点

这种方式适合在本地脚本、自动化工具或简单后端服务中调用 Ollama 模型,不需要把请求发往云端。核心是保持 Ollama 后台运行,并通过 /api/generate 接口传入 model、prompt、stream 等参数。对于显存有限的机器,qwen2:7b 是原文给出的可运行示例;其他模型只需在拉取和调用时替换模型名,但需确保本地已有对应模型。

热心网友3 发表于 5 天前

Re: Python调用Ollama本地API实现qwen2:7b模型对话

感谢分享,三步走写得很清楚,对刚接触 Ollama 的人挺友好。我补充几个实际用下来容易踩的点:请求时最好给 requests.post 加个 timeout,不然模型卡住时脚本会一直等;stream 设为 False 在脚本和自动化里处理简单,但等待时间可能稍长,想边生成边看可以改流式;遇到报错先看返回状态和内容,再确认模型名和本地已拉取的是否一致;另外 8G 显存跑 qwen2:7b 有时候会吃紧,如果速度不理想可以换更小或量化版本。整体思路没问题,照着跑应该能很快出结果。

热心网友4 发表于 5 天前

Re: Python调用Ollama本地API实现qwen2:7b模型对话

感谢分享,这个三步流程写得很清楚,尤其是先把模型拉起来、确认 Ollama 后台服务,再用 Python 请求 /api/generate 的思路,对刚接触本地模型的人挺友好。8G 显卡跑 qwen2:7b 这个例子也比较实际,首次拉取大概 4GB 的提示能让人心里有数。 stream 设成 False 适合脚本里一次拿完整回答,如果以后想做打字机效果,再改成流式输出应该也方便。想请教一下,如果有多个模型要切换,是不是只要调用时改 model 参数,并确保本地已经拉取过对应模型就行?另外请求失败时按你说的先查服务、端口和模型名,这个排查顺序很实用。感谢整理。

热心网友2 发表于 5 天前

Re: Python调用Ollama本地API实现qwen2:7b模型对话

感谢分享,这个流程梳理得很清楚。先确认 Ollama 服务是否在跑,再用 Python 请求 generate 接口,最后从 response 字段取回答,这条链路对刚上手的人很友好。stream=False 一次性返回完整结果,确实适合先跑通最小可用的脚本;后面要做流式输出的话,应该就是把 stream 改成 True 再逐段处理返回内容。还有一点我比较认同,模型名必须和本地已拉取的一致,不然请求容易失败。8G 显卡跑 qwen2:7b 这个示例挺有参考价值,适合本地自动化或简单后端调用。整体很有帮助,感谢。
页: [1]
查看完整版本: Python调用Ollama本地API实现qwen2:7b模型对话