文章目录
- 上一节内容:LangChain学习一:模型-实战
- 学习目标:提示词及提示词模板的运用
- 学习内容一:什么是提示词?
- 学习内容二:提示词模板
- 2.1 聊天提示模板
- 实战:首先需要声明和定义一个模板
- 实战:把提示词模板放入系统消息提示模板、人类消息提示模板等,并进行组合放入大模型
- 提示词模板放入SystemMessagePromptTemplate、HumanMessagePromptTemplate、ChatPromptTemplate等
上一节内容:LangChain学习一:模型-实战
LangChain学习一:模型-实战
学习目标:提示词及提示词模板的运用
学习内容一:什么是提示词?
大白话就是我们问大模型的问题
学习内容二:提示词模板
本次介绍一下几个
- LLM提示模板
- 聊天提示模板
- 示例选择器
- 输出解析器
2.1 聊天提示模板
上一节介绍了,模型有聊天模型,也是我们常用的。这一节,我们看一下如何更好地使用聊天模型。聊天模型和LLM模型在上一节也说过了,是有不同的,聊天模型的每条信息
都与一个角色 进行关联
因此,LangChain提供了几个相关的提示模板,以便轻松构建和处理提示。在查询聊天模型时,建议您使用这些与聊天相关的提示模板,而不是PromptTemplate,以充分发挥基础聊天模型的潜力。
"""
@FileName:chat_prompt.py
@Description:
@Author:lucky
@Time:2023/12/9 10:41
"""
from langchain.prompts import (
ChatPromptTemplate,
PromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
template = "你是一个很有帮助的翻译助手{input_language} 翻译成 {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
print(system_message_prompt)
human_template = "{text}"
print("====================")
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
print(human_message_prompt)
简单介绍一下
-
ChatPromptTemplate (聊天模板):
这个模板用于生成对话的开头,它通常包含一些问候语或提醒用户如何使用机器人的信息。 -
PromptTemplate (提示模板):
这个模板用于为用户提供特定主题或任务的提示。它可以是一个问题,要求用户提供更多信息,或者是一个指导性的陈述,告诉用户下一步该做什么 -
SystemMessagePromptTemplate(系统消息提示模板):
这个模板用于生成系统消息,向用户提供一些重要的信息,比如机器人无法回答某个问题、请求用户提供更多细节等等。 -
AIMessagePromptTemplate (AI消息提示模板):
这个模板用于生成 AI 机器人的回答。它基于预训练的模型,使用大量的数据和算法来生成针对用户问题的响应。 -
HumanMessagePromptTemplate(人类消息提示模板):
这个模板用于生成人类操作者的回答,当机器人无法回答某个问题时,会将问题转交给人类操作者进行回答。
其中{}
里面是变量名称,所以不要用{}
在你的提示词中,如果用,那就不要用LangChain提示词模板。
实战:首先需要声明和定义一个模板
from langchain.callbacks import StreamingStdOutCallbackHandler
from langchain.chat_models import ChatOpenAI
from langchain.prompts import (
ChatPromptTemplate,
PromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.prompts.chat import ChatPromptValue
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
声明一个模板,注意:{变量} 提示词模板的意思就是一个框架里面有一些变量,这些变量也可以理解成为占位符。后面使用提示词模板只要把里面的变量进行具体化就可以了
template = "你是一个很有帮助的翻译助手{input_language} 翻译成 {output_language}."
实战:把提示词模板放入系统消息提示模板、人类消息提示模板等,并进行组合放入大模型
SystemMessagePromptTemplate、HumanMessagePromptTemplate等都有一个from_template方法,用于把我们提示词模板放入
提示词模板放入SystemMessagePromptTemplate、HumanMessagePromptTemplate、ChatPromptTemplate等
from langchain.callbacks import StreamingStdOutCallbackHandler
from langchain.chat_models import ChatOpenAI
from langchain.prompts import (
ChatPromptTemplate,
PromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.prompts.chat import ChatPromptValue
from langchain.schema import (
AIMessage,
HumanMessage,
SystemMessage
)
template = "你是一个很有帮助的翻译助手{input_language} 翻译成 {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
print(f"========system_message_prompt的格式化结果:{system_message_prompt}============\n\n\n")
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
print(f"========human_template的格式化结果:{human_template}============\n\n\n")
这时候我们可以构建一个ChatPromptTemplate(聊天模板),把我们的(系统消息提示模板)和(人类消息提示模板)组合起来,放入大模型。
组合方式:ChatPromptTemplate提供了from_messages方法
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
print(f"========chat_prompt的格式化结果:{chat_prompt}============3\n\n\n")
组合之后我们可以看一下chat_prompt 这个对象里面有什么,
input_variables:包含了所有的变量
messages:是个列表:包含了所有的模板对象
我们可以format_prompt实例化(就是把模板里面的变量进行赋值),然后通过to_messages打印他的实例结构结果
output_to_messages=chat_prompt.format_prompt(input_language="English", output_language="French", text="I love programming.").to_messages()
print(output_to_messages)
或者你也可以直接使用format,与上面不同的是,format直接返回的是值,或者你也可以用上面的方式使用to_string方法,都是可行的
output = chat_prompt.format(input_language="English", output_language="French", text="I love programming.")
print(f"========format的结果:{output}============4\n\n\n")
# or alternatively
output_2 = chat_prompt.format_prompt(input_language="English", output_language="French",
text="I love programming.").to_string()
总结一下:以上把我们的(系统消息提示模板)和(人类消息提示模板)组合起来,放入ChatPromptTemplate(聊天模板)一共用了三个步骤:
- 分别实例化了 系统消息提示模板 和 人类消息提示模板
- 声明ChatPromptTemplate对象的同时把相关模板实例也放进去
- 对ChatPromptTemplate对象模板进行使用,把变量名换成我们想要的
其上以上三个步骤可以作为一个步骤直接使用,也就是不使用模板的方式,我们观察一下,上面的多有工作都是为了节省一些重复的工作,但是送进大模型的就是具体的话,所以直接用下面的方式
output_3=ChatPromptValue(messages=[
SystemMessage(content='你是把英语翻译成法语的得力助手。', additional_kwargs={}),
HumanMessage(content='I love programming.', additional_kwargs={})])
print(f"========format_prompt的结果:{output_3}===========5\n\n\n")
把他送入我们的模型,就可以轻易的获得我们想要的结果了
chat = ChatOpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()],
verbose=True,
# callbacks=[callback],
openai_api_key="none",
openai_api_base="http://127.0.0.1:8000/v1",
model_name="Qwen-7B-Chat"
)
resp = chat(output_3.messages)
print(f"=======模型返回结果:\n{resp}\n\n")
未完成待续