当前位置: 首页 > news >正文

大模型架构记录4-文档切分 (chunks构建)

chunks: 块

trunks : 树干

“RAG”通常指 检索增强生成(Retrieval-Augmented Generation)

主要框架:用户提query,找到和它相关的,先把问题转换为向量,和向量数据库的数据做比较,检索相似的向量,返回 对应向量的原始文本,构建prompt,给模型回答问题

一 文档交互

1.1 生成和检索的区别

RAG”通常指 检索增强生成Retrieval-Augmented Generation

二 金融智能客服系统

2.1 传统架构 (通过检索的方式

1 提前设计FAQ库(业务人员整理)

<q, a> <q, a><q, a>

2 用户提问,和FAQ 问题做比较,看哪个问题相近,就使用这个答案

3 好处,结果可控。

2.2 传统问答方式2 (使用生成的方式)

1 提前设计FAQ库(业务人员整理)

<q, a> <q, a><q, a>

2 训练一个模型,问题做输入,答案做输出,训练模型 

3 使用模型,将问题作为模型的输入,使用模型的输出作为结果。

4 结果不可控,准确率比较低。

传统方式通常使用方式一 

2.3 检索 + 生成

大模型 问答系统 2.0

1 不用维护知识库,从文档抽出来关键问题

2 直接把原始的知识库就行,【doc, PDF, EXCEL, TXT 】都可以做知识库

3 用户提问,先做检索把相关文档提取出来,答案可能在文档里面

4 构建prompt,检索结果放在prompt 【上下文】, query【Input】 也放在prompt 里面,还要历史聊天记录 【上下文】,统一放入模型做输入得到一个response. 

三 基于大模型技术的Agent 框架搭建

1 技术栈 

项目架构梳理

1 用户提出 query(string)

2 构造知识库,企业知识【txt, pdf, html, doc, excel, ppt】 做转换

2.1 把文章做trunk【树干】,不能把整个文章放到prompt, 拆分章节,把适合的章节放进去就行。

文档 拆分-> Trunk ,放入【知识库】,需要做一定的数据清洗,特殊符号清洗啥的

2.2 把数据转换为向量,用于和query 比较

3 用户提 query , 在知识库找出对应的Trunk,一起放入prompt中,【基于如下的上下文回复用户的上下文】,然后进模型,然后回复。

2 向量数据库的搭建

1 trunk 和query 比较,比较两个string 做比较,把string 转换为向量。

用户提query,找到和它相关的,先把问题转换为向量,和向量数据库的数据做比较,检索相似的向量,返回 对应向量的原始文本,构建prompt

prompt {instructing, context,inputs} -> model = response 

2 相似度怎么计算? 

(vec1, vec2) -> 相似度

向量数据库,解决搜索效率的问题。

难点:

1 怎么比较query 和 trunk 的向量?

2 怎么做文档切割?

3 怎么转换为向量数据? 

3 怎么解决 hallucination(乱说)

4 拆分文本

1 最好按段落进行区分

2 fixed + 语义做分割【递归方法,来自 langchain】

后面的方法需要跑机器学习模型,比较慢,常见使用第一和第二种,直接拆分句子和字符数。

4.1 split  by sentence

每个块都是完整的一句话。

4.2 fixed length chunks 

4.3 chunks with overlapping window

4.4 recursiveCharacterTextSplitter from langchain

fixed + 语义做分割

5 拆分中文

四 文本向量化

4.1 opai embedding (向量化模型)

 

4.2 相似度计算

4.3 向量数据库 qdrant

# 注意镜像全称为 qdrant/qdrant
docker pull qdrant/qdrant

# 完整命令(Windows/Linux通用)
docker run -d \
  -p 6333:6333 \          # HTTP API端口
  -p 6334:6334 \          # gRPC端口(可选但推荐)
  -v D:/qdrant_data:/qdrant/storage \  # 数据持久化路径
  qdrant/qdrant

 


http://www.mrgr.cn/news/94135.html

相关文章:

  • Fedora41安装MySQL8.4.4
  • 笔记六:链表介绍与模拟实现
  • 【leetcode hot 100 24】两两交换链表中的节点
  • Visual C++ 6.0(完整绿色版)安装设置
  • pytorch retain_grad vs requires_grad
  • 项目实操分享:一个基于 Flask 的音乐生成系统,能够根据用户指定的参数自动生成 MIDI 音乐并转换为音频文件
  • git本地仓库链接远程仓库
  • go 标准库包学习笔记
  • Rust 之一 基本环境搭建、各组件工具的文档、源码、配置
  • Burpsuite使用笔记
  • 【大模型统一集成项目】让 AI 聊天更丝滑:SSE 实现流式对话!
  • 【大模型统一集成项目】让 AI 聊天更丝滑:WebSocket 实现流式对话!
  • Android实现Socket通信
  • 利用selenium调用豆包进行自动化问答以及信息提取
  • tcc编译器教程6 进一步学习编译gmake源代码
  • go函数详解
  • 【Linux】线程池、单例模式、死锁
  • JVM内存结构笔记01-运行时数据区域
  • golang 高性能的 MySQL 数据导出
  • 下载以后各个软件或者服务器的启动与关闭