礼品网站商城怎么做,wordpress的登录函数使用教程,域名连接到网站,建网站要大约多少钱文章目录 一、关于 Prompts1、概念2、使用模式概览3、示例指南 二、使用模式1、定义自定义提示2、获取和设置自定义提示2.1 常用提示2.2 访问提示2.3 更新提示2.4 修改查询引擎中使用的提示2.5 修改索引构建中使用的提示 3、[高级]高级提示功能3.1 部分格式化3.2 模板变量映射3… 文章目录 一、关于 Prompts1、概念2、使用模式概览3、示例指南 二、使用模式1、定义自定义提示2、获取和设置自定义提示2.1 常用提示2.2 访问提示2.3 更新提示2.4 修改查询引擎中使用的提示2.5 修改索引构建中使用的提示 3、[高级]高级提示功能3.1 部分格式化3.2 模板变量映射3.3 函数映射 一、关于 Prompts
1、概念
提示是赋予LLM 表达能力的基本输入。 LlamaIndex 使用提示来构建索引、执行插入、在查询期间执行遍历并合成最终答案。
LlamaIndex 使用一组开箱即用的默认提示模板。
此外还有一些专门为聊天模型编写和使用的提示如下gpt-3.5-turbo 所示。
用户还可以提供自己的提示模板来进一步定制框架的行为。 自定义的最佳方法是从上面的链接 复制默认提示并将其用作任何修改的基础。 2、使用模式概览
使用提示很简单。
from llama_index.core import PromptTemplatetemplate (We have provided context information below. \n---------------------\n{context_str}\n---------------------\nGiven 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...)有关更多详细信息请参阅下方的 使用模式指南。 3、示例指南
简单的自定义示例
完成提示聊天提示提示混合
Prompt 工程指南
高级提示RAG 提示
实验性的
及时优化情绪提示 二、使用模式 1、定义自定义提示
定义自定义提示就像 创建格式字符串 一样简单
from llama_index.core import PromptTemplatetemplate (We have provided context information below. \n---------------------\n{context_str}\n---------------------\nGiven 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(contentYou are an expert system., roleMessageRole.SYSTEM),ChatMessage(contentGenerate a short story about {topic},roleMessageRole.USER,),
]
chat_template ChatPromptTemplate(message_templatesmessage_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...)2、获取和设置自定义提示
由于 LlamaIndex 是一个多步骤管道因此确定要修改的操作并在正确的位置传递自定义提示非常重要。
例如提示用于响应合成器、检索器、索引构建等其中一些模块嵌套在其他模块中合成器嵌套在查询引擎中。
有关访问/自定义提示的完整详细信息请参阅本指南 。 2.1 常用提示
最常用的提示是text_qa_template和refine_template。
text_qa_template- 用于使用检索到的节点获取查询的初始答案refine_template- 当检索到的文本不适合使用response_modecompact默认的单个 LLM 调用时或者使用 检索多个节点时使用response_moderefine。 第一个查询的答案作为 插入existing_answerLLM 必须根据新上下文更新或重复现有答案。 2.2 访问提示
您可以调用get_promptsLlamaIndex 中的许多模块来获取模块和嵌套子模块中使用的提示的平面列表。
例如看一下下面的代码片段。
query_engine index.as_query_engine(response_modecompact)
prompts_dict query_engine.get_prompts()
print(list(prompts_dict.keys()))您可能会取回以下密钥
[response_synthesizer:text_qa_template, response_synthesizer:refine_template]请注意提示的子模块前缀为“命名空间”。 2.3 更新提示
您可以在任何实现get_prompts该update_prompts功能的模块上自定义提示。 只需传入参数值其键等于您在通过 获得的提示字典中看到的键get_prompts。
例如对于上面的示例我们可以执行以下操作
# shakespeare!
qa_prompt_tmpl_str (Context information is below.\n---------------------\n{context_str}\n---------------------\nGiven the context information and not prior knowledge, answer the query in the style of a Shakespeare play.\nQuery: {query_str}\nAnswer:
)
qa_prompt_tmpl PromptTemplate(qa_prompt_tmpl_str)query_engine.update_prompts({response_synthesizer:text_qa_template: qa_prompt_tmpl}
)2.4 修改查询引擎中使用的提示
对于查询引擎您还可以在查询期间直接传入自定义提示即针对索引执行查询并合成最终响应。
还有两种等效方法可以覆盖提示
方式一通过高级 API
query_engine index.as_query_engine(text_qa_templatecustom_qa_prompt, refine_templatecustom_refine_prompt
)方式二通过低级组合 API
retriever index.as_retriever()
synth get_response_synthesizer(text_qa_templatecustom_qa_prompt, refine_templatecustom_refine_prompt
)
query_engine RetrieverQueryEngine(retriever, response_synthesizer)上面的两种方法是等效的其中 1 本质上是 2 的语法糖并隐藏了潜在的复杂性。 您可能希望使用 1 快速修改一些常用参数并使用 2 进行更精细的控制。
有关哪些类使用哪些提示的更多详细信息请访问 查询类参考。
查看参考文档以获取完整的所有提示。 2.5 修改索引构建中使用的提示
某些索引在构建过程中使用不同类型的提示注意最常见的提示VectorStoreIndex并且SummaryIndex不要使用任何提示。
例如TreeIndex使用汇总提示对节点进行分层汇总KeywordTableIndex使用关键字提取提示来提取关键字。
有两种等效的方法可以覆盖提示 方式1通过默认的节点构造函数
index TreeIndex(nodes, summary_templatecustom_prompt)方式2 通过文档构造函数。
index TreeIndex.from_documents(docs, summary_templatecustom_prompt)有关哪个索引使用哪个提示的更多详细信息请访问 Index 类参考。 3、[高级]高级提示功能
在本节中我们将展示 LlamaIndex 中的一些高级提示功能。
相关指南
高级提示RAG 快速工程 3.1 部分格式化
部分格式化提示填写一些变量同时留下其他变量稍后填写。
from llama_index.core import PromptTemplateprompt_tmpl_str {foo} {bar}
prompt_tmpl PromptTemplate(prompt_tmpl_str)
partial_prompt_tmpl prompt_tmpl.partial_format(fooabc)fmt_str partial_prompt_tmpl.format(bardef)3.2 模板变量映射
LlamaIndex 提示抽象通常需要某些键。 例如我们对上下文和用户查询的text_qa_prompt期望。 context_strquery_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_mappingstemplate_var_mappings
)3.3 函数映射
将函数作为模板变量而不是固定值传递。
这是相当先进和强大的允许您进行动态几次提示等。
这是重新格式化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_strcontext, query_strquery)2024-04-15一