大模型学习·第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 支持多轮历史。三者都有 format 和 invoke 方法。

三、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. ChatPromptTemplate :MessagesPlaceholder + invoke 动态填充历史
  3. Chain链式调用 :| 串联组件,输出自动转输入,都需是 Runnable 子类
  4. 输出解析器 :StrOutputParser 转字符串,JsonOutputParser 转字典
  5. 构建关键:注意前后组件输入输出类型兼容
相关推荐
dadaobusi1 小时前
学习: PCIe 6.0 的 L0p
学习
小羊没烦恼!2 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
燕落南枝3 小时前
CSS 学习:类型选择器与 AI 注释实战
css·人工智能·学习
昂好的day3 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
波力海苔夹心脆6756 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
Swilderrr7 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
kkkkkkkkkk_Z7 小时前
新手自学嵌入式 | 学习日记:LCD显示原理、PWM控制、电容触摸屏(GT9147)驱动开发与项目实战
驱动开发·学习
LMT流氓兔8 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
昂好的day8 小时前
VisionMaster(VM) 标定工具详解(上):为什么必须标定 + 九点标定手眼标定
开发语言·数码相机·c#
LXT7128 小时前
每日英语一读|为什么夏天的雷雨,总爱在傍晚出现?
深度学习·学习