当前位置: 首页 > news >正文

搭建自己的专属AI——使用Ollama+AnythingLLM+Python实现DeepSeek本地部署

前言

最近DeepSeek模型非常火,其通过对大模型的蒸馏得到的小模型可以较轻松地在个人电脑上运行,这也使得我们有机会在本地构建一个专属于自己的AI,进而把AI“调教”为我们希望的样子。本篇文章中我将介绍如何使用Ollama+AnythingLLM+Python实现DeepSeek的本地部署,并训练一个自己的专属AI。

工具介绍

我选用Ollama+AnythingLLM来管理训练AI模型,先来介绍一下这两个工具是什么。

Ollama

Ollama是一个模型管理工具,其logo是一只羊驼:

通过Ollama,我们可以轻松下载它所支持的模型,包括llama,qwen以及最近很火的deepseek-r1,并把它作为一个本地的模型提供商以便被其他程序所调用。

AnythingLLM

AnythingLLM是一个训练AI的工具,其支持的模型数量很多,并且有方便的图形化界面来上传训练AI所需要的文档。在AnythingLLM中,可以指定各种LLM,向量数据库以及Embedder。此外,它还提供了丰富的RESTful风格的API以供其他程序调用,使得外部程序可以轻松调用AnythingLLM训练出的AI。

整体架构

整体架构图如下:

 我们首先通过Ollama下载DeepSeek模型,然后可以基于DeepSeek来创建自己的AI模型(指定系统提示词之类的微调);然后将其导入到AnythingLLM中,最后通过Python来调用AnythingLLM提供的API实现和AI进行交互。

安装Ollama

第一步我们先来安装Ollama。

我们打开Ollama官网地址:https://ollama.com,点击Download按钮,再根据自己的系统选择合适的安装包下载,这里以Windows为例。

在安装之前,我们可以通过设置系统环境变量来指定Ollama模型下载的路径,如图所示:

我们建立一个名为OLLAMA_MODELS的环境变量,值为Ollama模型下载的路径。

由于Ollama的奇葩设计,其会安装在C盘下的默认目录,如果我们不想让他安装在默认目录的话,就不要使用双击的方式打开刚刚下好的安装包,而是通过cmd输入以下命令:

OllamaSetup.exe /DIR="绝对路径名"

在安装完成后,打开cmd,输入ollama,如看到以下命令,说明安装成功:

然后我们进入ollama的deepseek-r1模型页面:https://ollama.com/library/deepseek-r1,可以看到有多种模型以供选择:

这里的1.5b,7b,8b的含义是模型中参数的数量,b即billion,参数越多的模型越“聪明”,但需要的配置也就越高。我的电脑是i7 8700K+4070,因此我选择了14b的模型;32b的模型需要4090或3090才能跑起来,大家可以根据自己的配置来选择。

选择好模型之后点击红圈中的按钮,复制命令到剪贴板中,然后将其粘贴到cmd中,ollama就会开始下载模型了(此处大概率需要梯子,大家自行解决)。

在下载完成后,我们的cmd窗口会变成下图:

此时我们就可以开始和AI对话了,输入信息后回车,等待一会(取决于模型大小以及系统配置)后AI就会回复:

此时打开浏览器,输入http://localhost:11434,可以看到“Ollama is running”的页面,说明Ollama的服务已经启动了。

我们已经成功地下载好了deepseek-r1的蒸馏模型,下面我们可以写一个Model文件,来基于deepseek-r1来创建属于我们自己的AI。

新建一个文件,命名为ModelFile(文件名自己随意取),输入以下内容:

FROM deepseek-r1:14b
PARAMETER temperature 1
PARAMETER num_ctx 1024
PARAMETER mirostat_eta 0.5
PARAMETER top_k 60
PARAMETER top_p 0.95
SYSTEM """
你是一个我的个人助手,在回答问题时尽量贴近人类语言来回答问题。
"""

FROM关键字的含义为,从哪个大模型来创建这个AI,这里选择的是14b模型;

PARAMETER,指定参数的值。

  • temperature:范围为0-1,0比较一板正经,1更接近于真人。
  • num_ctx:设置使用下一个token的上下文窗口大小。 
  • mirostat_eta:影响算法对生成文本的响应速度,默认值为0.1。
  • top_k:减少生成无意义内容的概率,值越高答案越多样,默认值为40。
  • top_p:较高的值会使得生成文本更丰富,默认值为0.9。

完整的参数说明可以参考官方文档:https://github.com/ollama/ollama/blob/main/docs/modelfile.md

SYSTEM,系统提示词,我们可以在这里加一些对AI风格的描述,不需要花里胡哨的提示词,直接说人话就行。 

在写完这个文件后,我们运行以下命令,使用刚写好的ModelFile来创建自己的模型:

ollama create <模型名> -f <ModelFile全路径>

然后输入ollama list,可以看到我们新建的模型。 

安装AnythingLLM

我们刚才已经创建了本地的模型,但还没有对它进行自己独特的训练,这就需要我们安装AnythingLLM了。

打开AnythingLLM官网:https://anythingllm.com,点击Download for desktop按钮,根据自己的系统选择安装包下载,下载好后正常双击安装就好。

安装完成后运行AnythingLLM,在AnythingLLM Preference中进行相关配置,由于我已经配置过了,因此这里没有图了,口述一下:

LLM Provider选Ollama,Ollama Base URL输入http://127.0.0.1:11434,Chat Model Selection选我们刚才建好的模型,这个会作为默认模型;

Embedding Preference中,Provider默认就可以,如果你有别的选择也可以用自己的。

Vector Database中,Provider选LanceDB即可

然后我们就可以在左侧边栏新建工作区,开始对话了。

这里介绍一下AnythingLLM工作区的概念。在AnythingLLM中,一个工作区可以算为是一个独立的AI,使用相同的向量数据库;不同的工作区可以使用不同的模型,这样可以确保不同的AI相互独立,不会互相污染。每个工作区可以建立不同的Thread,这里的Thread为对话列表,而并非线程,相当于你可以和这个AI同时发起不同的对话。

下面我们来看看要如何训练这个AI。我们可以注意到,左边边栏的工作区右侧有个上传图标,点击它:

会弹出一个UI让我们选择训练的内容 

 我们可以选择上传文件,或者可以在下面的Fetch Website中输入网址。

我们新建一个文本文件,写这么一句话:

(这里不用张三的原因是之前我告诉AI张三是只猫) 

(温馨提示:你可以把李四换成你身边的任何人) 

点击上传,再选中这个文件,点击Move to Workspace,然后再点击右下方的Save and Embed按钮,AnythingLLM就会用这个文件来训练AI。 

 然后我们来问一声AI:李四是谁?

可以看出AI已经知道了李四是条狗:)

 我们也可以点击工作区右边的齿轮图标,在右边的向量数据库页签中查看向量数量:

训练的内容越多,这个值就越大。

 我们已经初步知道了如何在AnythingLLM客户端中训练AI以及和AI对话,下面我们来看一下如何用python来调用AnythingLLM的API。

我们在AnythingLLM左边栏下方点击扳手图标,进入设置界面,然后选择API密钥项:

然后点击右边的生成新的API密钥按钮,在弹出的画面中点击Create API key按钮,AnythingLLM就会生成一个新的密钥以供后续python调用使用。

 

编写Python代码

我们新建一个python工程,输入以下代码:

# main.py
import requests
import json
if __name__ == '__main__':while True:print('Send message >>>')message = input()json_data = {'message': message,'mode':'chat',}headers = {'Content-Type':'application/json','Authorization': 'Bearer <刚才生成的API Key>','accept':'application/json'}response = requests.post('http://localhost:3001/api/v1/workspace/<小写的工作区名称>/chat', headers=headers ,json=json_data)answer_dict = json.loads(response.content)# answer_dict已经拿到了AI返回的结果了,以下两行是去除掉输出的思考过程answer = answer_dict['textResponse'].__str__()final_answer = answer[answer.index('</think>')+len('</think>')+1:]# 打印AI的结果print(final_answer)

 这里要注意的是,headers里Authorization的值为‘Bearer <API Key>’的值,Bearer是固定不变的;json_data的mode的值有两种:chat和query。query只会根据你上传的文件来回答内容,你不告诉它的东西它是不会回答的,适合做特定领域内的AI;chat则既会根据已训练好的内容来回答,同时也会根据你上传的内容来回答,更适合通用AI。

在post的url中,workspace/后的参数是工作区内部名称,为小写的工作区名称,但如果你不清楚工作区的内部名称是什么,可以发送如下请求来在响应中查看所有的工作区信息:

response = requests.get('http://localhost:3001/api/v1/workspaces', headers=headers)

可以在如下地址查看所有的AnythingLLM的API文档:http://localhost:3001/api/docs/#/Workspaces/get_v1_workspaces 

然后我们可以在powershell中运行我们这个main.py,问出我们刚才的那个问题:李四是谁?

 AI回答正确!

结语

在此篇博客中,我们实现了基于Ollama+AnythingLLM+Python的deepseek本地部署,并对它进行了初步的训练,让它知道了李四是条狗。我们可以在此基础上进一步扩展我们想要的功能,如自制个webUI之类的,或者让它成为某个领域的UI,或者让它只是纯粹和我们逗闷子,希望大家都能通过此方法来训练出自己想要的AI。 

相关文章:

搭建自己的专属AI——使用Ollama+AnythingLLM+Python实现DeepSeek本地部署

前言 最近DeepSeek模型非常火&#xff0c;其通过对大模型的蒸馏得到的小模型可以较轻松地在个人电脑上运行&#xff0c;这也使得我们有机会在本地构建一个专属于自己的AI&#xff0c;进而把AI“调教”为我们希望的样子。本篇文章中我将介绍如何使用OllamaAnythingLLMPython实现…...

『 C++ 』中理解回调类型在 C++ 中的使用方式。

文章目录 案例 1&#xff1a;图形绘制库中的回调使用场景说明代码实现代码解释 案例 2&#xff1a;网络服务器中的连接和消息处理回调场景说明代码实现代码解释 案例 3&#xff1a;定时器中的回调使用场景说明代码实现代码解释 以下将通过不同场景给出几个使用回调类型的具体案…...

git多人协作

目录 一、项目克隆 二、 1、进入克隆仓库设置 2、协作处理 3、冲突处理 4、多人协作分支的推送拉取删除 1、分支推送&#xff08;2种&#xff09; 2、远程分支拉取&#xff08;2种&#xff09; 3、远程分支删除 一、项目克隆 git clone 画船听雨眠/test1 (自定义的名…...

CTFSHOW-WEB入门-命令执行71-77

题目&#xff1a;web 71 题目&#xff1a;解题思路&#xff1a;分析可知highlight_file() 函数被禁了&#xff0c;先想办法看看根目录&#xff1a;cvar_export(scandir(dirname(‘/’))); 尝试一下发现很惊奇&#xff1a;&#xff08;全是&#xff1f;&#xff09;这种情况我也…...

浅谈《图解HTTP》

感悟 滑至尾页的那一刻&#xff0c;内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂&#xff0c;但此刻却觉得她是如此清晰而可爱的呈现在哪里。 介绍中说&#xff0c;《图解HTTP》适合作为第一本网络协议书。确实&#xff0c;它就像一座桥梁&#xff0c;连接…...

LLMs瞬间获得视觉与听觉感知,无需专门训练:Meta的创新——在图像、音频和视频任务上实现最优性能。

引言&#xff1a; 问题&#xff1a; 当前的多模态任务&#xff08;如图像、视频、音频描述生成、编辑、生成等&#xff09;通常需要针对特定任务训练专门的模型&#xff0c;而现有的方法在跨模态泛化方面存在局限性&#xff0c;难以适应新任务。此外&#xff0c;多模态嵌入反演…...

自研有限元软件与ANSYS精度对比-Bar3D2Node三维杆单元模型-央视大裤衩实例

目录 1、“央视大裤衩”自研有限元软件求解 1.1、选择单元类型 1.2、导入“央视大裤衩”工程 1.3、节点坐标定义 1.4、单元连接关系、材料定义 1.5、约束定义 1.6、外载定义 1.7、矩阵求解 1.8、变形云图展示 1.9、节点位移 1.10、单元应力 1.11、节点支反力 2、“…...

kubernetes 高可用集群搭建

在生产环境中部署 Kubernetes 集群时&#xff0c;确保其高可用性&#xff08;High Availability, HA&#xff09;是至关重要的。高可用性不仅意味着减少服务中断时间&#xff0c;还能提高系统的稳定性和可靠性。本文将详细介绍如何搭建一个高可用的 Kubernetes 集群&#xff0c…...

【C++】STL——vector底层实现

目录 &#x1f495; 1.vector三个核心 &#x1f495;2.begin函数&#xff0c;end函数的实现&#xff08;简单略讲&#xff09; &#x1f495;3.size函数&#xff0c;capacity函数的实现 &#xff08;简单略讲&#xff09; &#x1f495;4.reserve函数实现 &#xff08;细节…...

数据结构初探:链表之单链表篇

本文图皆为作者手绘,所有代码基于vs2022运行测试 系列文章目录 数据结构初探:顺序表篇 文章目录 系列文章目录前言一、链表基础概念二、链表的分类简化边界条件处理使代码更清晰简洁提高程序稳定性 1.单链表(不带头不循环的单链表);1.1存储结构;1.2准备工作1.3链表增删查改的实…...

介绍一下Mybatis的底层原理(包括一二级缓存)

表面上我们的就是Sql语句和我们的java对象进行映射&#xff0c;然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession&#xff0c; 它可以被视为与数据库交互的一个会话&#xff0c;用于执行 SQL 语句&#xff08;Ex…...

Linux基础 ——tmux vim 以及基本的shell语法

Linux 基础 ACWING y总的Linux基础课&#xff0c;看讲义作作笔记。 tmux tmux 可以干嘛&#xff1f; tmux可以分屏多开窗口&#xff0c;可以进行多个任务&#xff0c;断线&#xff0c;不会自动杀掉正在进行的进程。 tmux – session(会话&#xff0c;多个) – window(多个…...

64位的谷歌浏览器Chrome/Google Chrome

64位的谷歌浏览器Chrome/Google Chrome 在百度搜索关键字:chrome&#xff0c;即可下载官方的“谷歌浏览器Chrome/Google Chrome”&#xff0c;但它可能是32位的&#xff08;切记注意网址&#xff1a;https://www.google.cn/....&#xff0c; 即&#xff1a;google.cn&#xff…...

jetson编译torchvision出现 No such file or directory: ‘:/usr/local/cuda/bin/nvcc‘

文章目录 1. 完整报错2. 解决方法 1. 完整报错 jetson编译torchvision,执行python3 setup.py install --user遇到报错 running build_ext error: [Errno 2] No such file or directory: :/usr/local/cuda/bin/nvcc完整报错信息如下&#xff1a; (pytorch) nxnx-desktop:~/Do…...

多线程创建方式三:实现Callable接口

实现Callable第三种方式存在的原因 作用&#xff1a;可以返回线程执行完毕后的结果。 前两种线程创建方式都存在的一个问题&#xff1a;假如线程执行完毕后有一些数据需要返回,他们重写的run方法均不能直接返回结果。 如何实现 ● JDK 5.0提供了Callable接口和FutureTask类来…...

Linux下的编辑器 —— vim

目录 1.什么是vim 2.vim的模式 认识常用的三种模式 三种模式之间的切换 命令模式和插入模式的转化 命令模式和底行模式的转化 插入模式和底行模式的转化 3.命令模式下的命令集 光标移动相关的命令 复制粘贴相关命令 撤销删除相关命令 查找相关命令 批量化注释和去…...

Docker技术相关学习二

一、Docker简介 1.Docker之父Solomon Hykes形容docker就像传统的货运集装箱。 2.docker的特点和优势&#xff1a; 轻量级虚拟化&#xff1a;Docker容器相较于传统的虚拟机更加的轻量和高效&#xff0c;能够快速的启动和停止来节省系统资源。 一致性&#xff1a;确保应用程序在不…...

【人工智能】多模态学习在Python中的应用:结合图像与文本数据的深度探索

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 多模态学习是人工智能领域的一个重要研究方向,旨在通过结合多种类型的数据(如图像、文本、音频等)来提高模型的性能。本文将深入探讨多模…...

【MySQL】常用语句

目录 1. 数据库操作2. 表操作3. 数据操作&#xff08;CRUD&#xff09;4. 高级查询5. 索引管理6. 用户与权限7. 数据导入导出8. 事务控制9. 其他实用语句注意事项 如果这篇文章对你有所帮助&#xff0c;渴望获得你的一个点赞&#xff01; 1. 数据库操作 创建数据库 CREATE DATA…...

Docker网络基础

一、Docker网络基础 1.docker安装后会自动创建3中网络&#xff0c;分别为bridge host none docker network ls 2.docker原生bridge网络&#xff1a; docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口 bridge模式下没有公有ip,只有宿主机可以…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...