大模型学习·第41天:LangChain进阶——提示词模板与Chain链式调用

一、FewShotPromptTemplate(少样本提示词模板)

给模型几个示例,让它按格式回答。示例越多,输出越精准。

python 复制代码
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate

example_template = PromptTemplate.from_template("单词:{word},反义词:{antonym}")

examples_data = [
    {"word": "大", "antonym": "小"},
    {"word": "上", "antonym": "下"}
]

few_shot = FewShotPromptTemplate(
    example_prompt=example_template,
    examples=examples_data,
    prefix="告知我单词的反义词,提供如下示例:",
    suffix="基于前面的示例,{input_word}的反义词是?",
    input_variables=['input_word']
)

五个核心参数example_prompt(示例模板)、examples(示例数据)、prefix(前导说明)、suffix(后置问题)、input_variables(变量列表)。

二、ChatPromptTemplate(聊天提示词模板)

支持注入多轮历史会话,用 MessagesPlaceholder 占位,运行时动态填充。

python 复制代码
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

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

history_data = [
    ("human", "你来写一个唐诗"),
    ("ai", "床前明月光,疑是地上霜..."),
]

prompt_text = chat_template.invoke({"history": history_data})

三种模板对比PromptTemplate 通用单条、FewShotPromptTemplate 支持示例、ChatPromptTemplate 支持多轮历史。三者都有 formatinvoke 方法。

三、Chain链式调用(核心!)

| 串联组件,前一个输出自动成为后一个输入。所有组件必须是 Runnable 接口子类。

python 复制代码
chain = prompt_template | model | parser

result = chain.invoke({"变量": "值"})       # 一次性返回
for chunk in chain.stream({"变量": "值"}):   # 流式输出
    print(chunk.content, end="")

| 的本质a | b 调用 a.__or__(b),Runnable 基类重写了 __or__,让组件可串联。链的类型是 RunnableSequence,本身也是 Runnable,可继续追加组件。

四、输出解析器

转成需要的格式,都是 Runnable 子类,可加入链:

python 复制代码
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser

str_parser = StrOutputParser()   # AIMessage → 字符串
json_parser = JsonOutputParser() # AIMessage → 字典

多段链示例

python 复制代码
chain = first_prompt | model | json_parser | second_prompt | model | str_parser

今日核心总结

  1. FewShotPromptTemplate:给模型示例,五参数控制模板
  2. ChatPromptTemplateMessagesPlaceholder + invoke 动态填充历史
  3. Chain链式调用| 串联组件,输出自动转输入,都需是 Runnable 子类
  4. 输出解析器StrOutputParser 转字符串,JsonOutputParser 转字典
  5. 构建关键:注意前后组件输入输出类型兼容
相关推荐
葡萄成熟时 !5 小时前
JAVA 常用API学习笔记
java·笔记·学习
别动我齐刘海7 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
Vae_Mars7 小时前
C#中的delegate委托
开发语言·c#
0566469 小时前
agent学习——流式响应与文本切分
网络·python·学习
for_ever_love__9 小时前
python基础语法学习: 面向对象的三大特性
开发语言·python·学习
Canmag 兴隆磁性12 小时前
C 系列充磁机
c语言·开发语言·学习·永磁材料·充磁·退磁
公子小六12 小时前
基于.NET的Windows窗体编程之WinForms音频控件
windows·microsoft·c#·.net·音视频·winforms
PC2005-cloud12 小时前
Go学习笔记:基本概念与项目结构——GOPATH、Go Modules 与常用命令
笔记·学习·golang
65岁退休Coder12 小时前
LangChain v1.3.4 笔记 - 08 MCP & 相关概念
后端·python·langchain
绿浪198413 小时前
c# 结构体 能不能直接封送检测
开发语言·c#