1.提示词模板
对提示词按照模板的方式进行维护,类似于短信模板、邮件模板
一个提示词模板包括:
发给llm的指令
一个实例展示,告诉模型应用什么样的格式返回请求
发给语言模型的问题
2.提示词模板的创建
可以使用prompttemplate类进行创建
from langchain.prompts import PromptTemplate
from deepapi import prompt
prompt_template = PromptTemplate.from_template(
"帮我写一篇{content}的使用方法"
)
result = prompt_template.format(content = 'deepseek')
print(result)
输出结果为:
上述提示词模板是一个相对简单的模板,还可以用chatprompttemplate建立一个聊天机器人模板
from langchain.prompts import ChatPromptTemplate
prompt_template = ChatPromptTemplate.from_messages(
[
("system","你是一位算命大师,你的名字是袁天罡"),
("human","大师您好"),
("ai","小友想算什么"),
("human","大师我想算{input}"),]
)
result = prompt_template.format(input = "姻缘")
print(result)
或者这样:
from langchain.prompts import HumanMessagePromptTemplate
from langchain_core.messages import SystemMessage
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages(
[
SystemMessage(
content=("你是一个强大的算命大师,你不屑于算姻缘")
),
HumanMessagePromptTemplate.from_template("{text}"),]
)
result = chat_template.format_messages(text = "那我想算算我能不能飞升成仙")
print(result)
3.MessagesPlaceholder
它可以用来在特定位置添加消息列表
#from langchain.prompts import HumanMessagePromptTemplate
#from langchain_core.messages import SystemMessage
#from langchain.chains.summarize.refine_prompts import prompt_template
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_core.messages import HumanMessage
prompt_template = ChatPromptTemplate.from_messages(
[
("system","你是一个算命大师"),
MessagesPlaceholder('text')
]
)
result =prompt_template.invoke({"text": [HumanMessage(content="大师您好")]})
print(result)
还有另一种方法:
4.提示词追加示例(Few-shot prompt templates)
加入一个QA的示例,可以有效减少大模型幻觉问题。
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_core.messages import HumanMessage
from langchain .prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
from optree.version import suffix
examples =[
{"question": "......",
"answer": "......", },
{
"question": "......",
"answer": "......",
}
]
example_prompts = PromptTemplate(input_variables=["question","answer"],template="问题:{question}\\n{answer}")
prompt = FewShotPromptTemplate(
examples = examples,
example_prompt=example_prompts,
suffix = "问题:{input}",
input_variables=["input"]
)
print(prompt.format(input = "......."))
创建小样本示例的格式化程序
通过PromptTemplate对象,在提示词模板中插入样例。
将示例和格式化程序提供个FewShotTemplate
prompt = FewShotPromptTemplate(
examples = examples,
example_prompt=example_prompts,
suffix = "问题:{input}",
input_variables=["input"]
)
5.示例选择器(exampleelector)
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
examples =[
{"question": "......",
"answer": "......", },
{
"question": "......",
"answer": "......",
}
]
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,#可供选择的示例列表
OpenAIEmbeddings(api_key=""),#用于生成嵌入的嵌入类,用于衡量语义相似性
Chroma,#用于存储嵌入和执行相似搜索的VectorStore类
k=1,
)
question = "......"
selected_examples = example_selector.select_examples({"question":question})
print(f"最相似的实例:{question}")
for example in selected_examples:
print("\\n")
for k,v in example.items():
print(f"{k},{v}")