AI大模型探索之路-应用篇2:Langchain框架ModelIO模块—数据交互的秘密武器

目录

前言

一、概述​​​​​​​

二、Model

三、Prompt

五、Output Parsers

总结


前言

随着人工智能技术的不断进步,大模型的应用场景越来越广泛。LangChain框架作为一个创新的解决方案,专为处理大型语言模型的输入输出而设计。其中,Model IO(输入输出)模块扮演着至关重要的角色,负责构建和管理数据交互的通道。本文将深入剖析ModelIO模块的工作原理、功能特性,以及如何通过该模块提升数据处理效率,进而加速AI大模型应用的开发。

一、概述

Model IO模块是LangChain框架的数据交互中枢;它不仅负责准备和处理模型的输入数据,还管理模型产出的结果。主要包括一下3部分:

  1. 提示词格式化(Input):接收原始输入数据到将其转换为模型可理解的格式
  2. 大模型调用(Model ):调用大语言模型API获得返回结果
  3. 结果解析处理(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应用能力。

探索未知,分享所知;点击关注,码路同行,寻道人生!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/303057.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过navicat连接SQL Server数据库

本文介绍如何通过Navicat 连接SQL Server数据库。如果想了解如何连接Oracle数据库,可以参考下边这篇文章。如何通过Navicat连接Oracle数据库https://sgknight.blog.csdn.net/article/details/132064235 1、新建SQL Server连接配置 打开Navicat软件,点击…

智过网:非安全专业能否报考注安?哪些专业可以报考?

近年来,随着社会对安全生产管理的日益重视,注册安全工程师(简称注安)这一职业逐渐受到广大从业人员的青睐。然而,对于许多非安全专业的朋友来说,他们可能会困惑:非安全专业是否可以报考注安&…

【VUE】Vue3+Element Plus动态间距处理

目录 1. 动态间距调整1.1 效果演示1.2 代码演示 2. 固定间距2.1 效果演示2.2 代码演示 其他情况 1. 动态间距调整 1.1 效果演示 并行效果 并列效果 1.2 代码演示 <template><div style"margin-bottom: 15px">direction:<el-radio v-model"d…

【状态机dp】【 排序 】 2809使数组和小于等于 x 的最少时间

本文涉及知识点 【状态机dp】 排序 LeetCode 2809. 使数组和小于等于 x 的最少时间 给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒&#xff0c;对于所有下标 0 < i < nums1.length &#xff0c;nums1[i] 的值都增加 nums2[i] 。操作 完成后 &…

在【Cencos7】中安装【Nacos】并适配【PostgreSQL】数据库

在【Cencos7】中安装【Nacos-2.3.0】并适配【PostgreSQL】数据库 安装JDK wget命令下载&#xff1a; wget https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz解压 tar -xzvf jdk-7u80-linux-x64.tar.gz将解压后的目录移动到/opt下 sudo mv jdk…

stable diffusion的从安装到使用

stable-diffusion&#xff0c;一个免费开源的文生图软件&#xff0c;文章主要讲怎么从源码开始安装&#xff0c;以及使用的方式 git地址&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui 本人电脑环境win10&#xff0c;软件pycharm&#xff0c;需要提前…

酷开系统表现强劲,酷开科技视频化运营为大内容布局提供更好交互

最近几年&#xff0c;电视屏幕尺寸是越做越大&#xff0c;越做越薄&#xff0c;在追求电视“颜值”的同时&#xff0c;电视内置系统也成了人们选购电视的很重要的原因。酷开科技深耕电视大屏领域多年&#xff0c;酷开系统表现强劲&#xff0c;好评如潮。 有人一度认为多媒体的…

spring Cache的基本使用

一、spring Cache基本介绍&#xff08;其实是通过代理对象来进行操作的&#xff09; Spring Cache 是 Spring 框架提供的一个缓存抽象&#xff0c;它能够轻松地集成到 Spring 应用程序中&#xff0c;为方法调用的结果提供缓存支持&#xff0c;从而提高应用程序的性能和响应速度…

关于Ansible模块 ④

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 继《关于Ansible的模块 ①》、《关于Ansible的模块 ②》与《关于Ansible的模块 ③》之后&#xff0c;继续学习ansible常用模块之…

REST API实战演练之JavaScript使用Rest API

咱们前面讲了一下如何创建REST API 假期别闲着&#xff1a;REST API实战演练之创建Rest API-CSDN博客 又讲了java客户端如何使用REST API 假期别闲着&#xff1a;REST API实战演练之客户端使用Rest API-CSDN博客 接下来咱们看看JavaScript怎么使用REST API。 一、新建一个…

软件杯 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

(源码+部署+讲解)基于Spring Boot + Vue的车位租赁系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f;…

Angular 使用DomSanitizer

跨站脚本Cross-site scripting 简称XSS&#xff0c;是代码注入的一种&#xff0c;是一种网站应用程序的安全漏洞攻击。它允许恶意用户将代码注入到网页上&#xff0c;其他用户在使用网页时就会收到影响&#xff0c;这类攻击通常包含了HTML和用户端脚本语言&#xff08;JS&…

PaddleVideo:PP-TSM 视频分类

本文记录&#xff1a;使用Paddle框架训练TSM&#xff08;Temporal Shift Module&#xff09; 前提条件&#xff1a;已经安装Paddle和PadleVideo&#xff0c;具体可参考前一篇文章。 1-数据准备&#xff1a; 以UCF101为例&#xff1a;内含13320 个短视频&#xff0c;视频类别&…

ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

前言 ASP.NET Core 内置的标识&#xff08;identity&#xff09;框架&#xff0c;采用的是 RBAC&#xff08;role-based access control&#xff0c;基于角色的访问控制&#xff09;策略&#xff0c;是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…

AI实时换天解决方案:重塑汽车与旅行拍摄新视界

在汽车拍摄与旅行摄影领域&#xff0c;天空作为画面中的重要元素&#xff0c;往往决定着整体视觉效果的成败。美摄科技作为业界领先的AI视觉技术提供商&#xff0c;近日推出了全新的AI实时换天解决方案&#xff0c;为用户带来了前所未有的创意空间与效率提升。 传统的换天技术…

hive-3.1.2分布式搭建与hive的三种交互方式

hive-3.1.2分布式搭建&#xff1a; 一、上传解压配置环境变量 在官网或者镜像站下载驱动包 华为云镜像站地址&#xff1a; hive&#xff1a;Index of apache-local/hive/hive-3.1.2 mysql驱动包&#xff1a;Index of mysql-local/Downloads/Connector-J # 1、解压 tar -zx…

03 Php学习:echo 、 print 、EOF

echo 和 print 在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 echo 和 print 区别: echo - 可以输出一个或多个字符串print - 只允许输出一个字符串&#xff0c;返回值总为 1 注意&#xff1a;echo 输出的速度比 print 快&#xff0c; echo 没有返回值&…

【已完成】把Win10右键改回Win7的模样

win11右键设置成原来模样的方法如下&#xff1a; 1、winr打开运行窗口&#xff0c;输入regedit&#xff0c;按下回车键确认即可打开注册表。 2、在路径中输入&#xff1a;HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID&#xff0c;或者是依次定位点开到CLSID。 3、右键点击CLSID&…

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器&#xff0c;以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…