DeepSeek16-open-webui Pipelines开发填坑

一、虚拟环境安装

mkdir open_webui_pipelines
cd open_webui_pipelines
python -m venv py3119_env
call py3119_env\Scripts\activate 

二、下载服务以及安装依赖

git clone https://github.com/open-webui/pipelines.git
cd pipelines
pip install -r requirements.txt

三、跑个简单示例

copy .\examples\pipelines\providers\ollama_pipeline.py .\pipelines\
start.bat

输出如下,表示已加载ollama_pipeline

INFO:root:Created subfolder: ./pipelines\ollama_pipeline
INFO:root:Created valves.json in: ./pipelines\ollama_pipeline
Loaded module: ollama_pipeline
INFO:root:Loaded module: ollama_pipeline
on_startup:ollama_pipeline

四、修改使用该PipeLine文件

  1. 修改文件,指向自己的ollama模型。

    修改刚才拷入的 \pipelines\ollama_pipeline.py。

    在 32行和33行,指向自己的ollama模型地址和名称。源代码如下:

            OLLAMA_BASE_URL = "http://localhost:11434"MODEL = "llama3"
    
  2. 修改完重启服务

  3. 设置:
    添加 API 连接(url为pipelines服务的端口)

    • 进入 Open WebUI 管理员面板 > 设置 > 外部链接,打开【OpenAI API】
    • 点击 + 添加新连接。
    • 设置 API URLhttp://localhost:9099API 密钥0p3n-w3bu!(默认值。必填)。
  4. 使用:
    点击【新对话】,在模型下拉中选择【Ollama Pipeline】,开启对话。
    pipelines服务后台输出日志,表示已经启用改pipeline。

五、完善

1、修改\pipelines\ollama_pipeline.py文件,完成以下任务:

  • 在页面可以配置ollama服务和模型
  • 修改一部分python不符合项
  • 将print修改为logger输出
import logging
import os
from typing import List, Union, Generator, Iteratorfrom pydantic import BaseModel, Fieldimport requestsclass Pipeline:class Valves(BaseModel):OLLAMA_BASE_URL: str = Field(default="http://localhost:11434",description="ollama base url")OLLAMA_DEFAULT_MODEL: str = Field(default="llama3", description="ollama default model name")def __init__(self):# self.id = "ollama_pipeline"self.name = "Ollama Pipeline"self.valves = self.Valves(**{k: os.getenv(k, v.default) for k, v inself.Valves.model_fields.items()})self.log = logging.getLogger(__name__)passasync def on_startup(self):self.log.info(f"on_startup:{__name__}")passasync def on_shutdown(self):self.log.info(f"on_shutdown:{__name__}")passdef pipe(self, user_message: str, model_id: str, messages: List[dict], body: dict) -> Union[str, Generator, Iterator]:# This is where you can add your custom pipelines like RAG.self.log.info(f"pipe:{__name__}, model_id:{model_id}, messages:{messages}")ollama_base_url = self.valves.OLLAMA_BASE_URLmodel = self.valves.OLLAMA_DEFAULT_MODELif "user" in body:self.log.info("######################################")self.log.info(f'# User: {body["user"]["name"]} ({body["user"]["id"]})')self.log.info(f"# Message: {user_message}")self.log.info("######################################")try:r = requests.post(url=f"{ollama_base_url}/v1/chat/completions",json={**body, "model": model},stream=True,)r.raise_for_status()if body["stream"]:return r.iter_lines()else:return r.json()except Exception as e:return f"Error: {e}"
  1. 删除pipelines\ollama_pipeline目录
  2. 重启服务

六、填坑:当pipelines文件中含有汉字时,文件编码会引起pipeline加载失败。

  1. 文件为utf-8时错误如下:
Error loading module: ollama_pipeline
'gbk' codec can't decode byte 0xaf in position 781: illegal multibyte sequence
WARNING:root:No Pipeline class found in ollama_pipeline
  1. 文件为gbk时错误如下:
Error loading module: ollama_pipeline
(unicode error) 'utf-8' codec can't decode byte 0xc6 in position 0: invalid continuation byte (ollama_pipeline.py, line 28)
WARNING:root:No Pipeline class found in ollama_pipeline
  1. 处理:
    修改pipelines\main.py文件,将文件中open()的函数调用,使用了文本方式的读写,都添加encoding=“utf-8”
137: with open(module_path, "r", encoding="utf-8") as file
193: with open(valves_json_path, "w", encoding="utf-8") as f
201: with open(valves_json_path, "r", encoding="utf-8") as f
580: with open(valves_json_path, "w", encoding="utf-8") as f:
  1. 然后将pipelines文件保存为utf-8即可
  2. 删除pipelines\ollama_pipeline目录
  3. 重启服务

© 著作权归作者所有

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兰亭妙微APP 界面设计与软件开发综合服务商

兰亭妙微作为 APP 界面设计公司与软件开发公司,自 2011 年成立以来,由清华团队主导,在软件和互联网 UI/UE 设计开发领域发展 16 年,积累了一定的行业经验。 在 APP 界面设计方面,我们的团队包含交互设计师、用户体验相…

【算法】动态规划:1137. 第 N 个泰波那契数

1137. 第 N 个泰波那契数 简单 相关标签 premium lock icon 相关企业 提示 泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 示例 1: 输入&am…

[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的校园家教兼职信息交流平台管理系统,推荐!

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园家教兼职信息交流平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的…

vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)

实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客 使用 Nuxt.js 和 SSR 构建一个简单的博客是巩固你对服务器端渲染理解以及 Nuxt.js 如何简化这一过程的好方法。这个练习将带你完成设置基本博客结构、获取数据并以用户友好的格式展示,同时利用 SSR 的优势来提升 SEO 和性能…

如何在 .Net 7 中使用 MQTT 客户端

介绍 MQTT(消息队列遥测传输)是一种轻量级消息传递协议,专为资源受限的环境而设计。MQTT 广泛应用于物联网 (IoT) 和机器对机器 (M2M) 通信。 本文将讨论如何在 .NET 7 中实现 MQTT 消费者。我们将使用 MQTTnet 库,这是 C# 中的高…

云上攻防—Docker安全容器逃逸特权模式危险挂载

前言 之前分享的是云服务安全,今天开始云原生安全,安全道路依旧很长。 什么是Docker呢,它是开源的容器化平台,用于开发、部署和运行应用程序。它通过将应用程序及其依赖项打包在轻量级的容器中,实现环境一致性、快速…

2025API 开发工具Apipost 与 Apifox深度对比

在当今数字化时代,API 开发是构建各类软件应用的关键环节。Apipost 和 Apifox 作为两款知名的 API 开发工具,它们在实际开发场景中表现究竟如何呢?接下来,让我们从多个功能点进行深入对比。 一、API 设计功能 接口定义与参数设置…

从零开始搭建Windows AI开发环境:QWQ-32B部署+Cursor插件优化实战

文章目录 前言1.安装Ollama2.QwQ-32B模型安装与运行3.Cursor安装与配置4. 简单使用测试5. 调用本地大模型6. 安装内网穿透7. 配置固定公网地址总结 前言 本方案提出了一种基于Windows系统的智能化开发平台搭建策略,通过融合Cursor智能编程平台、Ollama模型运行框架…

PostgreSQL 中,若需显示 不在 `IN` 子句列表中的数据

在 PostgreSQL 中,若需显示 不在 IN 子句列表中的数据,可以通过以下方法实现: 方法 1:使用 NOT IN(注意 NULL 值) 直接筛选不包含在 IN 列表中的记录: SELECT * FROM your_table WHERE your_c…

嘉讯科技:医疗信息化、数字化、智能化三者之间的关系和区别

随着技术的不断发展,医疗行业也在发生着巨大的变化。在这个过程中,医疗信息化、数字化、智能化成为三个重要方向。这些变化不仅带来了医疗技术的进步,而且大大提高了医疗服务的质量和效率。 一、医疗信息化 医疗信息化是指医疗行业应用信息技…

Windows VMWare Centos Docker部署Springboot应用

接上篇文章:Windows VMWare Centos环境下安装Docker并配置MySql-CSDN博客文章浏览阅读370次,点赞3次,收藏4次。Windows VMWare Centos环境下安装Docker并配置MySqlhttps://blog.csdn.net/u013224722/article/details/148928081 一、新建Sprin…

JavaEE-Spring事务和事务的传播机制

事务 什么是事务 事务是⼀组操作的集合, 是⼀个不可分割的操作. 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败. 为什么需要事务? 事务的操作 Spring 中事务的实现 创建好数据库后就是配置数据库相关的配…

共享经济视域下社群经济的本质重构:基于开源AI智能名片链动2+1模式S2B2C商城小程序源码的实证研究

摘要:社群经济在互联网时代呈现爆发式增长,但传统社群运营存在情感维系成本高、商业转化路径长、技术赋能不足等痛点。本文以共享经济理论为框架,结合开源AI智能名片链动21模式S2B2C商城小程序源码的技术实践,提出“思想-资源-机会…

测试方法的分类

静态测试 核心分类依据:根据是否执行程序分为静态测试和动态测试 静态测试方法 执行特征:不运行被测程序,通过人工检查或工具分析进行测试 测试对象:主要针对文档(包括需求文档、设计文档等)和源代码 实…

查看CPU支持的指令集和特性

1)gcc -c -Q -marchnative --helptarget 2)结果 The following options are target specific: -m128bit-long-double [enabled] -m16 [disabled] -m32 [disabled…

【大模型应用开发】Unity结合大模型实现智能问答功能

零、最终效果 Unity结合大模型实现智能问答功能 一、文本自动换行效果 新建一个Text文本,设置文本的最大宽度 然后添加Content Size Fitter组件,Vertical Fit选择Preferred Size 二、背景随文本长度变化效果 新建一个Image作为文本的背景&#xff0…

Python爬虫-爬取汽车之家全部汽车品牌及车型数据

前言 本文是该专栏的第64篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于汽车之家平台,通过Python获取全部的“汽车品牌以及车型”数据。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详…

签名组件:uniapp 签名组件开发,兼容小程序、H5、App等 电子签名

描述 H5:1. 模拟横屏。2. 提示信息、模拟态也通过模拟横屏显示 小程序:1. 自动横屏展示 APP:1. 自动横屏展示 rn-signature 个性签名组件 组件名 rn-signature 签名组件兼容H5、APP、小程序。横屏签名效果。 效果展示 h5端 小程序端 APP 端…

第10.4篇 使用预训练的目标检测网络

在PyTorch提供的已经训练好的图像目标检测中,均是R-CNN系列 的网络,并且针对目标检测和人体关键点检测分别提供了容易调用的方 法。针对目标检测的网络,输入图像均要求使用相同的预处理方式,即先将每张图像的像素值预处理到0~1之…

基于开源链动2+1模式AI智能名片S2B2C商城小程序源码的运营机制沉淀与规范构建研究

摘要:在数字化商业生态中,运营机制的沉淀与规范构建是企业实现可持续增长的核心命题。本文以开源链动21模式、AI智能名片、S2B2C商城小程序源码为技术基座,提出“机制设计-数据沉淀-规范生成-迭代优化”的四阶闭环模型。通过某健康食品品牌的…