【LLM】Ollama:本地大模型 WebAPI 调用

Ollama 快速部署

  • 安装 Docker:从 Docker 官网 下载并安装。

  • 部署 Ollama

    • 使用以下命令进行部署:
    docker run -d -p 11434:11434 --name ollama --restart always ollama/ollama:latest
    
  • 进入容器并下载 qwen2.5:0.5b 模型

    • 进入 Ollama 容器:
    docker exec -it ollama bash
    
    • 在容器内下载模型:
    ollama pull qwen2.5:0.5b
    

Python 环境准备

在开始之前,请确保您已安装 requests 模块。可以通过以下命令安装:

pip install requests

我们还将初始化基本的 API 相关配置,如下所示:

import requests# 基础初始化设置
base_url = "http://localhost:11434/api"
headers = {"Content-Type": "application/json"
}

对话方式

生成文本补全 (Generate a Completion)

  • API: /generate
  • 功能: 生成指定模型的文本补全。输入提示词后,模型根据提示生成文本结果。
  • 请求方法: POST
  • Ollama API 参数:
    • model(必填):模型名称,用于指定生成模型,例如 qwen2.5:0.5b
    • prompt(必填):生成文本所用的提示词。
    • suffix(可选):生成的补全文本之后附加的文本。
    • stream(可选):是否流式传输响应,默认 true,设置为 false 时返回完整文本。
    • system(可选):覆盖模型系统信息的字段,影响生成文本风格。
    • temperature(可选):控制文本生成的随机性,默认值为 1
def generate_completion(prompt, model="qwen2.5:0.5b"):url = f"{base_url}/generate"data = {"model": model,"prompt": prompt,"stream": False}response = requests.post(url, headers=headers, json=data)return response.json().get('response', '')# 示例调用
completion = generate_completion("介绍一下人工智能。")
print("生成文本补全:", completion)

流式生成文本补全 (Streaming Completion)

  • API: /generate
  • 功能: 流式生成文本补全,模型会逐步返回生成的结果,适用于长文本。
  • 请求方法: POST
  • Ollama API 参数:
    • model(必填):模型名称。
    • prompt(必填):生成文本所用的提示词。
    • stream(必填):设置为 true,启用流式传输。
def generate_completion_stream(prompt, model="qwen2.5:0.5b"):url = f"{base_url}/generate"data = {"model": model,"prompt": prompt,"stream": True}response = requests.post(url, headers=headers, json=data, stream=True)result = ""for line in response.iter_lines():if line:result += line.decode('utf-8')return result# 示例调用
stream_completion = generate_completion_stream("讲解机器学习的应用。")
print("流式生成文本补全:", stream_completion)

生成对话补全 (Chat Completion)

  • API: /chat
  • 功能: 模拟对话补全,支持多轮交互,适用于聊天机器人等场景。
  • 请求方法: POST
  • Ollama API 参数:
    • model(必填):模型名称。
    • messages(必填):对话的消息列表,按顺序包含历史对话,每条消息包含 rolecontent
      • role: user(用户)、assistant(助手)或 system(系统)。
      • content: 消息内容。
    • stream(可选):是否流式传输响应,默认 true
def generate_chat_completion(messages, model="qwen2.5:0.5b"):url = f"{base_url}/chat"data = {"model": model,"messages": messages,"stream": False}response = requests.post(url, headers=headers, json=data)return response.json().get('message', {}).get('content', '')# 示例调用
messages = [{"role": "user", "content": "什么是自然语言处理?"},{"role": "assistant", "content": "自然语言处理是人工智能的一个领域,专注于人与计算机之间的自然语言交互。"}
]
chat_response = generate_chat_completion(messages)
print("生成对话补全:", chat_response)

生成文本嵌入 (Generate Embeddings)

  • API: /embed
  • 功能: 为输入的文本生成嵌入向量,常用于语义搜索或分类等任务。
  • 请求方法: POST
  • Ollama API 参数:
    • model(必填):生成嵌入的模型名称。
    • input(必填):文本或文本列表,用于生成嵌入。
    • truncate(可选):是否在文本超出上下文长度时进行截断,默认 true
    • stream(可选):是否流式传输响应,默认 true
def generate_embeddings(text, model="qwen2.5:0.5b"):url = f"{base_url}/embed"data = {"model": model,"input": text}response = requests.post(url, headers=headers, json=data)return response.json()# 示例调用
embeddings = generate_embeddings("什么是深度学习?")
print("生成文本嵌入:", embeddings)

模型的增删改查

列出本地模型 (List Local Models)

  • API: /tags
  • 功能: 列出本地已加载的所有模型。
  • 请求方法: GET
  • Ollama API 参数: 无。
def list_local_models():url = f"{base_url}/tags"response = requests.get(url, headers=headers)return response.json().get('models', [])# 示例调用
local_models = list_local_models()
print("列出本地模型:", local_models)

查看模型信息 (Show Model Information)

  • API: /show
  • 功能: 查看特定模型的详细信息,如模型的参数、版本、系统信息等。
  • 请求方法: POST
  • Ollama API 参数:
    • name(必填):需要查看信息的模型名称。
    • verbose(可选):设置为 true 时返回更详细的信息。
def show_model_info(model="qwen2.5:0.5b"):url = f"{base_url}/show"data = {"name": model}response = requests.post(url, headers=headers, json=data)return response.json()# 示例调用
model_info = show_model_info()
print("模型信息:", model_info)

创建模型 (Create a Model)

  • API: /create
  • 功能: 根据指定的 Modelfile 创建一个新模型,可以在已有模型的基础上定制。
  • 请求方法: POST
  • Ollama API 参数:
    • name(必填):新创建的模型名称。
    • modelfile(可选):模型文件的内容,定义模型的基础信息。
    • stream(可选):是否流式传输响应。
def create_model(model_name="qwen2.5_custom", base_model="qwen2.5:0.5b"):url = f"{base_url}/create"data = {"name": model_name,"modelfile": f"FROM {base_model}\nSYSTEM You are a helpful assistant."}response = requests.post(url, headers=headers, json=data)return response.json()# 示例调用
create_response = create_model()
print("创建模型:", create_response)

拉取模型 (Pull a Model)

  • API: /api/pull
  • 功能: 从 Ollama 库下载模型。取消的拉取将从上次中断的位置继续,并且多个调用将共享相同的下载进度。
  • 请求方法: POST
  • Ollama API 参数:
    • name(必填):要拉取的模型名称。
    • insecure(可选):允许与库建立不安全的连接,仅在开发过程中从自己的库中提取时使用。
    • stream(可选):如果为 false,响应将作为单个响应对象返回,而不是对象流。
def pull_model(model_name="qwen2.5:0.5b"):url = f"{base_url}/api/pull"data = {"name": model_name}response = requests.post(url, headers=headers, json=data)return response.json()# 示例调用
pull_response = pull_model()
print("拉取模型:", pull_response)

删除模型 (Delete a Model)

  • API: /delete
  • 功能: 删除本地模型以及其相关的数据。
  • 请求方法: DELETE
  • Ollama API 参数:
    • name(必填):需要删除的模型名称。
def delete_model(model_name="qwen2.5_custom"):url = f"{base_url}/delete"data = {"name": model_name}response = requests.delete(url, headers=headers, json=data)return response.json()# 示例调用
delete_response = delete_model()
print("删除模型:", delete_response)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542772.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

K8s 之微服务的定义及详细资源调用案例

什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去? 需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。借助Service,应用可以实现服务发现和负载均衡。service默认只支持4层负载均衡能力&…

OpenCV特征检测(10)检测图像中直线的函数HoughLinesP()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在二值图像中使用概率霍夫变换查找线段。 该函数实现了用于直线检测的概率霍夫变换算法,该算法在文献 181中有所描述。 HoughLines…

JavaEE: 深入探索TCP网络编程的奇妙世界(五)

文章目录 TCP核心机制TCP核心机制六: 拥塞控制为什么要有拥塞控制?动态调整的拥塞控制拥塞控制中,窗口大小具体的变化过程 TCP核心机制七: 延时应答TCP核心机制八: 捎带应答 TCP核心机制 前一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(四) 书接上文~ TCP核心机制六: 拥…

Parallels Desktop 20 for Mac 推出:完美兼容 macOS Sequoia 与 Win11 24H2

Parallels Desktop 20 for Mac 近日正式发布,这一新版本不仅全面支持 macOS Sequoia 和 Windows 11 24H2,还在企业版中引入了一个全新的管理门户。新版本针对 Windows、macOS 和 Linux 虚拟机进行了多项改进,其中最引人注目的当属 Parallels …

Python 入门(一、使用 VSCode 开发 Python 环境搭建)

Python 入门第一课 ,环境搭建...... by 矜辰所致前言 现在不会 Python ,好像不那么合适,咱先不求精通,但也不能不会,话不多说,开干! 这是 Python 入门第一课,当然是做好准备工作&a…

计算机毕业设计 校园失物招领网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

嵌入式单片机STM32开发板详细制作过程--01

大家好,今天主要给大家分享一下,单片机开发板的制作过程,原理图的制作与PCB设计,以及电子元器件采购与焊接。 第一:单片机开发板成品展示 板子正面都有各个芯片的丝印与标号,方便焊接元器件的时候,可以参考。(焊接完成之后,成品图如下) 第二:开发板原理图制作 在制…

MATLAB中多张fig图合并为一个图

将下列两个图和为一个图 打开查看-----绘图浏览器 点击第一幅图中曲线右键复制,到第二幅图中粘贴即可完成

布草洗涤-酒店分楼层统计报表--———未来之窗行业应用跨平台架构

一、大酒店分层管理 1. 精准管理库存 - 能够清晰了解每个楼层布草的具体数量和状况,实现对布草库存的精细化管理,避免出现某些楼层布草短缺或过剩的情况。 2. 优化资源分配 - 依据各楼层的使用频率和需求差异,合理调配布草资源&…

排序--归并排序

1.什么是归并排序? 归并排序将待排序的数组分成两部分,对每部分递归地应用归并排序,然后将两个有序的子数组合并成一个有序的数组。这个过程一直重复,直到数组完全有序。归并排序的过程可以用一棵完全二叉树来形象地表示&#xf…

frpc内网穿透

官网地址:frp官网 本次用到的Liunx包: https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz下载: wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.g…

申论笔记杉树林

同义词尽量用文章中的词进行拼凑不一定要有前置词分条 单一题 同义词给分不一定需要前置词分条 1、2、3、尽量抄文章中的词,通顺即可,不一定要成句子不要过分关注形式 题干: 条理清晰:要求分条,尽量有提示词…

脱离枯燥的CRUD,灵活使用Mybatis,根据mybatis动态的xml片段和接口规范动态生成代理类,轻松应付简单业务场景。

需求 需求是这样的,我们有一个数据服务平台的产品,用户先将数据源信息保存到平台上,一个数据源可以提供多个接口服务,而每个接口服务在数据库中存一个具有mybatis语法的sql片段。这样的话,对于一些简单的业务只需要编…

c++进阶学习-----继承

1.继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。 继承呈现了面向对象 程序设计的…

006——队列

队列: 一种受限的线性表(线性逻辑结构),只允许在一段进行添加操作,在另一端只允许进行删除操作,中间位置不可操作,入队的一端被称为队尾,出队的一端被称为队头,在而我们…

iOS 中 KVC 与 KVO 底层原理

KVC 本质: [object setValue: forKey:];即使没有在.h 文件中有property 的属性声明,setValue:forKey依然会按照上图流程执行代码 KVC 如果成功改变了成员变量,是一定可以被 KVO 监听到成员变量的前后改变的 KVO runtime会生成中间类&…

Leetcode 378. 有序矩阵中第 K 小的元素

1.题目基本信息 1.1.题目描述 给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。 你必须找到一个内存复杂度优于 O(n^2…

GPT1-GPT3论文理解

GPT1-GPT3论文理解 视频参考:https://www.bilibili.com/video/BV1AF411b7xQ/?spm_id_from333.788&vd_sourcecdb0bc0dda1dccea0b8dc91485ef3e74 1 历史 2017.6 Transformer 2018.6 GPT 2018.10 BERT 2019.2 GPT-2 2020…

ER论文阅读-Decoupled Multimodal Distilling for Emotion Recognition

基本介绍:CVPR, 2023, CCF-A 原文链接:https://openaccess.thecvf.com/content/CVPR2023/papers/Li_Decoupled_Multimodal_Distilling_for_Emotion_Recognition_CVPR_2023_paper.pdf Abstract 多模态情感识别(MER)旨在通过语言、…

闯关leetcode——67. Add Binary

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/add-binary/description/ 内容 Given two binary strings a and b, return their sum as a binary string. Example 1: Input: a “11”, b “1” Output: “100” Example 2: Input: a “101…