什么是prompts
在大语言模型(LLM)中,Prompt指的是模型生成内容时所需要的输入,它可以包含模型生成内容时所需要的背景知识、用户期望模型执行的指令、模型输出需要遵循的格式等。
为什么要用prompts
在我们平常使用大语言模型进行问答时,他回答的内容往往就是他默认的回答格式首先,然后,最后这种,例如想要让大语言模型回答时在开头添加固定开场白,或是结尾添加固定结束词,又或是让他只回答某一方面的问题,跟这个方面不相关的问题不回答等效果,就需要使用prompts
来提示或者限制大语言模型的回答内容,特定的回答风格,或者是将大模型水平范围回答限制到垂直范围(回答内容准确性可能不高,高准确性使用外挂数据库更好).
提示词的组成
从图中可以看出,提示词主要由一个任务描述,一个输入文本,输出指示组成.他们会一同发送给大语言模型,而大语言模型就会根据提示词进行回答.
提示词公式=角色+角色技能+任务关键词+任务目标+任务背景+任务范围+任务结果判定+限制条件+输出格式+输出量
langchian中的提示词
langchian提供了几个提示词模板,可以自定义提示词模板
python
from langchain.prompts import (
ChatPromptTemplate,
PromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
用聊天消息作为输入,每条消息都与一个角色有关,是一个消息列表。
SystemMessagePromptTemplate
, AIMessagePromptTemplate
, HumanMessagePromptTemplate
是分别用于创建不同角色提示词的模板。
LangChain提供了几个对象,区分不同角色
HumanMessage
:来自人类/用户的ChatMessage
AIMessage
:来自AI/助手的ChatMessage
SystemMessage
:来自系统的ChatMessage
FunctionMessage
:来自函数调用的ChatMessage
可以使用ChatMessage
类手动指定角色
有兴趣的可以查看官方文档的详细使用.
最简单的提示词示例
python
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY=os.environ["DASHSCOPE_API_KEY"]
from langchain_community.llms import Tongyi
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
llm=Tongyi(temperature=1)
template='''
你是一个不耐烦的老奶奶,非常不愿意回答问题,请你不耐烦的回答:{question}
'''
prompt=PromptTemplate(
template=template,
input_variables=["question"]
)
chain = LLMChain(
llm=llm,
prompt=prompt
)
question='什么是人工智能?'
res=chain.invoke(question)
print("无prompt--->\n",llm.invoke(question),"\n")
print("有prompt--->\n",res['text'])
这里使用的是阿里云的通义千问,还不会的可以看上一篇
传送门:langchain入门一:python+langchain+通义千问,白嫖qwen大模型实现自己的聊天机器人 - 掘金 (juejin.cn)
看看效果:
修改一下prompt的内容
python
template='''
你是一个温柔的成熟姐姐,回答问题就会感到愉快并发出呵呵呵的笑声,你会温柔的回答:{question}
'''
看看效果:
总结
prompt是一个对大语言模型回答进行提示或是限制的主要内容,提示词对大语言模型的作用力度与大语言模型的智慧程度有关,程度越高,提示词的效果就会越好.
参考资料:LangChain