AI大模型探索之路-应用篇2:Langchain框架ModelIO模块—数据交互的秘密武器
目录
前言
一、概述
二、Model
三、Prompt
五、Output Parsers
总结
前言
随着人工智能技术的不断进步,大模型的应用场景越来越广泛。LangChain框架作为一个创新的解决方案,专为处理大型语言模型的输入输出而设计。其中,Model IO(输入输出)模块扮演着至关重要的角色,负责构建和管理数据交互的通道。本文将深入剖析ModelIO模块的工作原理、功能特性,以及如何通过该模块提升数据处理效率,进而加速AI大模型应用的开发。
一、概述
Model IO模块是LangChain框架的数据交互中枢;它不仅负责准备和处理模型的输入数据,还管理模型产出的结果。主要包括一下3部分:
- 提示词格式化(Input):接收原始输入数据到将其转换为模型可理解的格式
- 大模型调用(Model ):调用大语言模型API获得返回结果
- 结果解析处理(Output):将大语言模型返回的结果进行解析处理。

二、Model
1、LLMs
LLMs是LangChain 的核心组件,但LangChain并不提供自己的LLMs,它主要允许开发者使用统一的方式与不同的大型语言模型进行交互。这包括与OpenAI、Cohere、Hugging Face等流行的LLMs服务进行接口对接。(类似于Completion,属于文本生成类模型API的支持)
from langchain_openai import OpenAIllm = OpenAI()llm.invoke("奥巴马当了几年总统?")
2、Chat Model
对于需要复杂对话管理能力的应用,LangChain框架提供了ChatModels模块。这个模块利用特殊的语言模型变体,优化了聊天场景下的信息交换和处理流程。(类似于Chat Completion,属于聊天会话类模型API的支持)
from langchain_openai import ChatOpenAIchat_model = ChatOpenAI(model="gpt-3.5-turbo-0125")from langchain_core.messages import (AIMessage,HumanMessage,SystemMessage
)# 设置模型角色,同时设置样例
messages = [SystemMessage(content="你是一个智能助手"),HumanMessage(content="第二十一届世界杯在哪儿举行的?"),AIMessage(content="在俄罗斯"),HumanMessage(content="冠军是哪个球队")]# chat_model.invoke(messages)chat_model.invoke(messages).content
三、Prompt
通过Prompts模块提供了灵活的提示词模板和处理机制,允许用户高效地定义和格式化这些提示,以便与LLMs进行有效的交互。
1、Prompt Template
用于创建动态的提示词模板,可以基于一定规则插入变量。例如:
## 可以动态传入参数
from langchain.prompts import PromptTemplate# 定义提示词模板
prompt_template = PromptTemplate.from_template("Tell me a {adjective} joke about {content}."
)
# 传入参数,格式化提示词模板
prompt_template.format(adjective="funny", content="chickens")## 也可以不传参数from langchain.prompts import PromptTemplateprompt_template = PromptTemplate.from_template("Tell me a joke")prompt_template.format()
2、ChatPromptTemplate
专门用于支持聊天场景,模拟多轮对话中的上下文交换。例如:
from langchain.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_messages([("system", "You are a helpful AI bot. Your name is {name}."),("human", "Hello, how are you doing?"),("ai", "I'm doing well, thanks!"),("human", "{user_input}"),]
)messages = chat_template.format_messages(name="Bob", user_input="What is your name?")chat_model.invoke(messages)
3、Few-shot prompt templates
利用有限示例来丰富大型语言模型(LLMs)的知识基础,并指导其推理过程。向模型提供针对性的样本集合,这些样本作为参考点,有效地提升模型在处理新颖问题时的逻辑推理能力和答案生成的精确度;同时还增强了模型在面对未知或复杂情境下的思维连贯性和适应性。
from langchain.prompts.few_shot import FewShotPromptTemplatefrom langchain.prompts.prompt import PromptTemplateexamples = [{"question": "富兰克林·德拉诺·罗斯福和亚伯拉罕·林肯中哪个担任总统的时间更长?","answer":"""这里需要后续问题吗:是。后续问题:富兰克林·德拉诺·罗斯福担任了几年总统?中间答案:富兰克林·德拉诺·罗斯福担任了12年的总统。后续问题:亚伯拉罕·林肯则担任了几年总统?中间答案:亚伯拉罕·林肯则担任了5年的总统。因此最终答案是:富兰克林·德拉诺·罗斯福"""},{"question": "百度的创始人是何时出生的?","answer":"""这里需要后续问题吗:是。后续问题:百度的创始人是谁?中间答案:百度的创始人是李彦宏。后续问题:李彦宏是什么时候出生的?中间答案:李彦宏于1968年11月17日出生。因此最终答案是:1968年11月17日"""},{"question": "特雷西·麦克格雷迪和姚明,谁在NBA打的赛季多?","answer":"""这里需要后续问题吗:是。后续问题:特雷西·麦克格雷迪在NBA打了几个赛季?中间答案:特雷西·麦克格雷迪在NBA打了9个赛季。后续问题:姚明在NBA打了几个赛季?中间答案:姚明在NBA打了8个赛季。因此最终答案是:特雷西·麦克格雷迪"""}]
1)使用一个样本
# 定义提示词模板
example_prompt = PromptTemplate(input_variables=["question", "answer"], template="Question: {question}\n{answer}")
# 使用第一个样例作为参数 并输出打印
print(example_prompt.format(**examples[0]))#输出结果
Question: 富兰克林·德拉诺·罗斯福和亚伯拉罕·林肯中哪个担任总统的时间更长?这里需要后续问题吗:是。
后续问题:富兰克林·德拉诺·罗斯福担任了几年总统?
中间答案:富兰克林·德拉诺·罗斯福担任了12年的总统。
后续问题:亚伯拉罕·林肯则担任了几年总统?
中间答案:亚伯拉罕·林肯则担任了5年的总统。
因此最终答案是:富兰克林·德拉诺·罗斯福
2)使用所有样本
# 使用所有的样例
prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,suffix="Question: {input}",input_variables=["input"]
)print(prompt.format(input="马云比马化腾大几岁?"))
Question: 富兰克林·德拉诺·罗斯福和亚伯拉罕·林肯中哪个担任总统的时间更长?这里需要后续问题吗:是。
后续问题:富兰克林·德拉诺·罗斯福担任了几年总统?
中间答案:富兰克林·德拉诺·罗斯福担任了12年的总统。
后续问题:亚伯拉罕·林肯则担任了几年总统?
中间答案:亚伯拉罕·林肯则担任了5年的总统。
因此最终答案是:富兰克林·德拉诺·罗斯福Question: 百度的创始人是何时出生的?这里需要后续问题吗:是。
后续问题:百度的创始人是谁?
中间答案:百度的创始人是李彦宏。
后续问题:李彦宏是什么时候出生的?
中间答案:李彦宏于1968年11月17日出生。
因此最终答案是:1968年11月17日Question: 特雷西·麦克格雷迪和姚明,谁在NBA打的赛季多?这里需要后续问题吗:是。
后续问题:特雷西·麦克格雷迪在NBA打了几个赛季?
中间答案:特雷西·麦克格雷迪在NBA打了9个赛季。
后续问题:姚明在NBA打了几个赛季?
中间答案:姚明在NBA打了8个赛季。
因此最终答案是:特雷西·麦克格雷迪Question: 马云比马化腾大几岁?
3)调用测试
llm.invoke(prompt.format(input="特朗普的爸爸的女儿的兄弟是谁?"))
'
这里需要后续问题吗:是。
后续问题:特朗普的爸爸是谁?
中间答案:特朗普的爸爸是弗雷德·特朗普。
后续问题:弗雷德·特朗普的女儿是谁?
中间答案:弗雷德·特朗普的女儿是玛丽·安娜·特朗普。
后续问题:玛丽·安娜·特朗普的兄弟是谁?
中间答案:玛丽·安娜·特朗普的兄弟是唐纳德·特朗普。
因此最终答案是:唐纳德·特朗普'
五、Output Parsers
为了进一步处理和解析LLMs的输出结果,LangChain提供了一系列的Output Parsers。这些解析器能够将模型的文本输出转换为更加结构化的格式,便于后续的处理和使用。
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import PromptTemplate
from langchain_openai import OpenAImodel = OpenAI()# 将输出解析为逗号分隔的列表
parser = CommaSeparatedListOutputParser()
format_instructions = parser.get_format_instructions()prompt = PromptTemplate(template="List five {subject}.\n{format_instructions}",input_variables=["subject"],partial_variables={"format_instructions": format_instructions}
)## LCEL 链式表达式语言用法 (前一个的输入,作为后一个的输出)
chain = prompt | model | parser
chain.invoke({"subject": "ice cream flavors"})输出:
['chocolate','vanilla','strawberry','mint chocolate chip','cookies and cream']
总结
通过以上相关的功能模块,LangChain框架的Model IO模块为大型语言模型的数据交互提供了强大支持。其精心设计的接口和工具让开发者能够更加专注于模型的实际应用,同时简化了大模型调用数据流的管理细节。降低了大模型开发门槛,使得开发者可以便捷地实现高级的AI应用能力。
探索未知,分享所知;点击关注,码路同行,寻道人生!
相关文章:
AI大模型探索之路-应用篇2:Langchain框架ModelIO模块—数据交互的秘密武器
目录 前言 一、概述 二、Model 三、Prompt 五、Output Parsers 总结 前言 随着人工智能技术的不断进步,大模型的应用场景越来越广泛。LangChain框架作为一个创新的解决方案,专为处理大型语言模型的输入输出而设计。其中,Model IO&#…...
【SSH】群晖开启ssh访问
群晖开启ssh访问 假设 你需要设置群晖 账号 test-user 开启ssh访问 设置 你的 test-user 为管理员权限 否则你无法通过cmd 面板 连接访问 群晖你需要哪个账号 就使用哪个账号终端 cmd连接 否则需要考虑后续创建 rsa 公密钥文件的 所属权 问题账号密码连接登录终端 ssh -p 端…...
Vue 移动端(H5)项目怎么实现页面缓存(即列表页面进入详情返回后列表页面缓存且还原页面滚动条位置)keep-alive缓存及清除keep-alive缓存
一、需求 产品要求:Vue移动端项目进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要缓存并且还原页面滚动条位置 二、实现思路 1、使用Vue中的keep-alive组件,keep-alive提供了路由缓存功能 2、因为我项…...
【MVCC】深入浅出彻底理解MVCC
MVCC概述 MVCC(Multi-Version Concurrency Control)即多版本并发控制。主要是为了提高数据库的并发性能而提供的,采用了不加锁的方式处理读-写并发冲突,确保了任何时刻的读操作都是非阻塞的。只需要很小的开销,就可以…...
【问题解决】ubuntu安装新版vscode报code-insiders相关错误
问题 目前 vscode官网 最新的包为 insiders_1.89.0-1712297812_amd64.deb ,双击或者使用sudo dpkg -i code-insiders_1.89.0-1712297812_amd64.deb安装后报错,执行其他命令也报错。 安装环境:ubuntu18.04 dpkg: 处理软件包 code-insiders (…...
【Python】面向对象(专版提升2)
面向对象 1. 概述1.1面向过程1.2 面向对象 2. 类和对象2.1 语法2.1.1 定义类2.1.2 实例化对象 2.2 实例成员2.2.1 实例变量2.2.2 实例方法2.2.3 跨类调用 3. 三大特征3.1 封装3.1.1 数据角度3.1.2 行为角度3.1.3 案例:信息管理系统3.1.3.1 需求3.1.3.2 分析3.1.3.3 设计 3.2 继…...
Vscode设置滚轮进行字体大小的调节
Vscode设置滚轮进行字体大小的调节 正常的话按 ctrl 或者 ctrl - 进行字体的大小调节 1.打开Vscode,找打设置的图标,在点击设置,或者直接使用快捷键,【ctrl ,】 2. 在搜索框搜索Font Ligatures 3.双击进入settings.json ,找到如…...
【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件
【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件 往期回顾 【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 一、最终…...
Spring Validation解决后端表单校验
NotNull:从前台传递过来的参数不能为null,如果为空,会在控制台日志中把message打印出来 Range:范围,最大多少,最小多少 Patten,标注的字段值必须符合定义的正则表达式(按照业务规则࿰…...
Harmony鸿蒙南向驱动开发-UART接口使用
功能简介 UART指异步收发传输器(Universal Asynchronous Receiver/Transmitter),是通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输。 两个UART设备的连接示意图如下,UART与其他模块一…...
【示例】MySQL-事务控制示例:账户转账-savepoint关键字
前言 本文讲述MySQL中的事务,以账户转账为例,体会事务的概念,并讲解事务相关的一个关键字用法:savepoint 示例 数据准备 drop table if exists account;create table account(id int primary key AUTO_INCREMENT comment ID,n…...
STM32使用标准版RT-Thread,移植bsp中的板文件后,想使用I/O设备模型,使用串口3或者串口4收发时,发现串口3或者串口4没反应
STM32移植RT-Thread出现的问题及解决办法 问题原因解决方法 问题 使用标准版RT-Thread,移植bsp中的板文件后,想使用I/O设备模型,使用串口3或者串口4收发时,发现串口3或者串口4没反应。出现问题:程序一直跑在 while (__HAL_UART_…...
MVCC(解决MySql中的并发事务的隔离性)
MVCC 如何保证事务的隔离性? 1.排他锁:如一个事务获取了一个数据行的排他锁,其他事务就不能再获取改行的其他锁。 2.MVCC:多版本并发控制。 MVCC: 1.隐藏字段 1.DB_TRX_ID:最近修改事务的id。默认值从0开…...
第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证
文章目录 第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证在处理请求之前在 CSP 中进行身份验证。 第四十八章 为 Web 应用程序实现 HTTP 身份验证 - 在处理请求之前在 CSP 中进行身份验证 在处理请求之前在 CSP 中进行身份验证。 这是…...
家庭网络防御系统搭建-siem之security onion 安装配置过程详解
本文介绍一下security onion的安装流程,将使用该工具集中管理终端EDR和网络NDR sensor产生的日志。 充当SIEM的平台有很多,比如可以直接使用原生的elastic以及splunk等,security onion的优势在于该平台能够方便的集成网络侧(比如…...
【MATLAB源码-第23期】基于matlab的短时傅里叶STFT信号变换仿真,得到信号的时频曲线图。
1、算法描述 短时傅里叶变换(Short-Time Fourier Transform,STFT)是傅里叶变换的一种扩展,用于分析信号在时域和频域上的变化。描述如下: 1. **时域与频域分析**: - 信号通常以时域的形式表示…...
链表中倒数最后k个结点【c语言】
#include <stdio.h> #include <stdlib.h>typedef struct Node {int data;struct Node* next; } Node, *LinkedList;// 创建一个新节点 Node* createNode(int data) {Node* newNode (Node*)malloc(sizeof(Node));if (newNode NULL) {printf("Error! Unable t…...
在一台恢复测试机器上验证oracle备份有效性
一 目的 定期将生产环境oracle数据库恢复到一台测试环境数据库服务器上,以验证备份是否有效,是否能正常恢复。 二 环境 这里以恢复orcl1库为例,计划在orcl这个实例上进行恢复测试。 三 实验步骤 3.1 在目标端创建和源端一样的备份目录 ①…...
Harmony鸿蒙南向驱动开发-MIPI CSI
CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。 物理层支持HS(High Speed&…...
最优算法100例之43-包含min函数的栈
专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push及pop的时间复杂…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
