提示词模板案例代码
案例1:
""" 列表参数格式是dict类型 dict 构成的列表,格式为[{“role”:... , “content”:...}] chat_prompt = ChatPromptTemplate( [ {"role": "system", "content": "你是AI助手,你的名字叫{name}。"}, {"role": "user", "content": "请问:{question}"} ] ) """fromlangchain_core.promptsimportChatPromptTemplate# 创建聊天提示模板,用于构建AI助手的对话上下文# 该模板包含两个消息:AI助手的自我介绍和用户问题chat_prompt=ChatPromptTemplate.from_messages([{"role":"system","content":"你是AI助手,你的名字叫{name}。"},{"role":"user","content":"请问:{question}"}])# 格式化聊天提示模板,填充具体的助手名称和问题内容# 参数name: AI助手的名字# 参数question: 用户提出的问题# 返回值: 格式化后的消息列表message=chat_prompt.format_messages(name="小问",question="什么是LangChain")# 打印格式化后的消息内容print(message)
案例2
""" message 类型 System/Human/AIMessage 是 langchain 中用于构建不同角色的一个类。 它通常用于创建聊天消息的一部分,特别是当你构建一个多轮对话的 prompt 模板时,区分系统、AI、和人类消息 """fromlangchain_core.messagesimportSystemMessage,HumanMessagefromlangchain_core.promptsimportChatPromptTemplate# 创建聊天提示模板,用于构建AI助手的对话上下文# 该模板包含两个消息:AI助手的自我介绍和用户问题chat_prompt=ChatPromptTemplate([SystemMessage(content="你是AI助手,你的名字叫{name}。"),HumanMessage(content="请问:{question}")])# 格式化聊天提示模板,填充具体的助手名称和问题内容# 参数name: AI助手的名字# 参数question: 用户提出的问题# 返回值: 格式化后的消息列表message=chat_prompt.format_messages(name="亮仔",question="什么是LangChain")# 打印格式化后的消息内容print(message)
案例3
fromlangchain_core.promptsimportChatPromptTemplate chatPromptTemplate=ChatPromptTemplate([("system","你是一个AI开发工程师,你的名字是{name}。"),("human","你能帮我做什么?"),("ai","我能开发很多{thing}。"),("human","{user_input}"),])prompt=chatPromptTemplate.format_messages(name="小谷AI",thing="AI",user_input="7 + 5等于多少")print(prompt)
案例4
""" 如果我们不确定消息何时生成,也不确定要插入几条消息,比如在提示词中添加聊天历史记忆这种场景, 可以在ChatPromptTemplate添加MessagesPlaceholder占位符,在调用invoke时,在占位符处插入消息。 显式使用MessagesPlaceholder """fromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessagefromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholder# 构建一个 ChatPromptTemplate,包含多种消息类型:prompt=ChatPromptTemplate.from_messages([# 添加一条系统消息,设定 AI 的角色或行为准则("system","你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题"),# 插入 memory 占位符,用于填充历史对话记录(如多轮对话上下文)MessagesPlaceholder("memory"),# 添加一条用户问题消息,用变量 {question} 表示("human","{question}")])# 调用 prompt.invoke 来格式化整个 Prompt 模板# 传入的参数中:# - memory:是一组历史消息,表示之前的对话内容(多轮上下文)# - question:是当前用户的问题prompt_value=prompt.invoke({"memory":[# 用户第一轮说的话HumanMessage("我的名字叫亮仔,是一名程序员111"),# AI 第一轮的回应AIMessage("好的,亮仔你好222")],# 当前问题:结合上下文,测试模型是否记住了用户名字"question":"请问我的名字叫什么?"})# 打印生成的完整 prompt 文本,格式化后的聊天记录print(prompt_value.to_string())
案例5
""" "placeholder" 是 ("placeholder", "{memory}") 的简写语法, 等价于 MessagesPlaceholder("memory")。 隐式使用MessagesPlaceholder """fromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessagefromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholder# 使用 ChatPromptTemplate 构建一个多角色对话提示模板prompt=ChatPromptTemplate.from_messages([# 占位符,用于插入对话“记忆”内容,即之前的聊天记录(历史上下文)("placeholder","{memory}"),# 系统消息,用于设定 AI 的角色 —— 是一个资深的 Python 应用开发工程师("system","你是一个资深的Python应用开发工程师,请认真回答我提出的Python相关的问题"),# 用户当前提问,使用变量 {question} 进行动态填充("human","{question}")])# 使用 invoke 方法传入上下文变量,生成格式化后的对话 prompt 内容prompt_value=prompt.invoke({# memory:是之前的对话上下文,会被插入到 {memory} 的位置"memory":[# 用户第一轮对话HumanMessage("我的名字叫亮仔,是一名程序员"),# AI 第一轮回答AIMessage("好的,亮仔你好")],# 当前的问题,将替换模板中的 {question}"question":"请问我的名字叫什么?"})# 使用 .to_string() 将格式化后的对话链转换成纯文本字符串,方便查看输出print(prompt_value.to_string())
案例6
""" 使用ChatPromptTemplate构造方法直接实例化 实例化时需要传入messages: Sequence[MessageLikeRepresentation] messages 参数支持如下格式: tuple 构成的列表,格式为[(role, content)] dict 构成的列表,格式为[{“role”:... , “content”:...}] Message 类构成的列表 """fromlangchain_core.promptsimportChatPromptTemplateimportosfromlangchain.chat_modelsimportinit_chat_model chatPromptTemplate=ChatPromptTemplate([("system","你是一个AI开发工程师,你的名字是{name}。"),("human","你能帮我做什么?"),("ai","我能开发很多{thing}。"),("human","{user_input}"),])prompt=chatPromptTemplate.format_messages(name="小谷AI",thing="AI",user_input="7 + 5等于多少")print(prompt)llm=init_chat_model(model="qwen-plus",model_provider="openai",api_key=os.getenv("aliQwen-api"),base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")print()print("======================")result=llm.invoke(prompt)print(result)print(result.content)
案例7
""" from_messages 作用:将模板变量替换后,直接生成消息列表(List[BaseMessage]), 一般包含:SystemMessage``HumanMessage``AIMessage 常用场景:用于手动查看或调试 Prompt 的最终“消息结构”或者自己拼接进 Chain。 实例化时需要传入messages: Sequence[MessageLikeRepresentation] messages 参数支持如下格式: tuple 构成的列表,格式为[(role, content)] template = ChatPromptTemplate( [ ("system", "你是一个AI开发工程师,你的名字是{name}。"), ("human", "你能帮我做什么?"), ("ai", "我能开发很多{thing}。"), ("human", "{user_input}"), ] ) dict 构成的列表,格式为[{“role”:... , “content”:...}] chat_prompt = ChatPromptTemplate( [ {"role": "system", "content": "你是AI助手,你的名字叫{name}。"}, {"role": "user", "content": "请问:{question}"} ] ) Message 类构成的列表 """importosfromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.promptsimportChatPromptTemplate# 创建聊天提示模板,包含系统角色设定和用户问题格式# 系统消息定义了AI助手的角色,人类消息定义了用户问题的格式chat_prompt=ChatPromptTemplate.from_messages([("system","你是一个{role},请回答我提出的问题"),("human","请回答:{question}")])# 格式化聊天提示模板,填充角色和问题参数# 参数role: 指定AI助手的角色身份# 参数question: 用户提出的具体问题# 返回值: 格式化后的消息列表#prompt_value = chat_prompt.format_messages(role="python开发工程师", question="冒泡排序怎么写")prompt_value=chat_prompt.format_messages(**{"role":"python开发工程师","question":"堆排序怎么写"})# 打印格式化后的提示消息print(prompt_value)print()# 使用指定的角色和问题参数填充模板,生成具体的提示内容# role: 指定AI扮演的角色# question: 用户提出的具体问题prompt_value2=chat_prompt.invoke({"role":"python开发工程师","question":"堆排序怎么写"})# 输出生成的提示内容print(prompt_value2.to_string())prompt_value3=chat_prompt.format(**{"role":"python开发工程师","question":"快速排序怎么写"})# 输出生成的提示内容print(prompt_value3)