个人作为学习尝试搭建一个调用大模型api的应用 外部请求访问链路 用户发送请求到达模型服务入口
- 首先对于用户输入分词(自然语言处理NLP)
- 记录用户输入的原始内容和分词内容
- 调用向量化接口对输入向量化
- 根据向量查询向量库找到语义相同的内容
- 调用外部接口查询信息:例如天气、日期时间等
- 调用本地模型得到返回
- 本地返回记录数据库
- 本地返回分词
- 本地返回向量化
- 向量化数据写入向量数据库
- 调用外部大模型
- 大模型返回记录数据库
- 大模型返回分词
- 大模型返回向量化
- 大模型返回向量化数据写入向量数据库
- 本地返回和大模型返回计算近似度 验证本地模型内容
- 根据近似度返回本地内容还是大模型内容
- 如果近似度很差记录大模型返回内容作为后期训练本地模型的内容
- 记录用户反馈
完成以上链路用到的工具 中文分词: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 以上仅仅是个人作为学习的一些常识.作为外行并没有太多的理论说明.仅仅是工具使用的演示.没有具体的业务落地.也希望能和更多人一起讨论.希望能提出宝贵意见.目前还没有自然语言分析的能力.希望后期完善.