搭建自己的专属AI-使用Ollama+AnythingLLM+Python
一、前言
最近DeepSeek模型非常火,其通过对大模型的蒸馏得到的小模型可以较轻松地在个人电脑上运行,这也使得我们有机会在本地构建一个专属于自己的AI,进而把AI“调教”为我们希望的样子。本篇文章中我将介绍如何使用Ollama+AnythingLLM+Python实现DeepSeek的本地部署,并训练一个自己的专属AI。
二、工具介绍
Ollama
Ollama是一个模型管理工具
AnythingLLM
是一个训练AI的工具,其支持的模型数量很多,并且有方便的图形化界面来上传训练AI所需要的文档。在AnythingLLM中,可以指定各种LLM,向量数据库以及Embedder。此外,它还提供了丰富的RESTful风格的API以供其他程序调用,使得外部程序可以轻松调用AnythingLLM训练出的AI。
三、工具安装
1.Ollama安装
下载地址:https://ollama.com/
下载deepseek-r1模型:
下载地址:https://ollama.com/library/deepseek-r1
选择模型,b即billion,参数越多的模型越“聪明”,但需要的配置也就越高。选择好模型之后点击红圈中的按钮,复制命令到剪切板中,然后将其粘到cmd中,ollama就会开始下载模型了。
ollama run deepseek-r1:14b
输入内容测试结果:
打开浏览器,输入:http://localhost:11434,可以看到“Ollama is running”的页面,说明Ollama的服务已经启动了。
我们已经成功地下载好了deepseek-r1的蒸馏模型,下面我们可以写一个Model文件,来基于deepseep-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 """ 你是一个我的个人助手,在回答问题时尽量贴近人类语言来回答问题。 """
完整的参数说明可以参考官方文档:
https://github.com/ollama/ollama/blob/main/docs/modelfile.md
在文件的地址中利用cmd命令创建模型:
ollama create <模型名> -f <ModelFile全路径>
然后输入:ollama list,可以看到我们新建的模型。
2.AnythingLLM安装
我们刚才已经创建了本地的模型,但还没有对它进行自己独特的训练,这就需要我们安装AnythingLLM了。
2.1 下载安装
官方下载地址:https://anythingllm.com,点击Download for desktop按钮,根据自己的系统选择安装包下载,下载好后正常双击安装就好。
2.2 设置模型
在LLMPerference输入框中输入ollama,选择ollama,其他信息都是默认的。
下一步
创建工作区:
2.3 上传文件
选择工作区上传按钮,在弹窗中上传文件。
建立一个文档,文档内容输入“李四是条狗”。然后加载到工作区。
2.4 测试模型
3.Python访问API
我们已经初步知道了如何在AnythingLLM客户端中训练AI以及和AI对话,下面我们来看一下如何用python来调用AnythingLLM的API。
3.1 创建API密钥
生成密钥后页面并不会自动涮洗,需要手动切换目录查看。
我创建的密钥为:09MP0F4-0T0MM3D-HXR369C-S1N7TAN
API接口的访问地址:
3.2 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 09MP0F4-0T0MM3D-HXR369C-S1N7TAN', 'accept':'application/json' } response=requests.post('http://localhost:3001/api/v1/workspace/myai/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 = request.get(‘http://localhost:3001/api/v1/workspaces’,headers=headers)
可以在如下地址查看所有的AnythingLLM的API文档:
http://localhost:3001/api/docs/#/workspaces/get_v1_workspace
运行代码如下:
参考地址:https://yebd1h.smartapps.cn/pages/blog/index?blogId=145407314&_swebfr=1&_swebFromHost=baiduboxapp
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
2022-02-10 处理npm i 因版本问题导致的报错(legacy-peer-deps)
2021-02-10 Redis Zset有序集合
2021-02-10 Redis Hash哈希类型
2021-02-10 Redis Set集合类型
2021-02-10 Redis List列表类型详解