大模型及RAG架构的本地部署

本次在本地电脑部署离线的大模型和RAG架构,并进行初步的功能测试,以简单地入门大模型及RAG架构。

🔥大模型部署

  • 这次部署大模型使用的是Ollama,它一个开源的LLM提供商,部署简便很适合入门使用。
  • 进入官网直接选择对应系统下载并安装(这个应该只能安装在C盘)。
  • 然后在系统变量里面添加OLLAMA_MODELS环境变量,值设置为你希望模型存储的路径,否则会直接下到C盘,然后在任务管理器关闭ollama的后台进程。
    通义千问
  • 在cmd中输入ollama run qwen2.5,ollama就会下载千问2.5的模型(这里没有设置模型规模,默认下载7B的版本,大概5GB左右),要选择模型规模可以在ollama官网的model里面选(如上图),下载就可以赋值右边的指令。
  • 下载完成后就可以直接在cmd界面发问题进行对话了,不是很吃性能,CPU就能跑,到这里大模型就算部署了。

🔥嵌入模型下载

  • 同样在OLLAMA上有提供嵌入模型,就是将本地知识库内容转换为向量,类似transformer架构的embedding层的功能。
    嵌入模型
  • 这次选择上图的模型,还是用ollama run指令下载,这个模型显然是不能对话的,先下好备用。

🔥RAG架构部署

  • RAG架构简单来说就是结合LLM的搜索引擎,具体详见大模型基础知识
  • 本次部署RAG用到的是AnythingLLM
  • 也是直接到官网下对应安装包安装,可以选择安装路径。

首选项设置

初始界面

  • 刚开始进入要命名一个新的工作区,然后选择想要用的LLM、嵌入模型、向量库,都可以先默认,然后就会创建工作区域,界面如上,和一般的大语言对话网站结构一样。
    LLM首选项
  • 然后点击左下方的设置(扳手),先在‘外观’设置一下语言,然后选择LLM首选项,如上图,选择OLLAMA作为LLM提供商,然后就会显示已有的本地模型,选择就行了。那样每次创建新的工作区就会先选它。
    嵌入模型首选项
  • 然后就是选择嵌入模型,一样的操作。
  • 向量库这次还是用默认的,所以先不设置。

工作区设置

工作区LLM设置

  • 在工作区右边的齿轮可以进行工作区的设置,首先是LLM的设置,可以选择不同于首选项的LLM,这里选择之前下载的千问2.5模型。
  • 下面的选项还可以选择是聊天还是仅检索(查询),然后设置模型可以依据的历史对话数,以及设置提示prompt。最后在底下有一个更新工作区要记得点击才能保存设置。
    向量库设置
  • 然后设置向量库,如上图,可以选择每次给大模型多少片段让它生成回答,还有就是选择的文本片段与聊天的相似度最低阈值是多少。

知识库构建

知识库设置

  • 在对应的工作区旁边可以上传文档到知识库,可以复制网页到左下方让它爬取(fetch website),或者直接上传文件,然后移动到右边,左下角会出现保存按钮,点击就可以使嵌入模型开始工作,转换为对应的向量存到数据库了。
  • 注意:如果要切换嵌入模型,所有工作区的知识库就得重新导入文件,再重新进行嵌入。

🔥基本功能测试

借助知识库回答

  • 之前在知识库传了一个论文,然后现在让它总结内容,如上图,可以看到能够正常返回和论文相关的内容。说明RAG的所有东西都是构建成功的。
  • 不过总结的算不上全面,这些就和大量需要调整的内容和参数有关,包括但不限于之前提及的——LLM选择、LLM规模、嵌入模型选择、向量库选择、文本形式、嵌入token大小、相似度阈值等等。
    调试后效果
  • 后续调试:之后我下载了32B参数的千问模型,变化不算大。然后文本嵌入时减小了文本的长度,从8k调到了4k,然后把word文档改为pdf后重新问该问题,发现能够相当完整地概括文章内容了,并且细问其中某个方面时也能够解答。说明嵌入后的向量不应该太长,模型可以适当增大,当然这会以时间开销为代价。

🔥API调试

  • 本地部署大模型和RAG最重要的还是能不能用API直接访问,这样就可以把它集成到自己的网站、应用、程序中。无论是Ollama还是anythingllm都提供了API接口。
    创建API KEY
  • 在之前的总设置界面中可以在左边找到API秘钥选项,进入后创建新的秘钥,生成了API KEY,然后复制它(退出来刷新界面或者重启软件也能再看到)。

API文档调试

  • 然后点击上图的文档链接,就可以进入一个软件提供的小测试环境,里面有各种API接口,包括LLM的接口、嵌入模型的接口、向量库的接口等等。
    填入API
  • 在上方输入API KEY进行认证。
    API文档测试
  • 如上图的步骤,选择/v1/workspace/{slug}/chat这个API,就可以开始调试,slug填入工作区的名字(全改小写),然后设置发送数据。message是发送的问题,mode部分应当只保留chat或者query之一,后面两个可以暂时不用。
    API文档调试结果示意
  • 设置好后就可以在底下点击execute按钮进行调试,如果返回了200及其回答等内容,说明API接口没问题。
  • 记住这个Request URL,后面要用到。

Python脚本调试

  • 然后就可以用python脚本进行调试了,如下,输入好三个值,设置好问题,就可以调试了。
import requests

# 替换为你的API密钥、工作区ID和API端点
API_KEY = '你的API_KEY'
WORKSPACE_ID = '你的工作区名称'
API_ENDPOINT = '刚才提到的Request URL'

# 设置请求头,通常需要包含认证信息
headers = {
    'Authorization': f'Bearer {API_KEY}',
    'Content-Type': 'application/json'
}

# 构建请求数据,这里以发送一个简单的聊天消息为例
payload = {
  "message": "你好,你是谁",
  "mode": "chat"
}

# 发送POST请求
response = requests.post(API_ENDPOINT, headers=headers, json=payload)

# 检查响应状态码
if response.status_code == 200:
    # 请求成功,处理响应数据
    chat_response = response.json()
    print("聊天响应:", chat_response)
else:
    # 请求失败,打印错误信息
    print("请求失败,状态码:", response.status_code)
    print("错误信息:", response.text)

python脚本测试结果

  • 如上图,返回了json数据,textResponse是大模型的回答,sources是查找到的文本(当然测试问题很简单它肯定找不到符合的内容了),可以用函数专门提取对应的内容进行想要的处理。
  • 至此就实现了API调用功能。

🔥总结和展望

  • 该方案基本功能都实现了并做了初步的调试,通过本次尝试,我对LLM部署和RAG框架构建有了初步的认识,市面上的免费方案确实已经足够方便又快捷。
  • 后续可以对各种参数和选择进行修改以调出更好的效果;或者尝试在树莓派等边缘设备的部署效果;以及尝试在具体大小项目中使用该LLM或者RAG。
  • 当然,这个方案足够简便的同时自由度是有限的,要想有更细致的参数可调可以选择hugging face社区的一些方案来搭建RAG、微调模型,以进行更深入地学习。
  • Copyrights © 2023-2025 LegendLeo Chen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信