AI的学习之路_5_提示词模版

LangChain通用提示词模版

PromptTemplate表示提示词模版,可以构建一个自定义的基础提示词模版,支持变量的注入,最终生成所需的提示词

from langchain_community.embeddings import DashScopeEmbeddings
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 创建提示词
prompt_template = PromptTemplate.from_template(
    "你是一个{A}老师,请简单介绍一下{B}相关的知识点, 回答的时候{C}一点"
)

# 调用format进行信息注入 得到提示词文本
prompt_text = prompt_template.format(A="c++", B="引用", C="精简")

print(prompt_text)

model = Tongyi(
    model="qwen-max"
)

res = model.invoke(input=prompt_text)

print(res)

image

构建执行链条

from langchain_community.embeddings import DashScopeEmbeddings
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 创建提示词
prompt_template = PromptTemplate.from_template(
    "你是一个{A}老师,请简单介绍一下{B}相关的知识点, 回答的时候{C}一点"
)

model = Tongyi(
    model="qwen-max"
)

chat = prompt_template | model  # 链条结构:提示词-模型

res = chat.invoke(input={"A": "C++", "B": "const", "C": "简洁"})  # 用字典的方式将文本进行替换

print(res)

image

可见这种写法还是非常有用的

FewShot提示词模版的使用

尝试拼接一些FewShot的提示词模版

from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate

# 示例模版
example_template = PromptTemplate.from_template("国家:{G}, 首都:{S}")

# 示例的动态注入
example_data=[
    {"G": "中国", "S": "北京"},
    {"G": "日本", "S": "东京"}
]

few_shot_template = FewShotPromptTemplate(
    example_prompt=example_template,    # 示例数据的模版
    examples=example_data,  # 示例的数据 list内套字典
    prefix="告知我国家的首都,我提供如下的示例",    # 示例之前的提示词
    suffix="基于前面的示例,告诉我{G}的首都是什么",    # 示例之后的提示词
    input_variables=["G"]  #声明在前缀或后缀中的所需注入的变量名
)

prompt_text = few_shot_template.invoke(input={"G": "刚果"}).to_string()

print(prompt_text)

image

使用一下

from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 示例模版
example_template = PromptTemplate.from_template("国家:{G}, 首都:{S}")

# 示例的动态注入
example_data=[
    {"G": "中国", "S": "北京"},
    {"G": "日本", "S": "东京"}
]

few_shot_template = FewShotPromptTemplate(
    example_prompt=example_template,    # 示例数据的模版
    examples=example_data,  # 示例的数据 list内套字典
    prefix="告知我国家的首都,我提供如下的示例",    # 示例之前的提示词
    suffix="基于前面的示例,告诉我{G}的首都是什么",    # 示例之后的提示词
    input_variables=["G"]  #声明在前缀或后缀中的所需注入的变量名
)

prompt_text = few_shot_template.invoke(input={"G": "美国"}).to_string()

model = Tongyi(
    model="qwen-max"
)

print(model.invoke(input=prompt_text))

image

format和invoke

format定义于BasePromptTemplate
invoke定义了Runnable
其中,BasePromptTemplate是Runnable的派生类
所以BasePromptTemplate的派生类都能使用format和invoke

对比维度 format 方法 invoke 方法
核心功能 填充 PromptTemplate 模板中的占位符,生成标准化纯文本提示词,仅做本地文本格式化处理,不调用AI 调用大语言模型(LLM/Chat Model/Chain)执行推理,基于输入内容生成AI回答,是与模型交互的核心操作
返回值类型 格式化后的字符串(纯文本),无额外格式/结构 多数场景返回字符串(AI生成的回答文本);部分Chain/结构化输出场景返回字典(如包含result键);ChatModel返回ChatMessage对象
传参方式 1. 关键字参数:template.format(键1=值1, 键2=值2)
2. 字典解包:template.format(**{"键1":值1, "键2":值2})
参数需与模板占位符完全匹配
1. 基础用法:llm.invoke("输入文本")
2. 复杂用法:chain.invoke({"input": "输入文本"})(需匹配Chain定义的输入键)
ChatModel可传ChatMessage列表:chat.invoke([HumanMessage(content="输入文本")])
解析方式 无需解析,直接使用纯文本结果;仅需处理字符串格式(如换行、特殊字符) 1. 字符串结果:直接使用或简单文本处理(分割、提取关键词)
2. 字典结果:通过键取值(如result["result"])
3. ChatMessage结果:通过message.content提取文本
依赖对象 仅依赖 PromptTemplate 实例,无需连接模型/服务 依赖 LLM/Chat Model/Chain 实例,需配置模型地址、参数,需连接本地/远程模型服务
执行耗时 本地操作,耗时极短(微秒/毫秒级) 需调用模型推理,耗时由模型规模、输入长度决定(毫秒~秒级)

具体的使用时的区别可自行验证

ChatPromptTemplate

简单的拼接一下模版

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

chart_prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个小学算术老师"),   # 系统设定
        MessagesPlaceholder("history"), #历史对话,等待动态注入
        ("human", "所以结果是多少啊")   # 最后问的结果
    ]
)

# 历史聊天记录,这里可以从其他地方获取,数据库,文件什么的,都可以
history_data = [
    ("human", "给出一个随机数"),
    ("ai", "17"),
    ("human", "再给一个"),
    ("ai", "23"),
]

# 返回一个StringPromptValue
prompt_text = chart_prompt_template.invoke({"history": history_data}).to_string()

print(prompt_text)

image

加入模型来试一下

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.chat_models.tongyi import ChatTongyi

chart_prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个小学算术老师"),   # 系统设定
        MessagesPlaceholder("history"), #历史对话,等待动态注入
        ("human", "所以加法结果是多少啊")   # 最后问的结果
    ]
)

# 历史聊天记录,这里可以从其他地方获取,数据库,文件什么的,都可以
history_data = [
    ("human", "给出一个随机数"),
    ("ai", "17"),
    ("human", "再给一个"),
    ("ai", "23"),
]

# 返回一个StringPromptValue
prompt_text = chart_prompt_template.invoke({"history": history_data}).to_string()

model = ChatTongyi(
    model="qwen-max"
)

print(model.invoke(prompt_text).content)

image

posted @ 2026-03-22 16:18  灵垚克府  阅读(5)  评论(0)    收藏  举报