汉中微信网站建设,出词,如何做论坛网站,俄语网站设计摘要#xff1a; 本文介绍了langchain.prompts中基础的提示词模板的用法#xff0c;包括基础的文本模板、对话模板、小样本模板、以及主要两种样本选择器的用法。 文章目录 1. prompts介绍#xff1f;2. 提示词模板体系 Prompt Templates2.1 基础文本模板 PromptTemplate2.2… 摘要 本文介绍了langchain.prompts中基础的提示词模板的用法包括基础的文本模板、对话模板、小样本模板、以及主要两种样本选择器的用法。 文章目录 1. prompts介绍2. 提示词模板体系 Prompt Templates2.1 基础文本模板 PromptTemplate2.2 对话模板 ChatPromptTemplate2.3 小样本提示模板Few-shot2.4 示例选择器Example Selector2.4.1 按长度选择 LengthBasedExampleSelector2.4.2 按相似度选择 LengthBasedExampleSelector 1. prompts介绍 提示词就是输入给LLM的内容。包括我们和LLM对话的内容 LangChain的Prompts模块是构建对话系统的核心组件它通过结构化模板实现精准的提示工程管理。该模块将自然语言指令转化为大模型可解析的标准化输入显著提升AI交互质量。
2. 提示词模板体系 Prompt Templates
LangChain 提供了 PromptTemplates可以让用户根据输入动态地修改提示提示词模板是一种预定义的文本结构其中包含变量和固定文本部分用于引导语言模型生成特定类型的输出。这些模板可以帮助模型更准确地理解上下文并生成符合预期的响应。 提示词模板Prompt Template在自然语言处理和生成任务中是设计和优化模型输入的一种方法。提示词模板可以帮助大型语言模型LLM更好地理解和生成目标内容。以下是提示词模板的介绍及其 在不同场景中的应用。
通常提示词模板包含两部分
静态部分用于提供上下文背景或引导语等用于控制LLM的大的方向。动态部分根据具体输入替换在模板中用占位符表示变量。
2.1 基础文本模板 PromptTemplate
from langchain_core.prompts import PromptTemplate# 定义含变量的模板
template 请为{product}写广告语突出{feature}特点
prompt PromptTemplate(input_variables[product, feature],templatetemplate
)# 填充变量生成最终提示
filled_prompt prompt.format(product智能手表, feature健康监测)# 输出请为智能手表写广告语突出健康监测特点
print(filled_prompt)输出
请为智能手表写广告语突出健康监测特点使用partial_variables提前固定部分参数
# 预设置部分变量
partial_prompt prompt.partial(product电动汽车)
print(partial_prompt.format(feature续航能力))
# 输出请为电动汽车写广告语突出续航能力特点2.2 对话模板 ChatPromptTemplate
用于对结构化的聊天消息管理支持区分角色区分。
from langchain.prompts import ChatPromptTemplatechat_template ChatPromptTemplate.from_messages([(system, 你是一位{role}),(human, 请分析{question})
])
filled_chat chat_template.format_messages(role金融顾问, question当前股市走势
)print(filled_chat)[SystemMessage(content你是一位金融顾问, additional_kwargs{}, response_metadata{}), HumanMessage(content请分析当前股市走势, additional_kwargs{}, response_metadata{})]我们可以看到它返回一个BaseMessage类型可以直接传给聊天模型
response model.invoke(prompt)2.3 小样本提示模板Few-shot
Few-shot examples 是一组可帮助语言模型生成更好响应的示例。要生成具有 few-shot examples 的 prompt可以使用 FewShotPromptTemplate。该类接受一个 PromptTemplate 和一组 few-shot examples。然后它使用这些 few-shot examples 格式化成 prompt 模板。
示例输入一个情绪的词要返回对应情绪的表现我们根据提示词告诉模型什么是“情绪的表现”。 创建大模型LLMfrom langchain.chat_models import ChatOpenAI
# 定义模型调用API URL
base_url https://api.deepseek.com/v1
# 定义模型调用API KEY实际应用会放到环境变量中避免明文暴露
api_key 你自己的api key
# 定义模型名称对应DeepSeek-V3
modeldeepseek-chat
llm ChatOpenAI(base_urlbase_url,api_keyapi_key,modelmodel)
创建小样本提示词模板from langchain import FewShotPromptTemplate# 示例样本
examples [{input: 高兴, output: 笑容满面}, {input: 悲伤, output: 泪流满面}]# 创建提示词模板
example_template 输入:{input}\n输出:{output}example_prompt PromptTemplate.from_template(example_template)# 小样本提示词模板
few_shot_prompt FewShotPromptTemplate(examplesexamples,example_promptexample_prompt,prefix请给出每个输入的情感进行分析给出对应的表现。,suffix输入:{text}\n输出:,input_variables[text]
)# 格式化提示词
prompt_text few_shot_prompt.format(text愤怒)
调用模型response llm.invoke(prompt_text)
print(LLM 输出)
print(response.content)输出
LLM 输出
怒目圆睁2.4 示例选择器Example Selector
在大量示例情况下因为大量的示例会浪费token还可能超出token限制。Example Selector可以从大量的示例中自动选择最合适的部分示例纳入到提示词中。
主要两种方式选择
按长度 较长的输入选择较少示例反之较短输入选择更多示例。按相似度 查找与输入具有最大余弦相似度的嵌入示例。
2.4.1 按长度选择 LengthBasedExampleSelector
他可以根据输入文本长度自动增减示例数量短输入时提供更多上下文示例长输入时减少示例以避免超出模型上下文窗口限制。通过预设的max_length参数确保提示总长度不超过模型处理上限。 from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_core.example_selectors import LengthBasedExampleSelector# 定义示例集
examples [{input: happy, output: sad},{input: tall, output: short},{input: fast, output: slow},{input: wind, output: calm}
]# 创建示例模板
example_prompt PromptTemplate(input_variables[input, output],templateInput: {input}\nOutput: {output}
)# 初始化选择器
selector LengthBasedExampleSelector(examplesexamples,example_promptexample_prompt,max_length10 # 假设模型上下文窗口为30字符
)# 构建动态提示
dynamic_prompt FewShotPromptTemplate(example_selectorselector,example_promptexample_prompt,prefix生成反义词,suffixInput: {adjective}\nOutput:,input_variables[adjective]
)# 测试不同长度输入
print(dynamic_prompt.format(adjectivebig)) # 显示全部3个示例
print(dynamic_prompt.format(adjectiveextremely and huge and massive)) # 可能只显示1个示例
2.4.2 按相似度选择 LengthBasedExampleSelector
以下是一个根据为输入提供一个反义词的例子当输入一个词时选择器会根据语义选择相近的例子本例中输入“red”选择器选择了和颜色相关的示例作为输出。 from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS# 初始化嵌入模型embedings
model nomic-embed-text:latest # 模型名称
base_local_url http://localhost:11434 # 本地部署模型
embedings OllamaEmbeddings( # ①base_urlbase_local_url,modelmodel
)# 定义示例集
examples [{input: happy, output: sad},{input: tall, output: short},{input: fast, output: slow},{input: wind, output: calm},{input: black, output: white},{input: Light, output: Dark},{input: Bright, output: Dull},{input: Rainy, output: Dry},{input: Warm, output: Cool},{input: Summer, output: Winter}
]# 创建示例模板
example_prompt PromptTemplate(input_variables[input, output],templateInput: {input}\nOutput: {output}
)# 初始化选择器
selector SemanticSimilarityExampleSelector.from_examples(examplesexamples,embeddingsembedings, vectorstore_clsFAISS, # 使用Faiss作为矢量库k3,# 选择三个相似的示例input_keys[input]
)# 构建动态提示
dynamic_prompt FewShotPromptTemplate(example_selectorselector,example_promptexample_prompt,prefix生成反义词,suffixInput: {input}\nOutput:,input_variables[input]
)# 测试不同长度输入
print(dynamic_prompt.format(inputred)) 输出
生成反义词Input: Bright
Output: DullInput: black
Output: whiteInput: Light
Output: DarkInput: red
Output:注① 本例中使用本地部署一个Ollama框架Embedding模型Ollama后续文章介绍。 **Embedding Model**嵌入模型是一种将离散的高维数据如单词、句子、图片等映射到连续的低维向量空间的技术嵌入模型的主要目的是捕捉输入数据中的语义或特征信息使得相似的输入在嵌入空间中距离更近。嵌入模型通常计算高效适合用于大规模数据的相似性搜索和分类任务。 嵌入模型适用场景 文本相似度计算比较两个文本的嵌入向量计算相似度。信息检索通过嵌入向量进行高效的相似性搜索。分类和聚类使用嵌入向量进行文本或图像的分类和聚类。