书生蒲语大模型---茴香豆知识库

课程视频链接:

茴香豆:搭建你的 RAG 智能助理_哔哩哔哩_bilibili

课程文档:

https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md

茴香豆RAG 助手解决的问题:

1. 知识更新太快,语料太大、难以处理对LLM是很大的挑战,RAG本地知识库可以很好的解决这些问题。RAG不需要经过训练,就可以很好的回答特定的问题。

2. RAG 检索增强生成,通过利用外部知识库来增加LLM的能力。

3. RAG 很好的解决了LLMS处理只是密集型任务是遇到的挑战。可以提供准确的回答,降低成本,实现外部记忆。

4. RAG解决LLM的幻觉、过时的知识和缺乏透明和可追溯的推理过程

RAG工作原理:

1. indexing(索引):将知识源(文档、网页等)分割成chunk,编码成向量存储在向量数据库中。

2. Retrieval(检索):将接受到的用户的问题编码成向量,并在向量数据库中查找与之相关的文档快(trunk)

3. Generation(生成):将检索到的文档块和原始问题一起作为提示(prompt)输入到LLM中,生成最终的回答

向量数据库(Vector-DB):

数据存储:将文本或其他数据通过预训练的模型转换为固定长度的向量表示,这些向量能够捕捉文本的语义信息。

相似性检索:根据用户提供的查询向量,使用向量数据库快速查找出最相关的向量的过程。通过计算余弦相似度来完成。检索结果根据相似度排序,最相关的文档将被用于后继的文本生成。

向量表示的优化:通过使用更高级的技术来支持大规模的向量搜索。

RAG流程示例:

RAG优化方法:

嵌入式优化(embeding optimization):结合稀疏和密集检索;多任务

索引优化(indexing optimization): 细粒度分割;元数据

查询优化(Query optimization): 查询扩展、转换;多查询

上下文管理(Context Curation):重排;上下文选择/压缩

迭代检索(Iterative Retrieval):根据初始查询和最近生成的文本进行重复的搜索

递归检索(recursive retrieval):迭代细化搜索查询;链式推理指导检索过程

自适应检索(Adaptive Retrieval):Flare,Self-RAG;使用LLMs主动决定检索的最佳时机和内容

LLM微调(Fine-tuning):检索微调;生成微调;双重微调

RAG vs Fine-tuning

RAG的优势:

  • 非参数记忆,利用外部知识库提供实时更新的信息。
  • 能够处理知识密集型的任务,提供准确的事实性回答。
  • 通过检索增强,可以生成更多样化的内容。

RAG的适用场景:

  • 适合结合最新的信息和实时数据的任务:开放式问答,实时新闻等

RAG的优势:

  • 动态处理知识更新,处理长尾知识问题

RAG的局限:

  • 依赖于外部知识库的质量和覆盖范围,依赖大模型的能力

Fine-Tuning:

  • 参数记忆,通过在特定任务数据上训练,模型可以更好的适应该任务。
  • 通过需要大量标注数据来进行有效的微调。
  • 微调后的模型可能会导致泛化能力的下降

Fine-tuning使用场景:

  • 适用于数据可用且需要模型高度专业化的任务,例如特定领域的文本分类、情感分析、文本生成。

Fine-tuning优势:

  • 模型性能针对特定任务优化

Fine-tuning局限:需要大量标注数据,对新任务适应较差

茴香豆介绍

茴香豆是书生蒲语团队开发的基于LLM的领域知识助手。

  • 转为即时通讯工具中的群聊场景优化的工作流,提供及时准确的技术支持和自动回答服务。
  • 通过应用检索增强生成技术,能够理解和高效准确的回应与特定知识领域相关的复杂查询。

茴香豆的核心特性:

  • 开源免费:免费商用
  • 高效准确:专为群聊优化
  • 领域知识:应用RAG技术,专业知识快速获取
  • 部署成本低:无需额外训练,可以利用云端模型API,本地算力需求少
  • 安全:保护数据和隐私
  • 扩展性强: 兼容多种IM软件,支持多种开源LLMS和云端API

茴香豆的构建:

1. 知识库:MD、PDF,TXT,PPT,DOCX

2. 前端:wecat,飞书等

3. llm:本地(InternLLM2,千问)或远端API(KIMI,chatgpt等)

4. 豆哥

茴香豆的工作流:

亮点:拒答工作流

豆哥的能力:

多来源检索:向量数据库、网络搜索结果、知识图谱

混合大模型:本地和远程

多重评分:回答有效、避免信息泛滥

安全检查:多种手段,确保合规

作业:

1. 在茴香豆 Web 版中创建自己领域的知识问答助手

上传文档

提问

  1. 内容提炼和汇总功能很棒

2. 文档知识点挖掘

3. 回答有理有据

4. 没有出现幻觉,因为知识库没有包含博通和VM的关系,所以回答还算满意

5. 辅助学习针对有用

茴香豆搭建:

1.1 配置基础环境

进入开发机后,从官方环境复制运行 InternLM 的基础环境,命名为 InternLM2_Huixiangdou,在命令行模式下运行

studio-conda -o internlm-base -t InternLM2_Huixiangdou

安装成功显示

复制完成后,在本地查看环境

运行 conda 命令,激活 InternLM2_Huixiangdou python 虚拟环境:

1.3 下载安装茴香豆

安装茴香豆运行所需依赖

pip install -r requirements.txt

pip install protobuf==4.25.3 accelerate==0.28.0 aiohttp==3.9.3 auto-gptq==0.7.1 bcembedding==0.1.3 beautifulsoup4==4.8.2 einops==0.7.0 faiss-gpu==1.7.2 langchain==0.1.14 loguru==0.7.2 lxml_html_clean==0.1.0 openai==1.16.1 openpyxl==3.1.2 pandas==2.2.1 pydantic==2.6.4 pymupdf==1.24.1 python-docx==1.1.0 pytoml==0.1.21 readability-lxml==0.8.1 redis==5.0.3 requests==2.31.0 scikit-learn==1.4.1.post1 sentence_transformers==2.2.2 textract==1.6.5 tiktoken==0.6.0 transformers==4.39.3 transformers_stream_generator==0.0.5 unstructured==0.11.2

从茴香豆官方仓库下载茴香豆

cd /root
# 下载 repo
git clone https://github.com/internlm/huixiangdou && cd huixiangdou
git checkout 447c6f7e68a1657fce1c4f7c740ea1700bde0440
 

2 使用茴香豆搭建 RAG 助手

2.1 修改配置文件

用已下载模型的路径替换 /root/huixiangdou/config.ini 文件中的默认模型,需要修改 3 处模型地址,分别是:

命令行输入下面的命令,修改用于向量数据库和词嵌入的模型

sed -i '6s#.*#embedding_model_path = "/root/models/bce-embedding-base_v1"#' /root/huixiangdou/config.ini

用于检索的重排序模型

2.2 创建知识库

本示例中,使用 InternLM 的 Huixiangdou 文档作为新增知识数据检索来源,在不重新训练的情况下,打造一个 Huixiangdou 技术问答助手。

首先,下载 Huixiangdou 语料:

cd /root/huixiangdou && mkdir repodir

git clone https://github.com/internlm/huixiangdou --depth=1 repodir/huixiangdou

提取知识库特征,创建向量数据库。数据库向量化的过程应用到了 LangChain 的相关模块,默认嵌入和重排序模型调用的网易 BCE 双语模型,如果没有在 config.ini 文件中指定本地模型路径,茴香豆将自动从 HuggingFace 拉取默认模型。

除了语料知识的向量数据库,茴香豆建立接受和拒答两个向量数据库,用来在检索的过程中更加精确的判断提问的相关性,这两个数据库的来源分别是:

  • 接受问题列表,希望茴香豆助手回答的示例问题
    • 存储在 huixiangdou/resource/good_questions.json 中
  • 拒绝问题列表,希望茴香豆助手拒答的示例问题
    • 存储在 huixiangdou/resource/bad_questions.json 中
    • 其中多为技术无关的主题或闲聊
    • 如:"nihui 是谁", "具体在哪些位置进行修改?", "你是谁?", "1+1"

运行下面的命令,增加茴香豆相关的问题到接受问题示例中:

再创建一个测试用的问询列表,用来测试拒答流程是否起效:

cd /root/huixiangdou

echo '[
"huixiangdou 是什么?",
"你好,介绍下自己"
]' > ./test_queries.json

在确定好语料来源后,运行下面的命令,创建 RAG 检索过程中使用的向量数据库:

# 创建向量数据库存储目录
cd /root/huixiangdou && mkdir workdir 

# 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir
python3 -m huixiangdou.service.feature_store --sample ./test_queries.json

2.3 运行茴香豆知识助手

我们已经提取了知识库特征,并创建了对应的向量数据库。现在,让我们来测试一下效果:

命令行运行:

# 填入问题
sed -i '74s/.*/    queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "今天天气怎么样?"]/' /root/huixiangdou/huixiangdou/main.py

# 运行茴香豆
cd /root/huixiangdou/
python3 -m huixiangdou.main --standalone

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值