关于大模型应用的相关知识
🧠 Ollama 原理解释
1. Ollama 是什么?
- 🔧 本地LLM运行框架:类似于"Docker for AI Models"
- 🚀 简化部署:让复杂的大模型部署变得简单
- 🔄 模型管理:可以拉取、运行、切换多个模型
- 📡 API服务:提供统一的REST API接口
2. Ollama 架构
┌─────────────────────────────────────┐
│ HCMS 应用 │
│ (Windows 开发环境) │
└─────────────┬───────────────────────┘
│ HTTP API 调用
▼
┌─────────────────────────────────────┐
│ Linux 服务器 │
│ ┌─────────────────────────────────┐ │
│ │ Ollama 服务 │ │
│ │ (端口 11434) │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ Qwen2:1.5B 模型 │ │ │
│ │ │ (934MB) │ │ │
│ │ └─────────────────────────┘ │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ nomic-embed-text │ │ │
│ │ │ (274MB) │ │ │
│ │ └─────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────┘
3. Ollama 的优势
- ✅ 模型库丰富:支持 Llama、Qwen、ChatGLM 等主流模型
- ✅ 自动优化:根据硬件自动选择最佳推理配置
- ✅ 统一接口:所有模型使用相同的API格式
- ✅ 资源管理:智能的内存和GPU管理
4. 可用的模型示例
bash
可以拉取的模型(如果有网络)
ollama pull llama3:8b # Meta的Llama3
ollama pull qwen2:7b # 阿里的通义千问
ollama pull chatglm3:6b # 清华的ChatGLM
ollama pull codellama:13b # 代码专用模型
详细解释一下 nomic-embed-text 的作用:
🧠 nomic-embed-text 是什么?
不是知识库,而是"文本向量化模型"
- 🔧 嵌入模型(Embedding Model):专门将文本转换为数字向量
- 📊 向量化工具:把文字变成计算机能理解的数字数组
- 🔍 语义理解:相似意思的文本会产生相似的向量
📋 RAG 系统架构解释
┌─────────────────────────────────────────────────────────┐
│ RAG 系统 │
├─────────────────────────────────────────────────────────┤
│ 1. 知识库文档 (PDF/Word/TXT) │
│ ↓ │
│ 2. nomic-embed-text 模型 │
│ (将文档切片转换为向量) │
│ ↓ │
│ 3. PostgreSQL + pgvector │
│ (存储文档向量到数据库) │
│ ↓ │
│ 4. 用户提问 → 向量化 → 相似度搜索 │
│ ↓ │
│ 5. 找到相关文档片段 │
│ ↓ │
│ 6. Qwen2:1.5B 模型 │
│ (基于找到的文档回答问题) │
└─────────────────────────────────────────────────────────┘
🔍 具体工作流程
第1步:文档向量化
文档: "HCMS系统是医疗管理平台"
↓ (nomic-embed-text)
向量: [0.1, -0.3, 0.8, 0.2, ...] (1536维数组)
第2步:问题向量化
问题: "什么是HCMS?"
↓ (nomic-embed-text)
向量: [0.2, -0.2, 0.7, 0.3, ...] (1536维数组)
第3步:相似度匹配
计算向量相似度 → 找到最相关的文档片段 → 提供给大模型
💡 为什么需要两个模型?
Qwen2:1.5B (对话模型)
- 🗣️ 生成回答:理解问题,生成自然语言回答
- 🧠 推理能力:逻辑思考,综合信息
nomic-embed-text (嵌入模型)
- 🔍 语义搜索:快速找到相关文档
- 📊 向量计算:高效的相似度匹配
- ⚡ 专业优化:专门为文本检索优化
🎯 实际应用场景
用户问:"HCMS的用户管理功能怎么使用?"
- nomic-embed-text: 将问题转换为向量
- 数据库搜索: 找到相关的用户手册片段
- Qwen2:1.5B: 基于找到的文档生成详细回答
结果: "根据HCMS用户手册,用户管理功能位于..."
📚 知识库 vs 嵌入模型
- 知识库:存储的实际文档内容(PDF、Word等)
- 嵌入模型:处理这些文档的工具,让AI能"理解"和"搜索"它们
🧠 RAG 是什么?
RAG = Retrieval Augmented Generation
- 🔍 Retrieval:检索(从知识库中找信息)
- 🔧 Augmented:增强(用找到的信息增强AI)
- 💬 Generation:生成(生成更准确的回答)
📋 为什么需要RAG?
传统AI的问题:
用户:"HCMS系统2024年10月的更新内容是什么?"
传统AI:"我不知道HCMS的具体更新信息..."
RAG AI的优势:
用户:"HCMS系统2024年10月的更新内容是什么?"
RAG AI:
- 🔍 搜索知识库 → 找到更新日志
- 📖 阅读相关文档 → 获取具体信息
- 💬 生成回答 → "根据更新日志,2024年10月HCMS新增了..."
🏗️ RAG 完整架构
┌─────────────────────────────────────────────────────────┐
│ RAG 工作流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 📚 知识库准备阶段 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 1. 企业文档 (PDF/Word/Excel) │ │
│ │ ↓ │ │
│ │ 2. 文档切片 (按段落/章节分割) │ │
│ │ ↓ │ │
│ │ 3. nomic-embed-text (文本→向量) │ │
│ │ ↓ │ │
│ │ 4. PostgreSQL+pgvector (存储向量) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 💬 用户问答阶段 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 1. 用户提问:"HCMS怎么用?" │ │
│ │ ↓ │ │
│ │ 2. 问题向量化 (nomic-embed-text) │ │
│ │ ↓ │ │
│ │ 3. 向量相似度搜索 (找相关文档) │ │
│ │ ↓ │ │
│ │ 4. 检索到相关文档片段 │ │
│ │ ↓ │ │
│ │ 5. 构建提示词: │ │
│ │ "基于以下文档回答问题: │ │
│ │ 文档:[检索到的内容] │ │
│ │ 问题:HCMS怎么用?" │ │
│ │ ↓ │ │
│ │ 6. Qwen2:1.5B 生成回答 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
🎯 RAG vs 传统方式对比
传统方式:
问题 → 大模型 → 基于训练数据回答 (可能过时/不准确)
RAG方式:
问题 → 搜索知识库 → 找到最新文档 → 大模型基于文档回答 → 准确答案
💡 RAG 的核心优势
1. 实时性
- ✅ 知识库可随时更新
- ✅ AI回答基于最新信息
2. 准确性
- ✅ 基于真实文档回答
- ✅ 减少AI"胡编乱造"
3. 可追溯
- ✅ 可以显示信息来源
- ✅ 用户可验证答案
4. 专业性
- ✅ 针对企业特定知识
- ✅ 支持专业术语和流程
🏢 HCMS中的RAG应用场景
场景1: "如何配置HCMS的用户权限?"
→ 搜索用户手册 → 找到权限配置章节 → 生成详细步骤
场景2: "HCMS支持哪些数据库?"
→ 搜索技术文档 → 找到数据库兼容性说明 → 列出支持的数据库
场景3: "最新版本修复了哪些bug?"
→ 搜索更新日志 → 找到bug修复记录 → 总结修复内容
🎉 总结
RAG = 让AI变成"有知识库的专家"
- 不再依赖训练时的旧知识
- 能够查阅最新的企业文档
- 提供准确、可靠的专业回答
这就是为什么我们需要 nomic-embed-text(搜索工具)+ Qwen2:1.5B(回答工具)+ PostgreSQL+pgvector(知识库)的完整RAG系统!
现在明白RAG的强大之处了吗? 🚀
🔧 Ollama 不是 RAG 框架
Ollama 的真实定位:
- 🚀 模型运行平台:类似于"模型的Docker"
- 📦 模型管理工具:下载、运行、切换模型
- 🔌 API服务器:提供统一的HTTP接口
- ❌ 不是RAG框架:只负责运行模型,不处理知识库
🏗️ 真正的RAG架构分层
┌─────────────────────────────────────────────────────────┐
│ 完整RAG系统 │
├─────────────────────────────────────────────────────────┤
│ 🧠 RAG框架层 (HCMS AI模块) │
│ - LangChain4j (Java RAG框架) │
│ - 文档处理、向量搜索、提示词构建 │
├─────────────────────────────────────────────────────────┤
│ 🔍 向量数据库层 │
│ - PostgreSQL + pgvector │
│ - 存储文档向量、相似度搜索 │
├─────────────────────────────────────────────────────────┤
│ 🤖 模型运行层 (Ollama) │
│ - 运行 Qwen2:1.5B (对话模型) │
│ - 运行 nomic-embed-text (嵌入模型) │
│ - 提供统一API接口 │
├─────────────────────────────────────────────────────────┤
│ 💾 模型文件层 │
│ - Qwen2:1.5B.gguf (模型权重文件) │
│ - nomic-embed-text.gguf (嵌入模型文件) │
└─────────────────────────────────────────────────────────┘
💡 核心概念澄清
1. RAG的核心不是nomic-embed-text
RAG的核心是工作流程:
检索(Retrieval) → 增强(Augmented) → 生成(Generation)
2. nomic-embed-text的作用
- 🔍 只负责向量化:文本 → 数字向量
- 📊 支持语义搜索:找到相似内容
- ❌ 不是RAG的全部:只是RAG流程中的一个工具
我们选择Ollama的原因
考虑到你的环境(内网、CPU服务器、需要简单部署),Ollama是最适合的选择:
- 🔒 安全:完全离线
- 🚀 简单:一键部署
- 💰 经济:无需额外费用
- 🛠️ 可控:完全自主管理
关于nomic-embed-text的误解澄清
1. Ollama本身不是RAG框架
Ollama = AI模型运行时平台,类似Docker但专门运行AI模型
bash
Ollama可以运行各种类型的模型:
ollama run qwen2:1.5b # 聊天模型
ollama run nomic-embed-text # 嵌入模型
ollama run llava:7b # 多模态模型
ollama run codellama:7b # 代码模型
2. nomic-embed-text只是一个嵌入模型
嵌入模型的作用:将文本转换为向量
bash
直接调用Ollama的嵌入API
curl http://10.86.40.116:11434/api/embeddings \
-d '{
"model": "nomic-embed-text",
"prompt": "苹果很甜"
}'
返回:
{
"embedding": [0.1, 0.8, 0.3, 0.9, ...] # 768维向量
}
这只是向量化,不是RAG!
🧩 RAG vs 嵌入模型的区别
嵌入模型 ≠ RAG框架
🔤 嵌入模型的作用:
输入:"苹果很甜"
输出:[0.1, 0.8, 0.3, ...] (只是数字数组)
🤖 RAG框架的作用:
输入:"苹果的营养价值是什么?"
处理:
- 向量化问题 → [0.2, 0.7, 0.4, ...]
- 搜索相似文档 → 找到"水果营养成分表.pdf"
- 提取相关内容 → "苹果含维生素C..."
- 构建提示词 → "基于以下信息回答:苹果含维生素C...问题:苹果的营养价值?"
- 调用聊天模型 → 生成完整答案
输出:完整的、基于知识库的回答
🏗️ LangChain4j是什么?
LangChain4j = AI应用开发框架
不只是RAG,而是完整的AI应用构建工具包
java
// LangChain4j提供的能力:
┌─────────────────────────────────────────────────────────┐
│ 🎯 AI应用开发框架 (LangChain4j) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 💬 聊天功能 │ │
│ │ - ChatLanguageModel │ │
│ │ - 对话历史管理 │ │
│ │ - 流式响应 │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 📚 RAG功能 │ │
│ │ - EmbeddingModel (向量化) │ │
│ │ - EmbeddingStore (向量存储) │ │
│ │ - ContentRetriever (内容检索) │ │
│ │ - RetrievalAugmentor (检索增强) │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 🔧 工具调用 │ │
│ │ - Function Calling │ │
│ │ - Agent功能 │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 🎨 其他功能 │ │
│ │ - 图像处理 │ │
│ │ - 文档解析 │ │
│ │ - 提示词模板 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
🎯 HCMS项目中的实际分工
让我看看你刚才查看的代码,这里有关键信息:
java
// 从你查看的EmbeddingHandler.java代码可以看到:
/**
- 默认分段长度
*/
private static final int DEFAULT_SEGMENT_SIZE = 1000;
/**
- 默认分段重叠长度
*/
private static final int DEFAULT_OVERLAP_SIZE = 50;
/**
- 向量存储元数据:knowledgeId
*/
public static final String EMBED_STORE_METADATA_KNOWLEDGEID = "knowledgeId";
这些都是RAG功能的核心配置!
具体分工:
1. Ollama的职责:
bash
只负责模型推理
curl http://10.86.40.116:11434/api/generate \
-d '{"model": "qwen2:1.5b", "prompt": "你好"}'
curl http://10.86.40.116:11434/api/embeddings \
-d '{"model": "nomic-embed-text", "prompt": "苹果"}'
2. LangChain4j的职责:
java
// 提供统一的编程接口
EmbeddingModel embeddingModel = OllamaEmbeddingModel.builder()
.baseUrl("http://10.86.40.116:11434") // 连接到Ollama
.modelName("nomic-embed-text") // 使用Ollama的模型
.build();
// 但LangChain4j负责:
// - 文档分块 (DocumentSplitters)
// - 向量存储 (PgVectorEmbeddingStore)
// - 相似度搜索 (EmbeddingSearchRequest)
// - 内容检索 (ContentRetriever)
3. HCMS的职责:
java
// EmbeddingHandler.java负责:
// - 业务逻辑编排
// - 知识库管理
// - 文档处理流程
// - RAG检索集成到聊天
💡 总结:谁负责什么?
📋 完整RAG流程的分工:
- 📄 文档上传 → HCMS前端
- 📝 文档解析 → HCMS后端 (Apache Tika)
- ✂️ 文档分块 → LangChain4j (DocumentSplitters)
- 🔢 向量化 → LangChain4j接口 + Ollama模型 (nomic-embed-text)
- 💾 向量存储 → LangChain4j (PgVectorEmbeddingStore) + PostgreSQL
- 🔍 相似度搜索 → LangChain4j + pgvector
- 📚 内容检索 → LangChain4j (ContentRetriever)
- 🤖 答案生成 → LangChain4j接口 + Ollama模型 (qwen2:1.5b)
- 🌊 流式返回 → HCMS后端 (SSE)
关键理解:
- Ollama: 只是AI模型的运行环境,提供API
- nomic-embed-text: 只是一个向量化模型,不是RAG
- LangChain4j: 完整的AI应用框架,包含RAG能力
- HCMS: 业务应用,使用LangChain4j构建RAG功能
所以LangChain4j不只是RAG框架,而是包含RAG功能的完整AI应用开发框架! 🎯
这样解释清楚了吗?

浙公网安备 33010602011771号