LlamaIndex框架学习-提示词的几种使用模式

定义自定义提示词

定义自定义提示词就像创建格式字符串一样简单。

from llama_index.core import PromptTemplatetemplate = ("We have provided context information below. \n""---------------------\n""{context_str}""\n---------------------\n""Given this information, please answer the question: {query_str}\n"
)
qa_template = PromptTemplate(template)# you can create text prompt (for completion API)
prompt = qa_template.format(context_str=..., query_str=...)# or easily convert to message prompts (for chat API)
messages = qa_template.format_messages(context_str=..., query_str=...)

注意:您可能会看到对旧版提示子类的引用,例如QuestionAnswerPrompt、RefinePrompt。这些已被弃用(现在是 的类型别名PromptTemplate)。现在您可以直接指定PromptTemplate(template)来构造自定义提示符。但是,在替换默认的问题答案提示符时,您仍必须确保模板字符串包含预期参数变量(例如{context_str}{query_str})。

您还可以从聊天消息中定义模板

from llama_index.core import ChatPromptTemplate
from llama_index.core.llms import ChatMessage, MessageRolemessage_templates = [ChatMessage(content="You are an expert system.", role=MessageRole.SYSTEM),ChatMessage(content="Generate a short story about {topic}",role=MessageRole.USER,),
]
chat_template = ChatPromptTemplate(message_templates=message_templates)# you can create message prompts (for chat API)
messages = chat_template.format_messages(topic=...)# or easily convert to text prompt (for completion API)
prompt = chat_template.format(topic=...)

获取和设置自定义提示词

由于 LlamaIndex 是一个多步骤管道,因此确定要修改的操作并在正确的位置传递自定义提示非常重要。

例如,提示用于响应合成器、检索器、索引构建等;其中一些模块嵌套在其他模块中(合成器嵌套在查询引擎中)。

有关访问/自定义提示的完整详细信息,请参阅本指南。

常用提示

最常用的提示是text_qa_templaterefine_template

  • text_qa_template - 用于使用检索到的节点获取查询的初始答案
  • refine_template - 当检索到的文本不适合单个LLM调用response_mode="compact"(默认)时使用,或者当使用检索多个节点时使用response_mode="refine"。第一个查询的答案作为插入existing_answerLLM 必须根据新上下文更新或重复现有答案。

访问提示

您可以在LlamaIndex中的许多模块上调用get_prompts,以获得模块和嵌套子模块中使用的提示符的扁平列表。

例如,看一下下面的代码片段。

query_engine = index.as_query_engine(response_mode="compact")
prompts_dict = query_engine.get_prompts()
print(list(prompts_dict.keys()))

您可能会取回以下密钥:

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

请注意,提示以其子模块作为前缀“命名空间”。

更新提示

您可以在任何get_prompts使用该update_prompts函数实现的模块上自定义提示。只需传入参数值,其键等于通过 获取的提示字典中的键get_prompts

例如,对于上面的例子,我们可以做以下事情

# shakespeare!
qa_prompt_tmpl_str = ("Context information is below.\n""---------------------\n""{context_str}\n""---------------------\n""Given the context information and not prior knowledge, ""answer the query in the style of a Shakespeare play.\n""Query: {query_str}\n""Answer: "
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)query_engine.update_prompts({"response_synthesizer:text_qa_template": qa_prompt_tmpl}
)

修改查询引擎中使用的提示

对于查询引擎,您还可以在查询时直接传递自定义提示(即针对索引执行查询并合成最终响应)。

还有两种等效的方法来覆盖提示词:

  • 通过高级 API
query_engine = index.as_query_engine(text_qa_template=custom_qa_prompt, refine_template=custom_refine_prompt
)
  • 通过低级组合 API
retriever = index.as_retriever()synth = get_response_synthesizer(text_qa_template=custom_qa_prompt, refine_template=custom_refine_prompt
)query_engine = RetrieverQueryEngine(retriever, response_synthesizer)

上述两种方法是等效的,其中 方法1 本质上是方法 2 的语法糖,隐藏了底层的复杂性。您可能希望使用 方法1 快速修改一些常用参数,并使用 方法2 进行更精细的控制。

有关哪些类使用哪些提示的详细信息,请访问 查询类参考。

请查看参考文档以获取所有提示的完整列表。

修改索引构建中使用的提示

一些索引在构建过程中使用不同类型的提示(注意:最常见的VectorStoreIndexSummaryIndex,不使用任何提示)。

例如,TreeIndex使用摘要提示对节点进行分层总结,KeywordTableIndex使用关键字提取提示提取关键字。

有两种等效方法可以覆盖提示:

  • 通过默认节点构造函数
index = TreeIndex(nodes, summary_template=custom_prompt)
  • 通过文档构造函数。
index = TreeIndex.from_documents(docs, summary_template=custom_prompt)

有关哪个索引使用哪个提示的详细信息,请访问 索引类参考。

高级提示功能

在本节中,我们展示了 LlamaIndex 中的一些高级提示功能。

相关指南:

  • 高级提示
  • 为 RAG 提供快速工程

部分格式化

部分格式化提示,填写一些变量,同时将其他变量留待以后填写。

from llama_index.core import PromptTemplateprompt_tmpl_str = "{foo} {bar}"
prompt_tmpl = PromptTemplate(prompt_tmpl_str)
partial_prompt_tmpl = prompt_tmpl.partial_format(foo="abc")fmt_str = partial_prompt_tmpl.format(bar="def")

模板变量映射

LlamaIndex 提示抽象通常需要某些键。例如,我们的text_qa_prompt 需要 context_str 变量作为上下文和 query_str变量作为用户查询输入。

但是如果您尝试调整字符串模板以用于 LlamaIndex ,更改模板变量可能会很烦人。

相反,定义 template_var_mappings

template_var_mappings = {"context_str": "my_context", "query_str": "my_query"}prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str, template_var_mappings=template_var_mappings
)

函数映射

将函数作为模板变量传递,而不是固定的值。

这非常高级且功能强大;允许您进行动态的少量示例提示等。

以下是一个重新格式化 context_str 的例子。

def format_context_fn(**kwargs):# format context with bullet pointscontext_list = kwargs["context_str"].split("\n\n")fmtted_context = "\n\n".join([f"- {c}" for c in context_list])return fmtted_contextprompt_tmpl = PromptTemplate(qa_prompt_tmpl_str, function_mappings={"context_str": format_context_fn}
)prompt_tmpl.format(context_str="context", query_str="query")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于vue框架的的驾校预约管理系统设计d5tq3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,驾校教练,车辆信息,报名信息,学员信息,考试预约,教学课程,教练评价,考试成绩,练车预约,报修申请,维修信息,课程类型,车辆类型 开题报告内容 基于Vue框架的驾校预约管理系统设计开题报告 一、项目背景与意义 随着驾驶培训行业的快…

shell脚本编写注意细节 ==、=等的区别

文章目录 和的使用主要区别小结 Shell脚本要注意的细节1. 变量引用和空格处理2. [[ ... ]] vs [ ... ]3. 使用-n和-z来检测变量是否为空4. 整数运算和浮点运算5. 避免使用反引号执行命令6. for循环中的命令替换7. 使用trap来清理临时文件8. 避免使用硬编码路径9. 使用-eq、-lt、…

Docker Swarm简介

注意事项 Swarm 模式是用于管理 Docker 守护进程集群的一项高级特性。如果你打算将 Swarm 用作生产运行时环境,那就使用 Swarm 模式。如果你不打算使用 Swarm 进行部署,可改用 Docker Compose。如果正在为 Kubernetes 部署进行开发,可以考虑使…

【1】基础概念

文章目录 一、特点二、基础语法注意三、官方编程指南四、go 语言标准库 API 一、特点 golang 一个 go 文件都要归属到一个包,需要进行申明。天然的并发:golang 从语言层面支持大并发。每个 go 文件都必须要归属到一个包中。执行 go 文件:go …

接口测试及常用接口测试工具(postman/jmeter)详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口&#…

CVE-2024-51567 CyberPanel upgrademysqlstatus 远程命令执行

该漏洞源于upgrademysqlstatus接口未做身份验证和参数过滤,未授权的攻击者可以通过此接口执行任意命令获取服务器权限,从而造成数据泄露、服务器被接管等严重的后果。 影响版本 CyberPanel v2.3.5CyberPanel v2.3.6 目前官方已有可更新版本&#xff0…

Kaggle “Reducing Commercial Aviation Fatalities” 比赛 生理数据分析

1、背景 Kaggle在2018 年 12 月 20 日举办“Reducing Commercial Aviation Fatalities” 比赛,通过收集飞行员的生理数据,判断飞行员何时会遇到麻烦吗?该比赛主要分析飞行员的问题,因为航班多、时间不固定,飞行员会出…

【flink】之新版本kafka到kafka

前言&#xff1a; 通过sinkTo()的优点&#xff1a;更简洁、类型安全&#xff0c;适用于使用 Flink 提供的预定义 sink 或简单的自定义 sink 准备&#xff1a; 引入Flink 1.12版本即可 <dependency><groupId>org.apache.flink</groupId><artifactId>fl…

如何配置,npm install 是从本地安装依赖

在 Node.js 中&#xff0c;要使npm install从本地安装依赖&#xff0c;可以按照以下步骤进行配置&#xff1a; 一、准备本地依赖包 确保你有本地的依赖包。这个依赖包可以是一个包含package.json文件的文件夹&#xff0c;或者是一个已经打包好的.tgz文件。 二、使用相对路径…

无套路领取《AI应用开发专栏》

最近有些时间没有更新技术文章了&#xff0c;都在忙着写《AI应用开发入门》专栏&#xff0c;专栏已整理放到了github上&#xff0c;有兴趣的小伙伴可以移步github阅读&#xff0c;地址见文末。 1、为什么写这个文档 之前陆续写了一些零散的AI相关的技术文章&#xff0c;也有不…

uni-app使用movable-area 实现数据的拖拽排序功能

文档地址 template部分 <movable-area :style"getAreaStyle"><movable-view class"table-row" v-for"v,i in move.list":key"v.id":y"v.y"change"handle_moving"direction"vertical"touchst…

Webserver(1.8)操作函数

目录 文件属性操作函数access函数chmod函数chown函数truncate函数 目录操作函数mkdir函数rmdir函数rename函数chdir函数*getcwd函数 目录遍历函数*opendir函数*readdir函数closedir函数 dup、dup2函数dupdup2 fcntl函数 文件属性操作函数 access函数 判断某个文件是否有某个权…

基础IO -- 标准错误输出stderr

目录 1&#xff09;为什么要有 fd 为 2 的 stderr 2&#xff09;使2和1重定向到一个文件中 这里我们谈一下以前只是了解过的stderr 通过两段代码&#xff0c;显然&#xff0c;我们可以知道两个FILE*都是指向显示器的 对于重定向&#xff0c;只有stdout才会将打印的数据重定向…

基于Multisim的四位抢答器设计与仿真

四位选手进行抢答比赛&#xff0c;用基本门电路及集成逻辑器件构成四人抢答器。选手编号分别为1&#xff0c;2&#xff0c;3&#xff0c;4号&#xff0c;用S1&#xff0c;S2&#xff0c;S3&#xff0c;S4四个按钮作为抢答按钮&#xff0c;S0按钮为总清零按钮。当四人中任何一个…

Python毕业设计选题:基于Django+Vue的物资配送管理系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录界面 管理员功能界面 申领者管理 后勤处管理 物资信息管理 入库信息管理 …

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

springboot092安康旅游网站的设计与实现(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 基于JSP的安康旅游网站的设计与实现 姓  名 学  号 院  系 专  业 指导老师 2021 年 月 教务处制 目 录 目 录 摘 要 Abstract 第一章 绪论 1.1 研究现状 1.2 设…

selenium无头浏览器截图并以邮件发送

selenium 4.11版本的selenium无需在本地下载浏览器驱动 # Time : 2024/10/18 17:54 # Author : # FileName: print_sc.py # Description: import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image i…

字符串逆序(c语言)

错误代码 #include<stdio.h>//字符串逆序 void reverse(char arr[], int n) {int j 0;//采用中间值法//访问数组中第一个元素和最后一个元素//交换他们的值&#xff0c;从而完成了字符串逆序//所以这个需要临时变量for (j 0; j < n / 2; j){char temp arr[j];arr[…

Fakelocation 步道乐跑(Root真机篇)

前言:需要 Fakelocation&#xff0c;真机Root,步道乐跑&#xff0c;Dia&#xff0c;MT管理器系统需求 Fakelocation | MT管理器 | Dia | 环境模块 任务一 真机Root&#xff08;德尔塔&#xff0c;过momo&#xff0c;刷环境模块&#xff09; 任务二 前往Dia查看包名&#xff08…