跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

本地 LLM 模型与 Ollama、Python 集成实战

综述由AI生成本指南演示了如何利用 Ollama 在本地运行大型语言模型,并通过 Python SDK 实现聊天交互、文本生成及工具调用。涵盖环境搭建、模型拉取、流式响应处理以及自定义函数集成,帮助开发者构建隐私安全且低成本的离线 AI 应用。

时间旅人发布于 2026/3/24更新于 2026/6/716 浏览
本地 LLM 模型与 Ollama、Python 集成实战

在本地运行大型语言模型(LLM)不仅能保护数据隐私,还能显著降低 API 调用成本。Ollama 作为一个开源平台,让在本地计算机上部署现代大模型变得异常简单。配合 Python SDK,我们可以轻松构建支持离线使用的 AI 应用。

环境准备

要开始这段旅程,你需要确保本地环境满足以下要求:

  • Ollama 服务:安装并启动 Ollama 守护进程。
  • Python 3.8+:SDK 依赖较新的 Python 版本。
  • 模型资源:本示例将使用 llama3.2:latest 和 codellama:latest。请确保磁盘空间充足,前者约需 2GB,后者约需 3.8GB。
  • 硬件建议:虽然 CPU 也能跑,但若有 GPU 加速,推理速度会有质的飞跃。

搭建基础环境

首先去官网下载对应系统的安装包。Windows 和 macOS 用户直接运行安装程序即可,Linux 用户则可以通过终端执行以下命令:

curl -fsSL https://ollama.com/install.sh | sh

安装完成后,验证一下版本信息:

ollama -v

如果看到版本号,说明服务已就绪。接着启动后台服务:

ollama serve

部分 Linux 发行版可能已自动启动,若提示端口占用可忽略。随后拉取我们需要的模型:

ollama pull llama3.2:latest
ollama pull codellama:latest

这个过程就像拉取 Docker 镜像一样,完成后你可以直接在命令行测试:

ollama run llama3.2:latest
>>> Explain what Python is in one sentence.
Python is a high-level, interpreted programming language known for its simplicity...

退出后,回到 Python 环境安装 SDK:

pip install ollama

对话与文本生成

Ollama 的 Python 库主要提供两个接口:chat() 用于多轮对话,generate() 用于单次生成。理解它们的区别能帮你更灵活地设计应用。

交互式聊天

聊天的核心在于维护上下文。消息通常以字典列表形式传递,包含角色(role)和内容(content)。

from ollama import chat

messages = [
    {"role": "user", "content": "Explain what Python is in one sentence."}
]

response = chat(model="llama3.2:latest", messages=messages)
print(response.message.content)

为了保持对话连贯,记得把模型的回复追加到消息列表中。比如你想继续询问关于列表推导式的问题:

messages.append(response.message)
messages.append({
    : ,
    : 
})

response = chat(model=, messages=messages)
(response.message.content)
"role"
"user"
"content"
"Provide a short, practical example."
"llama3.2:latest"
print

如果你正在开发 CLI 工具或需要更好的用户体验,流式输出(Streaming)是不错的选择。它能让文字逐个字符显示,而不是等待整个响应完成。

from ollama import chat

stream = chat(
    model="llama3.2:latest",
    messages=[{"role": "user", "content": "Explain Python dataclasses with a quick example."}],
    stream=True,
)

for chunk in stream:
    print(chunk.message.content, end='', flush=True)

注意这里使用了 end='' 来避免换行,同时设置 flush=True 确保实时输出。

一次性生成

对于不需要上下文的场景,比如摘要、重写或代码补全,generate() 更高效。

from ollama import generate

response = generate(
    model="llama3.2:latest",
    prompt="Explain what Python is in one sentence."
)
print(response.response)

利用这个接口,你还可以让模型编写代码。例如实现经典的 FizzBuzz 挑战:

prompt = """
Write a Python function fizzbuzz(n: int) -> List[str] that:
- Returns a list of strings for the numbers 1..n
- Uses "Fizz" for multiples of 3
- Uses "Buzz" for multiples of 5
- Uses "FizzBuzz" for multiples of both 3 and 5
- Raises ValueError if n < 1
Include type hints compatible with Python 3.8.
"""

response = generate(model="codellama:latest", prompt=prompt)
print(response.response)

拿到生成的代码后,记得检查逻辑并在 REPL 中快速验证,确保类型提示和边界条件处理正确。

工具调用增强能力

工具调用(Function Calling)允许模型在执行任务时调用外部函数,这比单纯依靠模型内部知识更可靠。这在 RAG 或需要精确计算的场景下特别有用。

要实现这一点,我们需要定义一个 Python 函数,并将其作为工具传递给模型。这里演示一个简单的平方根计算:

import math
from ollama import chat

def square_root(number: float) -> float:
    """Calculate the square root of a number."""
    return math.sqrt(number)

messages = [{"role": "user", "content": "What is the square root of 36?"}]

# 将函数作为工具传入
response = chat(
    model="llama3.2:latest",
    messages=messages,
    tools=[square_root]
)

# 检查模型是否调用了工具
if response.message.tool_calls:
    tool = response.message.tool_calls[0]
    result = square_root(float(tool.function.arguments["number"]))
    
    # 将工具结果作为新消息追加
    messages.append(response.message)
    messages.append({
        "role": "tool",
        "tool_name": tool.function.name,
        "content": str(result)
    })
    
    # 再次请求最终答案
    final_response = chat(model="llama3.2:latest", messages=messages)
    print(final_response.message.content)

在这个流程中,清晰的文档字符串和类型提示至关重要,它们能帮助模型准确判断何时以及如何调用该函数。如果模型没有触发工具调用,可以尝试更换更大的模型参数或优化提示词。

小结

通过上述步骤,我们已经完成了从环境搭建到实际集成的全过程。本地运行 LLM 不仅意味着更高的隐私安全性,也摆脱了对在线服务的依赖。掌握 chat、generate 以及工具调用机制,你就能根据项目需求定制专属的 AI 工作流,无论是构建智能助手还是自动化脚本,都能游刃有余。

目录

  1. 环境准备
  2. 搭建基础环境
  3. 对话与文本生成
  4. 交互式聊天
  5. 一次性生成
  6. 工具调用增强能力
  7. 将函数作为工具传入
  8. 检查模型是否调用了工具
  9. 小结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 在 Linux 下的安装、初始化与 Web UI 配置指南
  • OpenAI Codex 全面上手指南
  • Claude Code 核心功能与使用详解
  • Flux vs SDXL:2026本地AI图像生成器速度与质量谁赢?
  • 小米 MiLoco 大模型智能家居解决方案部署指南
  • Linux Ext 系列文件系统原理:从磁盘结构到软硬链接
  • 二叉树遍历:由后序与中序推导层序结果(多语言实现)
  • 动态规划基础:背包问题详解
  • GitHub 国内镜像站汇总与加速配置指南
  • DeepSeek-OCR-WEBUI 金融票据处理技术原理与部署实践
  • OpenClaw 结合 cpolar 实现本地 AI 服务外网访问教程
  • 知网 AIGC 检测更新应对:论文降重技巧与工具实测
  • ripgrep跨平台使用指南:Windows、macOS与Linux安装配置
  • C++ 开发者转 Python:完整学习与实战指南
  • 通义万相 2.1 API 调用指南:Python 实现图像与文本生成
  • AI 大模型开发指南:精选书籍推荐与核心知识梳理
  • 利用 Figma MCP 与 Claude Code 实现 UI 设计稿 1:1 还原
  • Kimi K2.5 开源部署、API 接入、Agent 集群与多模态视觉实战
  • 元学习在快速适应新任务中的前沿研究
  • Web3.0 开发实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online