xinli/Archive/启用完整RAG功能指南.md
2026-01-30 16:23:31 +08:00

5.2 KiB
Raw Blame History

启用完整RAG功能指南

当前知识库管理功能已经可以使用,但向量化功能被禁用了。如果需要启用完整的RAG检索增强生成功能包括语义搜索和AI问答请按以下步骤操作。

当前状态

已启用的功能:

  • 文档上传支持txt、pdf、doc、docx、md
  • 文档解析和文本提取
  • 文本分块
  • 文档列表查看
  • 文档删除

未启用的功能:

  • 文本向量化Embedding
  • 向量数据库存储
  • 语义搜索
  • AI智能问答

启用步骤

步骤1安装并启动Ollama本地AI服务

1.1 下载Ollama

访问官网下载:https://ollama.ai/download

  • Windows: 下载安装包直接安装
  • 安装后会自动启动服务默认端口11434

1.2 下载模型

打开命令行,执行:

# 下载嵌入模型(用于向量化)
ollama pull nomic-embed-text

# 下载生成模型用于AI问答
ollama pull qwen2.5:7b

1.3 验证Ollama是否运行

curl http://localhost:11434/api/tags

如果返回模型列表说明Ollama正常运行。


步骤2安装并启动ChromaDB向量数据库

2.1 安装Python如果没有

下载Python 3.8+https://www.python.org/downloads/

2.2 安装ChromaDB

pip install chromadb

2.3 启动ChromaDB服务

# 方式1直接启动前台运行
chroma run --host localhost --port 8000

# 方式2后台运行Windows
start /B chroma run --host localhost --port 8000

2.4 验证ChromaDB是否运行

访问:http://localhost:8000/api/v1/heartbeat 如果返回心跳信息说明ChromaDB正常运行。


步骤3修改代码启用向量化

3.1 打开文件

ry-xinli-system/src/main/java/com/ddnai/system/rag/service/KnowledgeService.java

3.2 找到第98-115行左右的代码

// 5. 向量化 - 添加超时和异常处理
// 暂时跳过向量化,避免超时问题
List<float[]> embeddings = null;
boolean vectorizationSuccess = false;

// TODO: 启用向量化需要先启动AI服务Ollama或OpenAI
log.info("Vectorization is currently disabled to avoid timeout issues");
log.info("Document will be saved without vector embeddings");

/* 取消注释以启用向量化
try {
    embeddings = embeddingService.embedBatch(chunks);
    log.info("Generated {} embeddings", embeddings.size());
    vectorizationSuccess = true;
} catch (Exception e) {
    log.warn("Failed to generate embeddings: {}", e.getMessage());
}
*/

3.3 修改为(删除注释,启用向量化)

// 5. 向量化 - 添加超时和异常处理
List<float[]> embeddings = null;
boolean vectorizationSuccess = false;

try {
    embeddings = embeddingService.embedBatch(chunks);
    log.info("Generated {} embeddings", embeddings.size());
    vectorizationSuccess = true;
} catch (Exception e) {
    log.warn("Failed to generate embeddings: {}", e.getMessage());
    // 如果向量化失败,文档仍会被保存,只是不能进行语义搜索
}

3.4 重新编译

mvn clean package -DskipTests -pl ry-xinli-system -am

3.5 重启后端服务


步骤4验证功能

4.1 上传测试文档

在知识库管理页面上传一个txt或md文件

4.2 查看后端日志

应该看到类似的日志:

Parsed document: 1234 characters extracted
Split document into 5 chunks
Generated 5 embeddings
Stored 5 chunks to ChromaDB

4.3 测试语义搜索

使用搜索功能,应该能根据语义而不是关键词匹配找到相关文档


替代方案使用OpenAI API

如果不想安装本地服务可以使用OpenAI API

1. 获取OpenAI API Key

访问:https://platform.openai.com/api-keys

2. 配置API Key

application.yml中添加:

rag:
  ai:
    provider: openai
    openai:
      api-key: sk-your-api-key-here
      base-url: https://api.openai.com/v1
      model: gpt-3.5-turbo
      embedding-model: text-embedding-ada-002

3. 启用向量化代码同步骤3

4. 重启服务


快速检查脚本

创建一个批处理文件检查RAG服务.bat

@echo off
echo 检查Ollama服务...
curl -s http://localhost:11434/api/tags
echo.
echo.
echo 检查ChromaDB服务...
curl -s http://localhost:8000/api/v1/heartbeat
echo.
echo.
pause

常见问题

Q1: Ollama启动失败

A: 检查端口11434是否被占用或重启Ollama服务

Q2: ChromaDB连接超时

A: 确认ChromaDB服务正在运行检查防火墙设置

Q3: 向量化很慢

A:

  • 本地Ollama正常第一次加载模型较慢
  • OpenAI API检查网络连接和API配额

Q4: 不想启用向量化,只想存储文档

A: 保持当前配置即可,文档会被保存和解析,只是不能进行语义搜索


总结

最简单的方案(推荐):

  1. 安装Ollama一键安装
  2. 下载模型(两条命令)
  3. 安装ChromaDB一条pip命令
  4. 启动ChromaDB一条命令
  5. 修改代码取消注释(删除几行注释)
  6. 重新编译重启

总耗时约10-20分钟(主要是下载模型)

如有问题,查看后端日志获取详细错误信息。