RAG实战5-自定义prompt

这篇具有很好参考价值的文章主要介绍了RAG实战5-自定义prompt。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RAG实战5-自定义prompt

在阅读本文之前,先阅读RAG实战4。在RAG实战4中我们分析了LlamaIndex中RAG的执行过程,同时留下了一个尚待解决的问题:LlamaIndex中提供的prompt template都是英文的,该如何使用中文的prompt template呢?

直接看以下代码:

import logging
import sys
import torch
from llama_index.core import PromptTemplate, Settings, StorageContext, load_index_from_storage
from llama_index.core.callbacks import LlamaDebugHandler, CallbackManager
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.huggingface import HuggingFaceLLM

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


# 定义system prompt
SYSTEM_PROMPT = """你是一个医疗人工智能助手。"""
query_wrapper_prompt = PromptTemplate(
    "[INST]<<SYS>>\n" + SYSTEM_PROMPT + "<</SYS>>\n\n{query_str}[/INST] "
)

# 定义qa prompt
qa_prompt_tmpl_str = (
    "上下文信息如下。\n"
    "---------------------\n"
    "{context_str}\n"
    "---------------------\n"
    "请根据上下文信息而不是先验知识来回答以下的查询。"
    "作为一个医疗人工智能助手,你的回答要尽可能严谨。\n"
    "Query: {query_str}\n"
    "Answer: "
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)

# 定义refine prompt
refine_prompt_tmpl_str = (
    "原始查询如下:{query_str}"
    "我们提供了现有答案:{existing_answer}"
    "我们有机会通过下面的更多上下文来完善现有答案(仅在需要时)。"
    "------------"
    "{context_msg}"
    "------------"
    "考虑到新的上下文,优化原始答案以更好地回答查询。 如果上下文没有用,请返回原始答案。"
    "Refined Answer:"
)
refine_prompt_tmpl = PromptTemplate(refine_prompt_tmpl_str)

# 使用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

# 使用LlamaDebugHandler构建事件回溯器,以追踪LlamaIndex执行过程中发生的事件
llama_debug = LlamaDebugHandler(print_trace_on_end=True)
callback_manager = CallbackManager([llama_debug])
Settings.callback_manager = callback_manager

# 使用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)

# 输出查询引擎中所有的prompt类型
prompts_dict = query_engine.get_prompts()
print(list(prompts_dict.keys()))

# 更新查询引擎中的prompt template
query_engine.update_prompts(
    {"response_synthesizer:text_qa_template": qa_prompt_tmpl,
     "response_synthesizer:refine_template": refine_prompt_tmpl}
)

# 查询获得答案
response = query_engine.query("不耐疲劳,口燥、咽干可能是哪些证候?")
print(response)

# 输出formatted_prompt
event_pairs = llama_debug.get_llm_inputs_outputs()
print(event_pairs[0][1].payload["formatted_prompt"])

先看print(list(prompts_dict.keys()))这行代码的输出:

['response_synthesizer:text_qa_template', 'response_synthesizer:refine_template']

这表明我们使用的查询引擎中包含了两种类型的prompt template,一种是问答模板(text_qa_template),一种是重写模板(refine_template)。需要哪些类型的template取决于我们使用什么样的响应合成器(response_synthesizer)。在RAG实战4我们曾提到过,默认的响应合成器是compact,其将文本集中在一起,简化了refine的步骤。因此这里我们只需要修改text_qa_template即可。在上面的代码中,为了演示,我们同样修改了refine_template,尽管这不是必要的。

query_engine.update_prompts(...)将我们在前面定义的qa_prompt_tmpl和refine_prompt_tmpl更新到查询引擎中。

大模型经过RAG的响应如下:

从中医临床的角度来看,不耐疲劳、口燥、咽干的症状可能与津液亏耗证(津液亏耗证或液干热结证)相关。津液亏耗证表现为口干、唇裂、鼻燥、皮肤干燥,以及口渴、干咳等症状,而津液不足证或津亏热结证也包括这些特征。然而,具体诊断还需结合其他临床表现和脉象分析,因为中医强调四诊合参。如果伴有发热、无汗、头痛或肢体酸痛,可能指向燥干清窍证或者津伤燥热证。建议患者到中医诊所详细咨询。

同时,我们可以使用RAG实战4的追踪技术看一下实际形成的prompt(print(event_pairs[0][1].payload["formatted_prompt"])):文章来源地址https://www.toymoban.com/news/detail-838524.html

[INST]<<SYS>>
你是一个医疗人工智能助手。<</SYS>>

上下文信息如下。
---------------------
file_path: document/中医临床诊疗术语证候.txt

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

4.6.1.

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

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

4.6.3.2
    津亏热结证  syndrome/pattern of fluid depletion and heat binding
    液干热结证
    因津液亏虚,热邪内结所致。

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

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

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

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

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

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

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

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

4.6.3.
---------------------
请根据上下文信息而不是先验知识来回答以下的查询。作为一个医疗人工智能助手,你的回答要尽可能严谨。
Query: 不耐疲劳,口燥、咽干可能是哪些证候?
Answer: [/INST] 

到了这里,关于RAG实战5-自定义prompt的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RAG实战4-RAG过程中发生了什么?

    在RAG实战3中我们介绍了如何追踪哪些文档片段被用于检索增强生成,但我们仍不知道RAG过程中到底发生了什么,为什么大模型能够根据检索出的文档片段进行回复?本文将用一个简单的例子来解释前面的问题。 在阅读本文之前,请先阅读RAG实战3。 先执行以下代码: 输出很

    2024年03月09日
    浏览(46)
  • LLM之RAG实战(二十七)| 如何评估RAG系统

           有没有想过今天的一些应用程序是如何看起来几乎神奇地智能的?这种魔力很大一部分来自于一种叫做RAG和LLM的东西。把RAG(Retrieval Augmented Generation)想象成人工智能世界里聪明的书呆子,它会挖掘大量信息,准确地找到你的问题所需要的信息。然后,还有LLM(大型

    2024年02月22日
    浏览(32)
  • RAG应用开发实战(01)-RAG应用框架和解析器

    第三方的工具去对文件解析拆分,去将我们的文件内容给提取出来,并将我们的文档内容去拆分成一个小的chunk。常见的PDF word mark down, JSON、HTML。都可以有很好的一些模块去把这些文件去进行一个东西去提取。 支持丰富的文档类型 每种文档多样化选择 与开源框架无缝集成

    2024年04月11日
    浏览(45)
  • RAG实战 7 - 使用llama_index实现多模态RAG

    转载自:LLM之RAG实战(七)| 使用llama_index实现多模态RAG https://mp.weixin.qq.com/s/FVF09cEO5nUipcL9R8ydXQ OpenAI开发日上最令人兴奋的发布之一是GPT-4V API(https://platform.openai.com/docs/guides/vision)的发布。GPT-4V是一个多模态模型,可以接收文本/图像,并可以输出文本响应。最近还有一些其他

    2024年01月17日
    浏览(35)
  • RAG:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 论文阅读

    2020 NeuralPS 文章地址:https://arxiv.org/abs/2005.11401 源码地址:GitHub - huggingface/transformers: 🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.       - 142 RAG 目录 0、背景 1、摘要 2、导言       3、结论 4、模型 5、实验 6、与REALM比较 7、想法         Language Mod

    2024年02月05日
    浏览(37)
  • LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

           人工智能和大型语言模型领域正在迅速发展。一年前,没有人使用LLM来提高生产力。时至今日,很难想象我们大多数人或多或少都在使用LLM提供服务,从个人助手到文生图场景。由于大量的研究和兴趣,LLM每天都在变得越来越好、越来越聪明。不仅如此,他们的理解

    2024年02月02日
    浏览(47)
  • LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline

           近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的方法。本文,我们将深入研究使用 transformer库 、 Llama-2模型 、 PgVector数据库 和

    2024年01月21日
    浏览(45)
  • RAG实战2-如何使用LlamaIndex存储和读取向量

    本文是检索增强生成(Retrieval-augmented Generation,RAG)实战1-基于LlamaIndex构建第一个RAG应用的续集,在阅读本文之前请先阅读前篇。 在前篇中,我们介绍了如何使用LlamaIndex构建一个非常简单的RAG应用,初步了解了LlamaIndex构建RAG应用的大体流程。在运行前篇的程序时,我们会发现两

    2024年03月09日
    浏览(48)
  • 论文阅读:Meta-Prompting

    元提示:任务-不可知论框架 强化 语言模型 “不可知论”,通常用来描述可以应用于多种不同任务的模型,指模型并非为解决特定任务而设计 github.com 摘要: 元提示引导 LM 将复杂的任务分解为更小、更易于管理的子任务,子任务由同一 LM 的不同“专家”实例处理,每个实例

    2024年04月12日
    浏览(31)
  • TS版LangChain实战:基于文档的增强检索(RAG)

    LangChain是一个以 LLM (大语言模型)模型为核心的开发框架,LangChain的主要特性: 可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等 允许语言模型与其环境交互 封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包