新技术前沿-2024-构建个人知识库和小语言模型

news2024/12/25 10:46:10

Ollama+WebUI+AnythingLLM,构建安全可靠的个人/企业知识库

1 技术路线一

1.1 搭建本地大模型Ollama

1.2 搭建用户界面open WebUI

使用Docker Desktop
Open-webui。它可以快速基于Ollama构筑本地UI。
如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,按步骤依次执行以下命令:

# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/open-webui/open-webui:main
# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/open-webui/open-webui:main ghcr.io/open-webui/open-webui:main
# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/open-webui/open-webui:main

下载镜像完成后,就可以启动容器

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

然后就可以通过3000端口访问页面。
首次启动,注册账号和密码以后,修改Ollama的服务地址链接。

1.3 与知识库相连AnythingLLM

AnythingLLM的官网地址

这是一个可以基于大模型的知识库交互软件,可以应用本地大模型,或调用公域大模型API。知识库也同样可以使用本地的,而且几乎不占用很大的资源。
(1)下载安装AnythingLLMDesktop.exe。
(2)完成安装后,先会要求配置大模型。这里可以选择Ollama的本地模型,选择Llama3。
在这里插入图片描述

(3)然后会让你选择嵌入模式和向量数据库,我们选择默认的即可,或者接入外部API。
在这里插入图片描述
(4)配置完成后,再为你的工作空间起个名字,即可进入AnythingLLM中。
(5)在正式使用前,你需要上传你的知识文档,支持多种形式,但图片形式PDF不可读取。
在这里插入图片描述

(6)最后,你就可以在对话框中,和你的知识进行对话交流了。

1.3.1 问答增加个人文档

(1)打开anythingllm,点击要用的工作区上的按钮(上传文件,支持多种文件类型(PDF,TXT,DOC等)。
(2)点击Click to upload or drag and drop,选择要引用的文档。
(3)点击Move to Workspace,加载文档。
(4)点击Save and Embed。
(5)等待加载,提示Workspace updated successfully的时候说明加载完了。
(6)加载完成后就可以使用了,直接对话即可,回答的信息里面同时还可以显示引用文本(文件删除并不影响使用)。

可以设置chat或query模式。

2 技术路线二

Llama 3的微调、量化、知识库接入及部署
用通俗易懂的方式讲解大模型:一个强大的 LLM 微调工具 LLaMA Factory

2.1 微调LLaMA-Factory

使用中文得到更好的支持需要进行微调,最简单的方法之一是使用Llama Factory。

它几乎不需要任何编程基础,直接使用即可微调出一个适用于您的模型。

2.2 量化Llama.Cpp

微调出来的这个模型有点太大了,推理的时候速度比较慢,占用显存比较多,这时需要量化。

大模型量化主要是为了减小模型的体积和提高运算速度,让模型在资源有限的设备上也能高效运行。同时,量化还能降低能耗和成本,让模型部署更加经济实用。

那量化的时候有没好用的框架呢?

最常见的就是直接用Llama.Cpp。可以快速的帮我们把这个模型给它量化的比较小。

2.3 本地知识库接入Phidata

Phidata:快速构建一个智能 AI 助手【附代码示例】
官网基于phidata使用本地Ollama模型
安装依赖包

pip install -U phidata
pip install ollama

简单示例如下:

from phi.assistant import Assistant
from phi.llm.ollama import Ollama

assistant = Assistant(
    llm=Ollama(model="llama3",host='localhost'),
    description="旅游博主",
)
assistant.print_response("使用中文推荐一下上海好玩的地方,不超过20字", markdown=True)

在这里插入图片描述

3 小语言模型SLM

参考AI届的新宠:小语言模型(SLM)?

3.1 背景介绍

大语言模型(LLM)在过去几年产生了巨大影响,特别是随着OpenAI的ChatGPT的出现,各种大语言模型如雨后春笋般出现,国内如KimiChat、通义千问、文心一言和智谱清言等。

然而,大语言模型通常拥有庞大的参数,从数十亿到数千亿,甚至到数万亿。比如通义千问发布的开源模型就包含了70亿、140亿和720亿等多个规模的版本;而最近发布的Llama3大模型则是有80亿和700亿两个版本;而广为人知的ChatGPT3最大的一个模型参数则达到了1750亿!

大模型的参数越多,一般意味着它能够捕捉和处理更丰富的信息和更复杂的模式,也就是回答的效果会更好,但是它们对于个人电脑、智能手机和其他智能设备等设备来说计算量却太大(尽管出现了量化等技术)。由于上述原因,人们对小语言模型(SLM)的兴趣日益浓厚,而下面就是最近几款比较火的小语言模型。

3.2 安装ollama框架

参考ollama的GitCode地址
参考ollama官网

下载这个OllamaSetup.exe即可,双击后自动安装到C盘。
安装目录为C:\Users\user\AppData\Local\Programs\Ollama。

(1)设置外网可以访问
Ollama的默认配置是只有本地才可以访问,需要配置一下,
Ollama 默认提供 OpenAI 的兼容 API,默认端口是 11434,默认只可以通过 localhost 进行访问,如果想公开访问的话,可以通过设置 OLLAMA_HOST 进行修改。
在环境变量-系统变量中新增OLLAMA_HOST,值填入0.0.0.0。重新运行OLLAMA后,就可以通过本机IP访问。

(2)更改AI模型下载位置。
打开环境变量,在系统变量中新增OLLAMA_MODELS变量,值填入想要存放模型的路径D:\OllamaCache。
在这里插入图片描述
退出交互的方式:交互Ollama按下Ctrl + D 可以退出终端交互,但此时模型并不会退出,仍旧可以正常通过 Api 接口交互。
查看已经安装了哪些模型。
在这里插入图片描述

3.3 小语言模型

3.3.1 Phi-3模型

Phi-3是微软最近发布的一系列开放式 AI 模型,并且也是现有功能最强大、最具成本效益的小语言模型。

目前只提供了mini版本,即Phi-3-mini ,这个版本拥有38亿个参数(也就是3.8B),经过3.3 万亿 token 的训练,并且被优化至可部署在手机上。如果想体验的话,可以在Microsoft Azure AI Studio、Hugging Face[2],或者Ollama上使用。

Phi-3-mini一共支持两种上下文,分别是4K和128K,其中128K的上下文长度是同类产品第一个支持的,并且对质量影响很小。而且 Phi-3-mini 是经过指令微调的,这意味着它可以开箱即用!

虽然Phi-3 mini 参数很小,但是它表现良好,能够与Mixtral 8x7B 和 GPT-3.5 等模型相媲美!

CMD>ollama run phi3
按下Ctrl + D 可以退出终端交互。

在这里插入图片描述

3.3.2 Gemma模型

Gemma 由 Google DeepMind 和 Google 的其他团队开发,灵感来自 Gemini,其名称反映了拉丁语gemma,意思是“宝石”。

Google一共发布了两种尺寸的模型,分别是Gemma 2B 和 Gemma 7B[3],每个尺寸都发布了经过预训练和指令调整的变体,并且能够直接在开发人员笔记本电脑或台式电脑上运行。

值得注意的是,Gemma还有两个变体,分别是CodeGemma和RecurrentGemma。

(1)CodeGemma注重的是编码功能,它也有几个不同的版本:一个7B的预训练变体,专门用于代码补全和代码生成任务;一个7B的指令调整变体,用于代码聊天和指令执行;还有一个2B的预训练变体,适用于快速代码补全,并且可以安装在你的本地计算机上。
(2)RecurrentGemma 注重的是推理能力,与其他模型不同的是,它并没有采用目前LLM的Transformer 架构,而是基于Google新的Griffin 架构。

ollama run gemma:2b

在这里插入图片描述

3.3.3 OpenELM模型

OpenELM是Apple团队最近发布的模型,这是一个旨在在手机和笔记本电脑上运行的开源小语言模型 (SLM) 系列。

这个系列一共包含了2.7亿、4.5亿、11亿和30亿四个参数版本(有预训练和指令微调版本,一共8个型号)。

OpenELM 模型的突出特点是其内存和计算效率。它们建立在一系列最新的优化技术之上,这些技术减少了语言模型的内存和计算占用量。

根据Apple团队的描述,OpenELM 还使用了分层缩放策略,即以非均匀的方式将参数分配给注意力层和前馈层,这与经典的 Transformer 模型相反,经典的 Transformer 模型在所有层上具有统一的结构。

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

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

相关文章

牛客热题:不同的路径数目(一)

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:不同的路径数目(一)题目链接方法…

1909java内部知识管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java内部知识管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开 发环境为TOMCAT7.0,Myeclipse8.5开发&…

二分#背包#快排#LCS详解

二分#背包#快排#LCS详解 文章目录 二分#背包#快排#LCS详解1. 二分搜索2. 01背包问题3. 快速排序4. 最长公共子序列 1. 二分搜索 在处理大规模数据集时,查找操作的效率显得尤为重要。二分搜索是一种在有序数组中查找目标值的高效算法,其时间复杂度为O(lo…

Leetcode 力扣113. 路径总和 II (抖音号:708231408)

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

KUKA机器人中断编程详细教程1—了解中断

在公众号查看更多内容。 在KUKA机器人编程与调试中,经常会用到中断编程。通过中断实现机器人暂停,或者停止当前的动作进入中断后的程序中接着运行,以此来满足实际的调试要求。 1、中断的概念 ①当出现诸如输入等定义的事件时,…

Android APP memory统计方法

目录 进程的内存信息概述 关键的术语 测试步骤 测试步骤 数据处理 数据分析: 进程内存信息 Dumpsys meminfo -a PID Procrank Procmem PID 特殊内存信息 Mali ION(multi-media,gralloc) 进程地址空间信息 /proc/pid/smaps Showmap PID …

Cinema 4D 2024 软件安装教程、附安装包下载

Cinema 4D 2024 Cinema 4D(C4D)是一款由Maxon开发的三维建模、动画和渲染软件,广泛用于电影制作、广告、游戏开发、视觉效果等领域。Cinema 4D允许用户创建复杂的三维模型,包括角色、场景、物体等。它提供了多种建模工具&#x…

redis 05 复制 ,哨兵

01.redis的复制功能,使用命令slaveof 2. 2.1 2.2 3. 3.1 3.1.1 3.1.2 3.1.3 4 4.1 4.2 例子 5.1 这里是从客户端发出的指令 5.2 套接字就是socket 这里是和redis事件相关的知识 5.3 ping一下

新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码(含搭建教程)

同城校园跑腿外卖配送平台源码,这套目前全网还没有人分享过,这个是开源的,所以没有任何问题了,这套源码非常吊,支持自定义diy 你可以设计你的页面,设计你自己的风格,支持多校园,独立…

C++对象池设计与实现

目录 一、对象池简介 1.1 池化技术 1.2 什么是对象池 1.3 对象池分配策略 二、C new和delete运算符重载 三、实现一个对象池框架 3.1 策略接口 四、实现几种对象池的分配策略 4.1 数组策略 4.2 堆策略 ​编辑 4.3 栈策略 4.4 区块策略 一、对象池简介 1.1 池化技…

SAS:coalescec函数和cmiss函数的应用及拓展

背景:CRF中收集了每个受试者3个RACE方面的信息,SDTM SPEC规定了RACE的生成规则为:若收集了多个RACE,RACE“MULTIPLE”,详细的RACE信息记录在SUPPDM中;若仅收集到一个RACE,则RACE等于RACE1-RACE3…

ROS 获取激光雷达数据(C++实现)

ROS 获取激光雷达数据(C实现) 实现思路 在机器人ROS系统中,激光雷达通常会有一个对应的节点,这个节点一般是由雷达的厂商提供,我们只需要简单的配置以下端口参数,就能和激光雷达的电路系统建立连接&#…

贪吃蛇双人模式设计(2)

敲上瘾-CSDN博客控制台程序设置_c语言控制程序窗口大小-CSDN博客贪吃蛇小游戏_贪吃蛇小游戏csdn-CSDN博客​​​​​​​ 一、功能实现: 玩家1使用↓ → ← ↑按键来操作蛇的方向,使用右Shift键加速,右Ctrl键减速玩家2使用W A S D按键来操…

向AI请教如何说不

面对父母的催婚,你可以采取以下几个步骤来进行沟通和表达自己的立场: 理解与尊重:首先,要理解父母催婚背后的关心和期望。他们可能出于对你未来幸福和生活稳定的考虑。表达对他们关心的感激,这有助于建立良好的沟通基础…

入门级的卷积神经网络训练识别手写数字-小白轻松上手-含数据集+pyqt界面

代码下载地址: https://download.csdn.net/download/qq_34904125/89374845 本代码是基于python pytorch环境安装的。 下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。 或可直接参考下面博文…

软件试运行方案(Word)

软件试运行方案(直接套用实际项目,原件获取通过本文末个人名片直接获取。) 一、试运行目的 二、试运行的准备 三、试运行时间 四、试运行制度 五、试运行具体内容与要求

Java 跳转语句 return,break和continue区别

一、总结 1、return 是结束方法 2、break 是跳出循环 3、continue 是终止本次循环继续下次循环 二、示例 public static void printWithReturn() {for (int x 1; x < 9; x) {for (int y 1; y < x; y) {System.out.print(y "*" x "" (x * …

ChatGPT Prompt技术全攻略-总结篇:Prompt工程技术的未来发展

系列篇章&#x1f4a5; No.文章1ChatGPT Prompt技术全攻略-入门篇&#xff1a;AI提示工程基础2ChatGPT Prompt技术全攻略-进阶篇&#xff1a;深入Prompt工程技术3ChatGPT Prompt技术全攻略-高级篇&#xff1a;掌握高级Prompt工程技术4ChatGPT Prompt技术全攻略-应用篇&#xf…

有趣的数学 为什么绝对值和模都用两个竖线表示?

绝对值和模都可以使用两个竖线表示&#xff0c;是因为它们在数学概念上有相似的性质&#xff0c;不过是应用场景不同。 绝对值&#xff08;Absolute Value&#xff09;&#xff1a; 绝对值是一个实数的非负值。它表示一个数在数轴上距离原点的距离。例如&#xff0c; 和 。 模&…

滑动窗口算法:巧妙玩转数据的窗外世界

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 滑动窗口是什么&#xff1f; 二 相关题目解析 1. 长度最小的子数组 &#x1f973;题目解析 &#x1f973;算法原理 ✏️思路1 暴力枚举出所有子数组之和 ✏️思路2 滑动窗…