首页 > 其他分享 >RAG实战3-如何追踪哪些文档片段被用于检索增强生成

RAG实战3-如何追踪哪些文档片段被用于检索增强生成

时间:2024-03-07 09:24:00浏览次数:28  
标签:RAG 片段 index 10 文档 证候 query 津液

RAG实战3-如何追踪哪些文档片段被用于检索增强生成

本文是RAG实战2-如何使用LlamaIndex存储和读取embedding向量的续集,在阅读本文之前请先阅读前篇。

在前篇中,我们介绍了如何使用LlamaIndex存储和读取embedding向量。在本文中,我们将介绍在LlamaIndex中如何获得被用于检索增强生成的文档片段。

下面的代码展示了如何使用LlamaIndex追踪哪些文档片段被用于检索增强生成:

import logging
import sys
import torch
from llama_index.core import PromptTemplate, Settings, StorageContext, load_index_from_storage, QueryBundle
from llama_index.core.schema import MetadataMode
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM

# 定义日志
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

# 定义system prompt
SYSTEM_PROMPT = """You are a helpful AI assistant."""
query_wrapper_prompt = PromptTemplate(
    "[INST]<<SYS>>\n" + SYSTEM_PROMPT + "<</SYS>>\n\n{query_str}[/INST] "
)

# 使用llama-index创建本地大模型
llm = HuggingFaceLLM(
    context_window=4096,
    max_new_tokens=2048,
    generate_kwargs={"temperature": 0.0, "do_sample": False},
    query_wrapper_prompt=query_wrapper_prompt,
    tokenizer_name='/yldm0226/models/Qwen1.5-14B-Chat',
    model_name='/yldm0226/models/Qwen1.5-14B-Chat',
    device_map="auto",
    model_kwargs={"torch_dtype": torch.float16},
)
Settings.llm = llm

# 使用llama-index-embeddings-huggingface构建本地embedding模型
Settings.embed_model = HuggingFaceEmbedding(
    model_name="/yldm0226/RAG/BAAI/bge-base-zh-v1.5"
)

# 从存储文件中读取embedding向量和向量索引
storage_context = StorageContext.from_defaults(persist_dir="doc_emb")
index = load_index_from_storage(storage_context)
# 构建查询引擎
query_engine = index.as_query_engine(similarity_top_k=5)
# 获取我们抽取出的相似度前五的片段
contexts = query_engine.retrieve(QueryBundle("不耐疲劳,口燥、咽干可能是哪些证候?"))
print('-'*10 + 'ref' + '-'*10)
for i, context in enumerate(contexts):
    print('*'*10 + f'chunk {i} start' + '*'*10)
    content = context.node.get_content(metadata_mode=MetadataMode.LLM)
    print(content)
    print('*' * 10 + f'chunk {i} end' + '*' * 10)
print('-'*10 + 'ref' + '-'*10)
# 查询获得答案
response = query_engine.query("不耐疲劳,口燥、咽干可能是哪些证候?")
print(response)

运行代码,可以得到query的输出为:

从提供的中医临床证候信息来看,口燥、咽干的症状可能与以下证候相关:

1. 津液不足证:由于津液生成不足或者体内燥热导致,表现为口眼喉鼻干燥,咽干是其中的一个症状。

2. 津亏热结证:津液亏虚加上热邪内结,也可能出现口燥和咽干。

3. 津液亏涸证:严重的津液亏损可能导致口唇干燥、咽部干燥,伴随其他严重脱水症状。

4. 燥干清窍证:气候干燥或体质原因引起的津液缺乏,口鼻咽喉干燥也是其特征。

5. 津伤化燥证:燥热内蕴或内热化燥损伤津液,也会出现口燥、频饮但不解渴的现象。

因此,这些证候都有可能与不耐疲劳和口燥、咽干的症状相符合,需要结合其他临床表现来确定具体的证候类型。建议在中医诊断中由专业医生根据全人情况判断。

对于"不耐疲劳,口燥、咽干可能是哪些证候?"这个查询,其相似度前五的片段如下:

片段序号 片段信息
1 file_path: document/中医临床诊疗术语证候.txt

4.6.1.1
津液不足证 syndrome/pattern of fluid and humor insufficiency
津亏证
因津液生成不足,或嗜食辛辣,蕴热化燥,邪热灼损津液所致。临床以口眼喉鼻及皮肤等干燥,大便干结,小便短少,舌质偏红而干,脉细数等为特征的证候。

4.6.1.
2 file_path: document/中医临床诊疗术语证候.txt

临床以口干、舌燥,频饮而不解其渴,食多、善饥,夜尿频多,逐渐消瘦,舌质红,舌苔薄黄或少,脉弦细或滑数,伴见皮肤干燥,四肢乏力,大便干结等为特征的证候。

4.6.3.2
津亏热结证 syndrome/pattern of fluid depletion and heat binding
液干热结证
因津液亏虚,热邪内结所致。
3 file_path: document/中医临床诊疗术语证候.txt

临床以口眼喉鼻及皮肤等干燥,大便干结,小便短少,舌质偏红而干,脉细数等为特征的证候。

4.6.1.2
津液亏涸证 syndrome/pattern of fluid and humor scantiness
津液亏耗证
津液干枯证
因津液亏损,形体官窍失养所致。临床以口干、唇裂,鼻燥无涕,皮肤干瘪,目陷、螺瘪,甚则肌肤甲错,舌质红而少津,舌中裂,脉细或数,可伴见口渴、欲饮,干咳,目涩,大便干,小便少等为特征的证候。
4 file_path: document/中医临床诊疗术语证候.txt

临床以鼻咽干涩或痛,口唇燥干,舌质红,舌苔白或燥,脉浮或微数,伴见发热、无汗,头痛或肢节酸痛等为特征的证候。

3.6.3.2
燥干清窍证 syndrome/pattern of dryness harassing the upper orifices
因气候或环境干燥,津液耗损,清窍失濡所致。临床以口鼻、咽喉干燥,两眼干涩,少泪、少涕、少津、甚则衄血,舌质瘦小、舌苔干而少津,脉细等为特征的证候。
5 file_path: document/中医临床诊疗术语证候.txt

6.3.1
津伤化燥证 syndrome/pattern of fluid damage transforming into dryness
津伤燥热证
因燥热内蕴,或内热化燥,伤津耗液所致。临床以口干、舌燥,频饮而不解其渴,食多、善饥,夜尿频多,逐渐消瘦,舌质红,舌苔薄黄或少,脉弦细或滑数,伴见皮肤干燥,四肢乏力,大便干结等为特征的证候。

4.6.3.

可以看出,我们得到的query的输出中的证候都是这几个片段中的,大模型也确实根据我们检索出的片段进行了回复。

片段1和片段5的结尾存在多余的章节号,这主要与我们使用的embedding模型和设置的chunk_size有关。我们可以通过追踪观察这些被用于检索增强生成的文档片段来调整chunk_size的值,以让embedding模型切分出的片段更合理,提高RAG系统的表现。

如果想追踪更多的检索片段,可以提高similarity_top_k的值。

如果想追踪片段具体的相似度得分(Similarity Score)的值,可以将log中的level设置为DEBUG级别。

标签:RAG,片段,index,10,文档,证候,query,津液
From: https://www.cnblogs.com/yourenbo/p/18058145

相关文章

  • Linux `chown` 命令的详细使用说明文档概要
    chown命令在Linux中用于更改文件或目录的所有者和/或所属组。以下是chown命令的详细使用说明文档:chown命令简介chown命令允许系统管理员或文件的所有者更改文件或目录的所有者和/或所属组。这是一个强大的命令,需要谨慎使用,因为不正确的使用可能导致系统安全性或文件访问......
  • (22)Lazarus退出时保存相关对象值为Ini和XML格式(IniPropStorage1和XMLPropStorage1)
    参考自带例子C:\lazarus\examples\propstorage1]放一个IniPropStorage1到界面上,将它的IniFileName设置为config.ini 2]类似地,拖一个XMLPropStorage1到界面上,将它的FileName设置为config.xml 3]添加要保存的属性 ......
  • k8s StorageClass(NFS)
    nfs服务器自行一键安装1:创建ServiceAccount,为nfs-client授权。nfs-client-sa.yaml---apiVersion:v1kind:ServiceAccountmetadata:name:nfs-client-provisioner---apiVersion:rbac.authorization.k8s.io/v1kind:ClusterRolemetadata:name:nfs-client-provis......
  • nginx 根据useragent 标识特征过滤流量
    配置文件如下:http{map$http_user_agent$is_allowed_user_agent{default0;"~*Chrome/101.0.4951.64"1;}server{listen9999;server_nameyour_domain.com;location/{if($is_allo......
  • mysql报错:SQL 错误 [1030] [HY000]: Got error 100 - 'InnoDB error' from storage en
    在mysql中进行alter时,报错:SQL错误[1030][HY000]:Goterror100-'InnoDBerror'fromstorageengine 原因:在配置my.cnf或my.ini里面innodb_force_recovery参数的值大于0,它默认值为0,如果大于0,innodb就会禁用insert、update、delete、alter语句。解决方式:在配置my.cn......
  • 调度器56—1-deadline文档翻译
    注:本文翻译自msm-5.4/Documentation/scheduler/sched-deadline.rst=======================Deadline任务调度=======================..内容0.警告1.概述2.调度算法2.1主要算法2.2带宽回收3.调度实时任务3.1定义3.2单处理器系统的可调度性分析3.3多处理器系统的可调......
  • Django中的Swagger文档库--drf-spectacular
    在用django开发后端接口的时候,通常会面临写接口文档的问题,尤其项目大了之后,写文档就更加头疼了,如果能够在写完代码后,自动生成接口文档,那该多好啊所以,咱们这里要介绍一个比较厉害的库drf-spectacular这个库能够自动生成OpenApi3.0的接口文档,并给出目前比较流行的swaggerUI的......
  • JAVA基础--JavaDos生成文档
    JavaDos生成文档法一:通过命令行生成信息输入(例子)/***@authorAAA*@version1.0*@since1.8*/publicclassDos{Stringname;/***@authorAAA*@paramname*@return*@throwsException*///方法前输入/**则会自......
  • 云原生基础设施代码化-terragrunt处理
    Terragrunt是什么?Terragrunt是一个基于Terraform的开源工具,它通过向Terraform添加一些额外的功能来帮助管理和组织Terraform代码。它提供了许多功能,包括:DRY(Don’tRepeatYourself):使用Terragrunt可以减少Terraform代码冗余。例如,您可以将共享的配置块抽象为公共模块,然后在需......
  • Vue3学习(二十一)- 文档管理页面布局修改
    写在前面按照国际惯例,要先聊下生活,吐槽一番,今天是2月14日,也是下午听老妈说,我才知道!现在真的是对日期节日已经毫无概念可言,只知道星期几。现在已经觉得写博客也好,学习文章也罢,和写日记一样,已经融入到我的生活中,或者更确切的说,变成生活的一部分了。饭后和老妈闲聊了几句后,我发......