基于大模型搭建服务的一些工具

155 阅读4分钟

个人作为学习尝试搭建一个调用大模型api的应用 外部请求访问链路 用户发送请求到达模型服务入口

  1. 首先对于用户输入分词(自然语言处理NLP)
  2. 记录用户输入的原始内容和分词内容
  3. 调用向量化接口对输入向量化
  4. 根据向量查询向量库找到语义相同的内容
  5. 调用外部接口查询信息:例如天气、日期时间等
  6. 调用本地模型得到返回
  7. 本地返回记录数据库
  8. 本地返回分词
  9. 本地返回向量化
  10. 向量化数据写入向量数据库
  11. 调用外部大模型
  12. 大模型返回记录数据库
  13. 大模型返回分词
  14. 大模型返回向量化
  15. 大模型返回向量化数据写入向量数据库
  16. 本地返回和大模型返回计算近似度 验证本地模型内容
  17. 根据近似度返回本地内容还是大模型内容
  18. 如果近似度很差记录大模型返回内容作为后期训练本地模型的内容
  19. 记录用户反馈

完成以上链路用到的工具 中文分词:jieba. 记录用户输入的原始内容和分词内容:mysql、mongo、es等 调用向量化接口对输入向量化:搭建本地向量化模型 nomic-embed-text.在ollama里查询 向量化内容记录向量数据库:milvus、chroma 调用本地模型得到返回:本地模型通过ollama部署.deepseek-v3 调用外部大模型:OpenAI 本地模型访问入口:open webUI 向量近似度计算:milvus 本地模型微调训练:LLAMA-factory、unsloth 掌握以上技术站应该可以搭建一个私有化的本地模型. 以上技术都已经成熟并且开源. 这里涉及一个自然语言分析的过程.无论是微调本地模型,还是处理用户输入请求.所以需要增加一个自然语言分析层 工具:Natural Language Toolkit (NLTK)

环境部署: 自然语言分析服务:python Natural Language Toolkit (NLTK) 业务服务:java springbootAI 接收用户请求、调用自然语言分析服务接口、访问本地数据、本地模型、openAI模型 mysql数据库、es数据库、milvus数据库(依赖docker) openwebUI服务(依赖docker) ollama服务:本地模型deepseek-v3、deepseek-coder-v2 可以在ollama搜索多部署几个模型 内存11G 模型微调服务 LLAMA-factory 访问OpenAI的VPN服务:国内网络限制,需要一个外部服务器作为ng转发服务.例如阿里香港服务器 以上服务只有OpenAI需要访问外部服务器,其他所有都在本地部署

操作系统: 硬件mac mini 16g 虚拟机:vmware 操作系统 centos10 安装最新的docker版本

大语言模型使用过程中需要查找语义近似的内容,需要将文本向量化 向量化工具: Nomic-Embed-Text text-embedding-3-small Nomic-Embed-Text性能最好.通过ollama可以本地部署. 安装ollama github.com/ollama/olla… 在官网查找模型: ollama.com/search?q=em… 本地安装:

ollama pull nomic-embed-text
ollama serve

测试:

curl http://localhost:11434/api/embeddings -d '{
  "model": "nomic-embed-text",
  "prompt": "The sky is blue because of Rayleigh scattering"
}'

生成的向量存储到本地: Milvus、Pinecone、SingleStore Database、Chroma Milvus开源,所以使用Milvus验证 安装说明:

https://milvus.io/docs/install_standalone-docker.md

milvus单机安装比较简单,依赖docker系统。安装之前先安装docker

linux下yum安装docker:

yum install yum-utils device-mapper-persistent-data lvm2 -y
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
systemctl enable docker

为了加速下载镜像增加一个阿里的加速地址。在阿里云的控制台的镜像管理里面可以找到。

/etc/docker/daemon.json

安装 milvus

wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh
bash standalone_embed.sh start

这个过程比较漫长,安装完成之后会自定启动。

CREATE TABLE `chat_log` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `userName` varchar(100) DEFAULT NULL,
  `requestMessage` longtext,
  `responseMessage` longtext,
  `preRequestMessage` longtext,
  `createTime` datetime DEFAULT NULL,
  `aiClient` varchar(100) DEFAULT NULL,
  `apiKey` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='请求ai接口入参返回值的日志表';

使用springbootAI实现文本生成向量,然后向量写入数据库,调用大模型的时候入参转向量,查询向量数据库得到语义近似内容一起发给大模型.这个过程就是RAG. 如果自己有知识库就写入向量库.如果没有也可以调用外部接口.例如:天气、日期、节假日等.使用functionCall. springAI都已经做好了.

安装 docker 关闭防火墙 sudo systemctl stop firewalld 以上仅仅是个人作为学习的一些常识.作为外行并没有太多的理论说明.仅仅是工具使用的演示.没有具体的业务落地.也希望能和更多人一起讨论.希望能提出宝贵意见.目前还没有自然语言分析的能力.希望后期完善.