自己网站可以加标志吗福州网站建设 网站设计 网站制作
自己网站可以加标志吗,福州网站建设 网站设计 网站制作,网上书城网站开发的结论和不足,集团网站建设案例Prompts
语言模型的提示是用户提供的一组指令或输入#xff0c;用于指导模型的响应#xff0c;帮助模型理解上下文并生成相关且连贯的基于语言的输出#xff0c;例如回答问题、完成句子或参与某项活动。对话。
关键问题
如何在LLMs中使用少量示例(few-shot examples)—…Prompts
语言模型的提示是用户提供的一组指令或输入用于指导模型的响应帮助模型理解上下文并生成相关且连贯的基于语言的输出例如回答问题、完成句子或参与某项活动。对话。
关键问题
如何在LLMs中使用少量示例(few-shot examples)——How to use few-shot examples with LLMs如何将少量示例(few-shot examples)与聊天模型结合使用——How to use few-shot examples with chat models如何使用示例选择器(example selectors)——How to use example selectors如何部分提示(partial prompts)——How to partial prompts如何使用消息提示(message prompts)——How to work with message promptsHow to compose prompts together如何创建管道提示(pipeline prompt)——How to create a pipeline prompt
提示模板是用于生成语言模型提示的预定义配方。模板可以包括说明、少量示例以及适合给定任务的特定上下文和问题LangChain提供了创建和使用提示模板的工具LangChain致力于创建与模型无关的模板以便能够轻松地跨不同语言模型重用现有模板。
通常语言模型期望提示是字符串或聊天消息列表。
PromptTemplate 用于PromptTemplate创建字符串提示的模板通常情况下该模板使用python中的str.format语法进行模板化该模板支持任意数量的变量包括无变量 ChatPromptTemplate Chat Model的提示是聊天消息列表每条消息都有内容以及roleChatPromptTemplate.from_messages接受各种消息表示形式。还可以传入 MessagePromptTemplate或者实例BaseMessage。 LCEL PromptTemplate和ChatPromptTemplate都实现了Runnable接口这意味着它们支持invoke、 ainvoke、stream、astream、batch、abatch、astream_log调用。PromptTemplate接受一个字典有提示变量的并返回一个StringPromptValue.ChatPromptTemplate接受一个字典并返回一个ChatPromptValue。
Composition
String prompt composition
使用字符串提示时每个模板都会连接在一起可以直接使用提示或字符串列表中的第一个元素必须是提示
prompt (PromptTemplate.from_template(Tell me a joke about {topic}) , make it funny \n\nand in {language}
)Chat prompt composition
聊天提示由消息列表组成。为了开发人员体验我们添加了一种创建这些提示的便捷方法。在此管道中每个新元素都是最终提示中的一条新消息。
首先让我们使用系统消息初始化基本 ChatPromptTemplate。
prompt SystemMessage(contentYou are a nice pirate)当没有要格式化的变量时使用 Message当有要格式化的变量时使用 MessageTemplate还可以仅使用一个字符串注意这将自动推断为 HumanMessagePromptTemplate。
new_prompt (prompt HumanMessage(contenthi) AIMessage(contentwhat?) {input}
)在底层会创建 ChatPromptTemplate 类的一个实例可以使用它
new_prompt.format_messages(inputi said hi)[SystemMessage(contentYou are a nice pirate, additional_kwargs{}),HumanMessage(contenthi, additional_kwargs{}, exampleFalse),AIMessage(contentwhat?, additional_kwargs{}, exampleFalse),HumanMessage(contenti said hi, additional_kwargs{}, exampleFalse)]Example Selector Types
选择器类型示例
NameDescriptionSimilarity使用输入和示例之间的语义相似性来决定选择哪些示例MMR使用输入和示例之间的最大边际相关性来决定选择哪些示例Length根据一定长度内可以容纳的数量来选择示例Ngram使用输入和示例之间的 ngram 重叠来决定选择哪些示例 Select by similarity 语义相似性 通过查找与输入具有最大余弦相似度的嵌入示例 Select by maximal marginal relevance(MMR) 最大边际相关性 MaxMarginalRelevanceExampleSelector根据与输入最相似的示例的组合来选择示例同时还针对多样性进行优化。它通过查找与输入具有最大余弦相似度的嵌入示例来实现这一点然后迭代地添加它们同时惩罚它们与已选择示例的接近程度。 Select by length 长度 Select by n-gram overlap ngram重叠度 NGramOverlapExampleSelector根据 ngram 重叠分数根据与输入最相似的示例来选择示例并对其进行排序。ngram 重叠分数是 0.0 到 1.0 之间的浮点数含 0.0 和 1.0。选择器允许设置阈值分数。ngram 重叠分数小于或等于阈值的示例被排除。默认情况下阈值设置为 -1.0因此不会排除任何示例只会对它们重新排序。将阈值设置为 0.0 将排除与输入没有 ngram 重叠的示例。
Example selectors
选择器示例
如果有大量示例就可能需要选择要在提示中包含的示例。示例选择器就是负责执行此操作的类。
基本接口定义如下
class BaseExampleSelector(ABC):Interface for selecting examples to include in prompts.abstractmethoddef select_examples(self, input_variables: Dict[str, str]) - List[dict]:Select which examples to use based on the inputs.abstractmethoddef add_example(self, example: Dict[str, str]) - Any:Add new example to store.唯一需要定义的方法是一个select_examples方法接受输入变量然后返回示例列表。如何选择这些示例取决于每个具体的实现。
Examples
创建示例列表包含输入和输出
examples [{input: hi, output: ciao},{input: bye, output: arrivaderci},{input: soccer, output: calcio},
]Custom Example Selector
以下是根据单词的长度选择要选择的示例
from langchain_core.example_selectors.base import BaseExampleSelectorclass CustomExampleSelector(BaseExampleSelector):def __init__(self, examples):self.examples examplesdef add_example(self, example):self.examples.append(example)def select_examples(self, input_variables):# This assumes knowledge that part of the input will be a text keynew_word input_variables[input]new_word_length len(new_word)# 初始化变量来存储最佳匹配及其长度差best_match Nonesmallest_diff float(inf)# Iterate through each examplefor example in self.examples:current_diff abs(len(example[input]) - new_word_length)if current_diff smallest_diff:smallest_diff current_diffbest_match examplereturn [best_match]example_selector CustomExampleSelector(examples)Use in a Prompt
在提示中使用这个示例选择器
from langchain_core.prompts.few_shot import FewShotPromptTemplate
from langchain_core.prompts.prompt import PromptTemplateexample_prompt PromptTemplate.from_template(Input: {input} - Output: {output})prompt FewShotPromptTemplate(example_selectorexample_selector,example_promptexample_prompt,suffixInput: {input} - Output:,prefixTranslate the following words from English to Italain:,input_variables[input],
)print(prompt.format(inputword))Few-shot prompt templates
少量提示模板
可以由一组示例或一个示例选择器对象构建少量提示模板。下面将配置一些用于自我询问和搜索的示例。
Using an example set
使用示例集
Create the example set
创建示例集
首先创建一个少量示例的列表。每个示例都是一个字典其中键是输入变量值是这些输入变量的值。
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplateexamples [{question: Who lived longer, Muhammad Ali or Alan Turing?,answer:
Are follow up questions needed here: Yes.
Follow up: How old was Muhammad Ali when he died?
Intermediate answer: Muhammad Ali was 74 years old when he died.
Follow up: How old was Alan Turing when he died?
Intermediate answer: Alan Turing was 41 years old when he died.
So the final answer is: Muhammad Ali
,},{question: When was the founder of craigslist born?,answer:
Are follow up questions needed here: Yes.
Follow up: Who was the founder of craigslist?
Intermediate answer: Craigslist was founded by Craig Newmark.
Follow up: When was Craig Newmark born?
Intermediate answer: Craig Newmark was born on December 6, 1952.
So the final answer is: December 6, 1952
,},{question: Who was the maternal grandfather of George Washington?,answer:
Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball
,},{question: Are both the directors of Jaws and Casino Royale from the same country?,answer:
Are follow up questions needed here: Yes.
Follow up: Who is the director of Jaws?
Intermediate Answer: The director of Jaws is Steven Spielberg.
Follow up: Where is Steven Spielberg from?
Intermediate Answer: The United States.
Follow up: Who is the director of Casino Royale?
Intermediate Answer: The director of Casino Royale is Martin Campbell.
Follow up: Where is Martin Campbell from?
Intermediate Answer: New Zealand.
So the final answer is: No
,},
]Create a formatter for the few-shot examples
配置一个格式化程序将少量示例格式化为字符串。此格式化程序应该是 PromptTemplate 对象。
example_prompt PromptTemplate(input_variables[question, answer], templateQuestion: {question}\n{answer}
)print(example_prompt.format(**examples[0]))Question: Who lived longer, Muhammad Ali or Alan Turing?Are follow up questions needed here: Yes.
Follow up: How old was Muhammad Ali when he died?
Intermediate answer: Muhammad Ali was 74 years old when he died.
Follow up: How old was Alan Turing when he died?
Intermediate answer: Alan Turing was 41 years old when he died.
So the final answer is: Muhammad AliFeed examples and formatter to FewShotPromptTemplate
将示例和格式化程序提供给 FewShotPromptTemplate
最后创建一个 FewShotPromptTemplate 对象。该对象接受少数样本示例和少数样本示例的格式化程序。
prompt FewShotPromptTemplate(examplesexamples,example_promptexample_prompt,suffixQuestion: {input},input_variables[input],
)print(prompt.format(inputWho was the father of Mary Ball Washington?))Using an example selector
使用示例选择器
Feed example into ExampleSelector
将少量示例提供给Exampleselector
这里不会将示例直接输入到 FewShotPromptTemplate中而是将它们输入到Exampleselector对象中。
本例中将使用 SemanticSimilarityExampleSelector 类。此类根据与输入的相似性来选择少数样本。
它使用嵌入模型来计算输入和少数样本之间的相似度并使用向量存储来执行最近邻搜索。
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddingsexample_selector SemanticSimilarityExampleSelector.from_examples(# 可供选择的示例列表examples,# 嵌入类用于测量语义相似性OpenAIEmbeddings(),# VectorStore 类用于存储嵌入并进行相似性搜索。Chroma,# 生成的示例数。k1,
)# 选择与输入最相似的示例。
question Who was the father of Mary Ball Washington?
selected_examples example_selector.select_examples({question: question})
print(fExamples most similar to the input: {question})
for example in selected_examples:print(\n)for k, v in example.items():print(f{k}: {v})Feed example selector into FewShotPromptTemplate
最后创建一个FewShotPromptTemplate对象。该对象接受示例选择器和少数示例的格式化程序。
prompt FewShotPromptTemplate(example_selectorexample_selector,example_promptexample_prompt,suffixQuestion: {input},input_variables[input],
)print(prompt.format(inputWho was the father of Mary Ball Washington?))Few-shot examples for chat models
聊天模型的少量示例
介绍如何在聊天模型中使用少量示例。对于如何最好地进行几次提示似乎没有达成一致的共识并且最佳提示编译可能会因模型而异。因此我们提供了少量提示模板例如FewShotChatMessagePromptTemplate) 作为灵活的起点您可以根据需要修改或替换它们。
少量提示模板的目标是根据输入动态选择示例然后在最终提示中格式化示例以提供给模型。
下面的代码样例是chat models关于LLMs中的使用参考上节
Fixed Examples
固定示例
最基本也是常见的少量提示技术是使用固定提示示例。这样就可以选择一条链条对其进行评估并避免担心生产中的额外移动部件。
该模板的基本组件是
examples包含在最终提示中的字典示例列表。example_prompt通过format_messages方法将每个示例转换为一条或多条消息。一个常见的示例是将每个示例转换为一条human message和一条AI message response或者一条human message后跟一条function call message
demonstration:
# import the modules for this example
from langchain.prompts import (ChatPromptTemplate,FewShotChatMessagePromptTemplate,
)# define the examples you’d like to include
examples [{input: 22, output: 4},{input: 23, output: 5},
]# assemble them into the few-shot prompt template
# 一个用于格式化每个单独示例的提示模板
example_prompt ChatPromptTemplate.from_messages([(human, {input}),(ai, {output}),]
)
few_shot_prompt FewShotChatMessagePromptTemplate(example_promptexample_prompt,examplesexamples,
)print(few_shot_prompt.format())# assemble your final prompt and use it with a model.
final_prompt ChatPromptTemplate.from_messages([(system, You are a wondrous wizard of math.),few_shot_prompt,(human, {input}),]
)from langchain_community.chat_models import ChatAnthropicchain final_prompt | ChatAnthropic(temperature0.0)chain.invoke({input: Whats the square of a triangle?})Dynamic few-shot prompting
动态少量提示
如果需要根据输入来限制显示哪些示例可以使用example_selector代替examples
动态少量提示模板如下所示
example_selector负责为给定的输入选择少数样本以及它们返回的顺序实现了 BaseExampleSelector接口。一个常见的例子是向量存储支持的SemanticSimilarityExampleSelectorexample_prompt通过 format_messages 方法将每个示例转换为一个或多个消息。一个常见的示例是将每个示例转换为一条human message和一条AI message response或者一条human message后跟一条function call message
可以再次与其他消息和聊天模板组合生成最终提示
from langchain.prompts import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings由于我们使用向量存储来根据语义相似性选择示例因此我们需要首先填充存储。
examples [{input: 22, output: 4},{input: 23, output: 5},{input: 24, output: 6},{input: What did the cow say to the moon?, output: nothing at all},{input: Write me a poem about the moon,output: One for the moon, and one for me, who are we to talk about the moon?,},
]to_vectorize [ .join(example.values()) for example in examples]
embeddings OpenAIEmbeddings()
vectorstore Chroma.from_texts(to_vectorize, embeddings, metadatasexamples)创建example_selector
创建矢量存储后可以创建example_selector.
# 仅获取前 2 个示例
example_selector SemanticSimilarityExampleSelector(vectorstorevectorstore,k2,
)# 提示模板通过将输入传递给“select_examples”方法来加载示例
example_selector.select_examples({input: horse})创建prompt template
使用上面创建的 example_selector 组装提示模板
from langchain.prompts import (ChatPromptTemplate,FewShotChatMessagePromptTemplate,
)# Define the few-shot prompt.
few_shot_prompt FewShotChatMessagePromptTemplate(# The input variables select the values to pass to the example_selectorinput_variables[input],example_selectorexample_selector,# Define how each example will be formatted.# In this case, each example will become 2 messages:# 1 human, and 1 AIexample_promptChatPromptTemplate.from_messages([(human, {input}), (ai, {output})]),
)print(few_shot_prompt.format(inputWhats 33?))Human: 23
AI: 5
Human: 22
AI: 4组装最终的提示模板
final_prompt ChatPromptTemplate.from_messages([(system, You are a wondrous wizard of math.),few_shot_prompt,(human, {input}),]
)print(few_shot_prompt.format(inputWhats 33?))Human: 23
AI: 5
Human: 22
AI: 4Use with an LLM
from langchain_community.chat_models import ChatAnthropicchain final_prompt | ChatAnthropic(temperature0.0)chain.invoke({input: Whats 33?})AIMessage(content 3 3 6, additional_kwargs{}, exampleFalse)Types of MessagePromptTemplate
LangChain提供了不同种类的MessagePromptTemplate最常见的是 AIMessagePromptTemplate, SystemMessagePromptTemplate 和 HumanMessagePromptTemplate。
但是如果聊天模型支持使用任意角色获取聊天消息则可以使用 ChatMessagePromptTemplate它允许用户指定角色名称。
from langchain.prompts import ChatMessagePromptTemplateprompt May the {subject} be with youchat_message_prompt ChatMessagePromptTemplate.from_template(roleJedi, templateprompt
)
chat_message_prompt.format(subjectforce)LangChain还提供了MessagesPlaceholder它可以让您完全控制格式化期间要呈现的消息。
如果不确定消息提示模板应使用什么角色或希望在格式化期间插入消息列表时就使用它。
from langchain.prompts import (ChatPromptTemplate,HumanMessagePromptTemplate,MessagesPlaceholder,
)human_prompt Summarize our conversation so far in {word_count} words.
human_message_template HumanMessagePromptTemplate.from_template(human_prompt)chat_prompt ChatPromptTemplate.from_messages([MessagesPlaceholder(variable_nameconversation), human_message_template]
)from langchain_core.messages import AIMessage, HumanMessagehuman_message HumanMessage(contentWhat is the best way to learn programming?)
ai_message AIMessage(content\
1. Choose a programming language: Decide on a programming language that you want to learn.2. Start with the basics: Familiarize yourself with the basic programming concepts such as variables, data types and control structures.3. Practice, practice, practice: The best way to learn programming is through hands-on experience\)chat_prompt.format_prompt(conversation[human_message, ai_message], word_count10
).to_messages()Partial prompt templates
部分提示模板
“部分”提示模板是有意义的 - 例如传入所需值的子集以创建一个新的提示模板该模板仅需要剩余的值子集。
LangChain通过两种方式支持
使用字符串值进行部分格式化使用返回字符串值的函数进行部分格式化
Partial with strings
如果想要在其他元素之前得到一些变量可以使用此方法。
例如现在有一个提示模板需要两个变量foo和baz。如果很早的得到了foo但较晚得到baz那么等到两个变量处于同一位置时才将它们传入提示模板就很不方便。但是可以使用foo部分化提示模板然后传递部分提示模板并使用它。
from langchain.prompts import PromptTemplateprompt PromptTemplate.from_template({foo}{bar})
partial_prompt prompt.partial(foofoo)
print(partial_prompt.format(barbaz))也可以使用部分变量初始化提示。
prompt PromptTemplate(template{foo}{bar}, input_variables[bar], partial_variables{foo: foo}
)
print(prompt.format(barbaz))Partial with functions
对函数进行部分处理。这种情况是当有一个变量希望通过函数获取该变量。
一个典型例子是日期或时间。想象一下您有一个提示您总是希望获得当前日期。您无法在提示中对其进行硬编码并且将其与其他输入变量一起传递有点烦人。在这种情况下能够使用始终返回当前日期的函数来部分提示是非常方便的。
from datetime import datetimedef _get_datetime():now datetime.now()return now.strftime(%m/%d/%Y, %H:%M:%S)prompt PromptTemplate(templateTell me a {adjective} joke about the day {date},input_variables[adjective, date],
)
partial_prompt prompt.partial(date_get_datetime)
print(partial_prompt.format(adjectivefunny))还可以使用部分变量初始化提示这在此工作流程中通常更有意义。
prompt PromptTemplate(templateTell me a {adjective} joke about the day {date},input_variables[adjective],partial_variables{date: _get_datetime},
)
print(prompt.format(adjectivefunny))Pipeline
本节中介绍了如何将多个提示组合在一起。这样就可以重复使用部分提示PipelinePrompt 由两个主要部分组成
Final prompt(最后提示)最终要返回的提示Pipeline prompts(管道提示)元组列表由字符串名称和提示模板组成。每个提示模板将被格式化然后作为具有相同名称的变量传递到下一个提示模板。
from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts.prompt import PromptTemplatefull_template {introduction}{example}{start}
full_prompt PromptTemplate.from_template(full_template)introduction_template You are impersonating {person}.
introduction_prompt PromptTemplate.from_template(introduction_template)example_template Heres an example of an interaction:Q: {example_q}
A: {example_a}
example_prompt PromptTemplate.from_template(example_template)start_template Now, do this for real!Q: {input}
A:
start_prompt PromptTemplate.from_template(start_template)input_prompts [(introduction, introduction_prompt),(example, example_prompt),(start, start_prompt),
]
pipeline_prompt PipelinePromptTemplate(final_promptfull_prompt, pipeline_promptsinput_prompts
)pipeline_prompt.input_variables[example_q, example_a, input, person]print(pipeline_prompt.format(personElon Musk,example_qWhats your favorite car?,example_aTesla,inputWhats your favorite social media site?,)
)You are impersonating Elon Musk.Heres an example of an interaction:Q: Whats your favorite car?
A: TeslaNow, do this for real!Q: Whats your favorite social media site?
A:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89823.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!