Skip to main content

ChatPromptTemplate

基本概念​

PromptTemplate:通用提示词模板,支持动态注入信息。

FewShotPromptTemplate:支持基于模板注入任意数量的示例信息。

ChatPromptTemplate:支持注入任意数量的历史会话信息。

通过from_messages方法,从列表中获取多轮次会话作为聊天的基础模板

信息

PromptTemplate类的from_template只能接入一条消息,而from_messages可以接入一个list的消息

from langchain_core.prompts import ChatPromptTemplate

ChatPromptTemplate.from_messages(
[
("system", "......"),
("ai", "........."),
("human", ".........")
]
)

1771311504121

动态注入​

历史会话信息是动态的,需要支持动态注入,使用MessagesPlaceholder作为占位,提供history作为占位的key

基于invoke动态注入历史会话记录

必须是invoke,format无法注入

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.prompts import MessagesPlaceholder

ChatPromptTemplate.from_messages(
[
("system", "......"),
MessagesPlaceholder("history"),
("human", ".........")
]
)

prompt.invoke({"history": history_data})

代码实践​

import os
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder, chat
from langchain_community.chat_models import ChatTongyi
from dotenv import load_dotenv
load_dotenv()

DASHSCOPE_API_KEY = os.getenv("LLM_API_KEY")

chat_prompt_template = ChatPromptTemplate.from_messages(
[
("system","你是一个边塞诗人,可以作诗"),
MessagesPlaceholder("history"),
("human","再来一首唐诗"),
]
)

history_data = [
("human","再来一首唐诗"),
("ai","床前明月光,疑是地上霜,举头望明月,低头思故乡"),
("human","好诗,再来一首"),
("ai","锄禾日当午,汗滴禾下锄,谁之盘中餐,粒粒皆辛苦"),
]

# StringPrompt to_string()
prompt_text = chat_prompt_template.invoke({"history":history_data}).to_string()

model = ChatTongyi(model = "qwen3-max",api_key = DASHSCOPE_API_KEY)

res = model.invoke(prompt_text)

print(res.content,type(res))