关于大模型应用的相关知识

🧠 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的用户管理功能怎么使用?"

  1. nomic-embed-text: 将问题转换为向量
  2. 数据库搜索: 找到相关的用户手册片段
  3. 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:

  1. 🔍 搜索知识库 → 找到更新日志
  2. 📖 阅读相关文档 → 获取具体信息
  3. 💬 生成回答 → "根据更新日志,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框架的作用:
输入:"苹果的营养价值是什么?"
处理:

  1. 向量化问题 → [0.2, 0.7, 0.4, ...]
  2. 搜索相似文档 → 找到"水果营养成分表.pdf"
  3. 提取相关内容 → "苹果含维生素C..."
  4. 构建提示词 → "基于以下信息回答:苹果含维生素C...问题:苹果的营养价值?"
  5. 调用聊天模型 → 生成完整答案
    输出:完整的、基于知识库的回答

🏗️ 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流程的分工:

  1. 📄 文档上传 → HCMS前端
  2. 📝 文档解析 → HCMS后端 (Apache Tika)
  3. ✂️ 文档分块 → LangChain4j (DocumentSplitters)
  4. 🔢 向量化 → LangChain4j接口 + Ollama模型 (nomic-embed-text)
  5. 💾 向量存储 → LangChain4j (PgVectorEmbeddingStore) + PostgreSQL
  6. 🔍 相似度搜索 → LangChain4j + pgvector
  7. 📚 内容检索 → LangChain4j (ContentRetriever)
  8. 🤖 答案生成 → LangChain4j接口 + Ollama模型 (qwen2:1.5b)
  9. 🌊 流式返回 → HCMS后端 (SSE)

关键理解:

  • Ollama: 只是AI模型的运行环境,提供API
  • nomic-embed-text: 只是一个向量化模型,不是RAG
  • LangChain4j: 完整的AI应用框架,包含RAG能力
  • HCMS: 业务应用,使用LangChain4j构建RAG功能

所以LangChain4j不只是RAG框架,而是包含RAG功能的完整AI应用开发框架! 🎯

这样解释清楚了吗?

posted @ 2025-12-29 11:27  烈酒清茶  阅读(4)  评论(0)    收藏  举报