知识库-向量化功能-环境配置
一、功能概述
本功能支持读取上传的PDF、Word、TXT格式文本文件,通过文本嵌入模型将文本转换为向量数据,并将原始文本与向量数据存储至Elasticsearch(ES)向量数据库,最终实现基于语义的文本相似度检索。
注意:本功能仅处理文本内容,不涉及图片的读取与解析。
二、技术框架
- 核心框架:SpringBoot 3.4.3
- AI组件:Spring AI 1.0.0
- 向量数据库:Elasticsearch 8.11.4
- 文本嵌入模型:lrs33/bce-embedding-base_v1(适配文本相似度计算、语义搜索场景,输出向量维度为768)
三、环境准备(Windows系统)
3.1 软件下载与安装
| 软件/服务 | 下载地址/安装方式 | 备注 |
|---|---|---|
| Ollama | ollama.com/ | 用于本地部署文本嵌入模型,下载后直接安装即可 |
| Elasticsearch 8.11.4 | artifacts.elastic.co/downloads/e… | 免安装,解压即可使用 |
3.2 Elasticsearch 配置修改(关闭安全验证,开发环境专用)
解压Elasticsearch后,修改 elasticsearch-8.11.4\config\elasticsearch.yml 配置文件,关闭安全验证(仅用于开发环境,生产环境需开启并配置账号密码):
# 关闭xpack安全验证(核心配置)
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
# 可选:开启跨域(若前端需访问ES)
http.cors.enabled: true
http.cors.allow-origin: "*"
3.3 文本嵌入模型部署
- 启动Ollama服务(安装完成后默认自动启动,可通过任务管理器确认);
- 打开命令行工具(CMD/PowerShell),执行模型下载命令:
ollama pull lrs33/bce-embedding-base_v1 - 验证模型下载结果,执行命令:
若列表中显示ollama listlrs33/bce-embedding-base_v1,则说明模型下载成功。
四、项目配置
4.1 Maven依赖配置
<!-- Spring AI 核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-advisors-vector-store</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Ollama 模型依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama</artifactId>
<version>1.0.0</version>
</dependency>
4.2 应用配置(application.yml)
spring:
# AI 相关配置
ai:
# Ollama 本地服务配置
ollama:
base-url: http://localhost:11434 # Ollama 默认端口11434
# 文本嵌入模型配置
embedding:
model: lrs33/bce-embedding-base_v1 # 与本地下载的模型名一致
options:
temperature: 0.0 # 嵌入模型固定为0,避免随机值
num_ctx: 1024 # 模型上下文窗口大小,适配文本长度
# Elasticsearch 向量存储配置
vectorstore:
elasticsearch:
index-name: ai_vector_index # 向量索引名(自动创建)
vector-field-name: vector # 向量数据存储字段名
text-field-name: text # 原始文本存储字段名
id-field-name: id # 文档唯一标识字段名
dimension: 768 # 必须匹配模型输出维度(lrs33/bce-embedding-base_v1为768)
similarity: cosine # 相似度算法(cosine余弦相似度/ l2_norm欧氏距离/ dot_product点积)
bulk-size: 50 # ES批量写入批次大小(与代码中BATCH_SIZE保持一致)
refresh-interval: 300s # 索引刷新间隔(减少ES磁盘IO压力)
# Elasticsearch 基础连接配置
elasticsearch:
uris: http://localhost:9200 # ES 默认端口9200
# username: elastic # 生产环境开启安全验证时需配置
# password: 123456 # 生产环境配置对应密码
connection-timeout: 300s # 连接超时时间
socket-timeout: 600s # 读写超时时间
max-conn-total: 50 # 最大连接数
max-conn-per-route: 20 # 单路由最大连接数
4.3 配置说明
| 配置项 | 关键说明 |
|---|---|
spring.ai.ollama.embedding.model | 必须与Ollama本地模型名完全一致,否则模型调用失败 |
spring.ai.vectorstore.elasticsearch.dimension | 必须匹配模型输出向量维度(768),否则ES向量检索报错 |
spring.ai.vectorstore.elasticsearch.similarity | 推荐使用cosine余弦相似度(文本语义检索最优) |
spring.elasticsearch.uris | 若ES部署在远程服务器,需替换为对应IP+端口 |
五、验证步骤(可选)
- 启动Elasticsearch:执行
elasticsearch-8.11.4\bin\elasticsearch.bat; - 验证ES连接:访问
http://localhost:9200,返回JSON格式集群信息则说明启动成功; - 验证Ollama模型:执行
ollama run lrs33/bce-embedding-base_v1,模型正常响应则说明可用; - 启动SpringBoot项目,上传文本文件后,可通过ES客户端(如Kibana)查看
ai_vector_index索引是否生成数据,验证向量存储功能。
六、注意事项
- 开发环境关闭ES安全验证仅为便捷调试,生产环境需开启xpack安全验证并配置强密码;
- Ollama服务需保持运行状态,否则模型无法调用;
- 若文本文件较大,可适当调整
num_ctx(模型上下文)和bulk-size(ES批量写入)参数; - ES索引刷新间隔
refresh-interval可根据业务需求调整,检索实时性要求高可减小数值(如10s),但会增加ES压力。