【深入 LangChain 的 Model I/O】提示设计、模型调用与输出解析全解析
目录
什么是 Model I/O?
一、提示模板(PromptTemplate)
1.1 什么是提示模板?
1.2 常见提示模板类型
二、模型调用(Model Predict)
三、输出解析(Output Parser)
综合示例:三段式 Model I/O 流水线
总结
在构建大语言模型(LLM)应用时,我们经常会经历这样一个过程:
编写提示 → 调用模型 → 处理输出
LangChain 将这一流程模块化,统称为 Model I/O。本篇文章将带你深入理解什么是 Model I/O,它包含哪些部分,怎么使用,以及它为什么是 LangChain 的核心能力之一。
什么是 Model I/O?
LangChain 的 Model I/O 模块将对语言模型的交互抽象为三个核心阶段:
阶段 | 作用 |
---|---|
提示模板 | 构造输入给模型的内容,支持变量插入、格式统一等 |
模型调用 | 使用通用接口调用各种 LLM(OpenAI、Qwen、Claude 等) |
输出解析 | 将模型的非结构化输出解析为结构化、可用的程序化格式 |
这三个环节各自独立、可组合,也可以统一组成一个强大的“提示-执行-解析”流水线。
一、提示模板(PromptTemplate)
1.1 什么是提示模板?
提示模板是为语言模型构建输入内容的模板化方案,它的作用是:
-
动态插入变量:根据用户输入自动填充提示内容;
-
提升可读性:统一格式,逻辑清晰;
-
支持复用与维护:更改模板内容不会影响整个应用逻辑。
一个简单例子:
from langchain.prompts import PromptTemplatetemplate = PromptTemplate.from_template("请为以下主题写一首诗:{topic}")
prompt = template.format(topic="春天")
# 输出: 请为以下主题写一首诗:春天
你无需手动拼接字符串,LangChain 自动帮你处理变量插值与语法规范。
1.2 常见提示模板类型
类型 | 描述 | 示例 |
---|---|---|
PromptTemplate | 传统的字符串提示模板,适用于非对话任务 | 文本摘要、改写等 |
ChatPromptTemplate | 多角色聊天模板,支持系统/用户/AI 消息组合 | ChatGPT 风格对话 |
FewShotPromptTemplate | 小样本提示模板,通过示例指导模型行为 | 情感分类、代码示例 |
PipelinePromptTemplate | 多段提示拼接形成一个完整的上下文 | 多步骤提示场景 |
PartialPromptTemplate | 支持部分变量先注入,延后填完整提示 | 多阶段生成流程 |
自定义模板 | 自定义子类以扩展功能 | 特定结构或多语言支持 |
📌 小贴士:ChatPromptTemplate 是构建多轮对话机器人或角色扮演 AI 的首选模板。
二、模型调用(Model Predict)
LangChain 提供了统一的模型接口,你只需关心模型“做什么”,不用关心“怎么调用”。
常用模型类:
模型类 | 用途 | 示例 |
---|---|---|
ChatOpenAI | OpenAI 聊天模型 | gpt-3.5-turbo |
DashScopeChatModel | 阿里百炼模型支持 | qwen-turbo |
LLamaCpp , Ollama | 本地部署模型 | 无需联网,私有化 |
ChatAnthropic | Claude 系列支持 | Claude 3 系列 |
通过链式组合,你可以快速将提示模板连接模型:
chain = prompt | llm # prompt 为 PromptTemplate, llm 为 ChatOpenAI
三、输出解析(Output Parser)
模型输出通常是非结构化的文本,但在真实业务中,我们更需要结构化数据。
LangChain 提供多种输出解析器(Parser),帮助你从结果中提取有用内容:
类型 | 功能 |
---|---|
StrOutputParser | 默认返回字符串(用于简单场景) |
StructuredOutputParser | 将输出转换为 JSON / dict 等结构化格式 |
PydanticOutputParser | 支持复杂结构与验证的解析器 |
正则解析器 / 自定义解析器 | 适用于固定格式或复杂结构提取 |
示例:
from langchain.output_parsers import StructuredOutputParser
from langchain.output_parsers.schema import ResponseSchemaschemas = [ResponseSchema(name="title", description="新闻标题"),ResponseSchema(name="summary", description="简要内容")]parser = StructuredOutputParser.from_response_schemas(schemas)
parsed = parser.parse("标题:LangChain发布新版本\n摘要:优化了RAG性能")
综合示例:三段式 Model I/O 流水线
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import StrOutputParserprompt = PromptTemplate.from_template("请总结以下文本内容:{text}")
llm = ChatOpenAI()
parser = StrOutputParser()chain = prompt | llm | parserresult = chain.invoke({"text": "LangChain 是一个用于构建 LLM 应用的框架..."})
print(result)
输出结果: LangChain 是一个帮助你构建 AI 应用的强大工具,支持链、Agent、RAG 等组件。
总结
LangChain 的 Model I/O 模块本质上是在做一件事:
把 输入设计 → 模型执行 → 输出提取 变得标准、模块化、可复用。
模块 | 功能关键点 |
---|---|
Prompt | 模板化生成提示,支持变量插值 |
Model | 一致性调用不同 LLM,适配主流平台 |
OutputParse | 抽取结构化信息,降低处理成本 |
如果你打算构建一个严肃的 AI 应用,无论是智能问答、客服机器人,还是知识管理系统,Model I/O 都是你绕不开的第一步。