当前位置: 首页 > 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,只有宿主机可以…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...