langchain主要模块(一):模型输入输出

news2024/11/25 12:39:03

langchain2之模型输入输出

  • langchain
    • 1.概念
    • 2.主要模块
        • 模型输入/输出 (Model I/O)
        • 数据连接 (Data connection)
        • 链式组装 (Chains)
        • 代理 (Agents)
        • 内存 (Memory)
        • 回调 (Callbacks)
    • 3.模型输入/输出 (Model I/O)
      • 提示
        • 提示模板
        • 示例选择器
      • 模型
        • LLMs
        • ChatModels
      • 输出解释器

langchain

1.概念

什么是LangChain?

源起:LangChain产生源于Harrison与领域内的一些人交谈,这些人正在构建复杂的LLM应用,他在开发方式

上看到了一些可以抽象的部分。一个应用可能需要多次提示LLM并解析其输出,因此需要编写大量的复制粘贴。

LangChain使这个开发过程更加简单。一经推出后,在社区被广泛采纳,不仅有众多用户,还有许多贡献者参

与开源工作。

还有大模型本身的问题,无法感知实时数据,无法和当前世界进行交互。

LangChain是一个用于开发大语言模型的框架。

主要特性:

\1. 数据感知:能够将语⾔模型与其他数据源进⾏连接。

\2. 代理性:允许语⾔模型与其环境进⾏交互。可以通过写⼯具的⽅式做各种事情,数据的写⼊更新。

主要价值:

1、组件化了需要开发LLM所需要的功能,提供了很多工具,方便使用。

2、有一些现成的可以完整特定功能的链,也可以理解为提高了工具方便使用。

2.主要模块

在这里插入图片描述

LangChain 为以下模块提供了标准、可扩展的接口和外部集成,按照复杂程度从低到高列出:

模型输入/输出 (Model I/O)

与语言模型进行接口交互

数据连接 (Data connection)

与特定于应用程序的数据进行接口交互

链式组装 (Chains)

构造调用序列

代理 (Agents)

根据高级指令让链式组装选择要使用的工具

内存 (Memory)

在链式组装的多次运行之间持久化应用程序状态

回调 (Callbacks)

记录和流式传输任何链式组装的中间步骤

3.模型输入/输出 (Model I/O)

在这里插入图片描述

Model I/O = (Model + Prompt + Output Parsers)

  • Model:各种LLM,ChatGPT,ChatGLM,Claude,通义千问,vicuna

  • Prompts:模型输⼊的模板,可以动态替换内容,以及⼀些其他的⼯具模板

  • Output parsers:从模型输出中提取信息

提示

提示模板

prompt template

提示模板是指一种可复制的生成提示的方式。它包含一个文本字符串(“模板”),可以从最终用户那里接收一组参数并生成提示。

提示模板可以包含:

  • 向语言模型提供指令,
  • 一组少样本示例,以帮助语言模型生成更好的回复,
  • 向语言模型提出问题。
from langchain import PromptTemplate


template = """\
你是一个新公司的命名咨询顾问.
为制作 {product} 的公司起一个好的名字?
"""

prompt = PromptTemplate.from_template(template)
prompt.format(product="五颜六色的袜子")
'你是一个新公司的命名咨询顾问.
为制作 五颜六色的袜子 的公司起一个好的名字?'

示例选择器

Example selectors

如果你有一些示例,可以需要去使用一些示例加到Prompt中。

from langchain.prompts import PromptTemplate
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector

# 这里有很多关于创建反义词的示例。
examples = [
    {"input": "happy", "output": "sad"},
    {"input": "tall", "output": "short"},
    {"input": "energetic", "output": "lethargic"},
    {"input": "sunny", "output": "gloomy"},
    {"input": "windy", "output": "calm"},
]

example_prompt = PromptTemplate(
    input_variables=["input", "output"],
    template="输入: {input}\n输出: {output}",
)
example_selector = LengthBasedExampleSelector(
    # 这些是它可以选择的示例。
    examples=examples,
    # 这是用来格式化示例的PromptTemplate。
    example_prompt=example_prompt,
    # 这是格式化的示例应该的最大长度。
    # 长度是通过下面的get_text_length函数来测量的。
    max_length=25,
    # 这是用来获取字符串长度的函数,用于确定要包含哪些示例。
    # 它被注释掉了,因为如果没有指定,它会作为默认值提供。
    # get_text_length: Callable[[str], int] = lambda x: len(re.split("\n| ", x))
)
dynamic_prompt = FewShotPromptTemplate(
    # 我们提供一个ExampleSelector,而不是示例。
    example_selector=example_selector,
    example_prompt=example_prompt,
    prefix="给出每个输入的反义词",
    suffix="输入: {adjective}\n输出:",
    input_variables=["adjective"],
)
print(dynamic_prompt.format(adjective="big"))
# 由于max_length设置了25.所以只有一个示例.
long_string = "big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else"
print(dynamic_prompt.format(adjective=long_string))
给出每个输入的反义词

输入: happy
输出: sad

输入: tall
输出: short

输入: energetic
输出: lethargic

输入: sunny
输出: gloomy

输入: windy
输出: calm

输入: big
输出:
给出每个输入的反义词

输入: happy
输出: sad

输入: big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else
输出:

模型

LLMs

输入为文本字符串,输出为文本字符串的模型

from langchain.llms import OpenAI

llm = OpenAI()
# 输入为字符串,输出也为字符串
output = llm("给我讲个笑话")
print(output)
两个病人在医院病房里,一个说:“你知道为什么医院的灯都是绿色的吗?”另一个病人答道:“不知道,为什么?”第一个病人说:“因为绿色是医生的最爱!”

ChatModels

由语言模型支持,输入为聊天消息列表,输出为聊天消息的模型

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI()
chat([HumanMessage(content="把下面的英文翻译为中文: I love programming.")])
AIMessage(content='我喜欢编程。', additional_kwargs={}, example=False)

输出解释器

语言模型输出文本。但很多时候,您可能希望获得比仅文本更结构化的信息。这就是输出解析器的作用。

输出解析器是帮助结构化语言模型响应的类。一个输出解析器必须实现两个主要方法:

  • “获取格式化指令”: 一个返回包含语言模型输出应如何格式化的字符串的方法。
  • “解析”: 一个接受字符串(假设为语言模型的响应)并将其解析为某种结构的方法。

然后再加一个可选的方法:

  • “带提示解析”: 一个接受字符串(假设为语言模型的响应)和提示(假设为生成此响应的提示)并将其解析为某种结构的方法。在需要从提示中获取信息以重试或修复输出的情况下,通常提供提示。

示例:列表解析器 comma_separated

当您想返回一个逗号分隔项的列表时,可以使用此输出解析器。

  1. 加载本地模型
from gpt_server import ChatGLMService

llm_model_path = "/mnt/code/LLM_Service/model/chatglm2-6b-32k/"
chatLLM = ChatGLMService()
chatLLM.load_model(model_name_or_path=llm_model_path)
  1. 构建列表解释器
from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import PromptTemplate, ChatPromptTemplate, HumanMessagePromptTemplate

output_parser = CommaSeparatedListOutputParser()
format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate(
    template="List five {subject}.\n{format_instructions}",
    input_variables=["subject"],
    partial_variables={"format_instructions": format_instructions}
)
_input = prompt.format(subject="ice cream flavors")
output = chatLLM(_input)
print(output)

冰淇淋口味有很多种,这里列举五种常见的口味: 1. 巧克力味 2. 草莓味 3. 香草味 4. 芒果味 5. 巧克力、草莓和香草混合味

  1. 解析
output_parser.parse(output)

[‘冰淇淋口味有很多种,这里列举五种常见的口味:\n\n1. 巧克力味\n2. 草莓味\n3. 香草味\n4. 芒果味\n5. 巧克力、草莓和香草混合味’]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机竞赛 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 …

opencv(python)视频按帧切片/cv2.VideoCapture()用法

一、介绍 cv2.VideoCapture是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头,或从视频文件中读取图像。通过cv2.VideoCapture,用户可以轻松地捕捉、保存、编辑和传输视频流数据。 使用cv2.VideoCapture可以实现以下功能: 1. 打开…

基于微信小程序的自习室系统设计与实现,可作为毕业设计

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 需求分析3.1用户需求分析3.1.1 学生用户3.1.3 管理员用户 4 数据库设计4.4.1 E…

linux————ansible

一、认识自动化运维 自动化运维: 将日常IT运维中大量的重复性工作,小到简单的日常检查、配置变更和软件安装,大到整个变更流程的组织调度,由过去的手工执行转为自动化操作,从而减少乃至消除运维中的延迟,实现“零延时”…

Could not find artifact com.mysql:mysql-connector-j:pom:unknown

在 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope> </dependency> 添加版本号 这里用的是8.0.33版本&#xff0c;输入5.0的版本依然会报错 我自身用的是5.0…

做期权卖方有资金限制吗?

做期权卖方一般是有经济实力的自然人或机构做的&#xff0c;而且必须开立保证金账户&#xff0c;万一买方要行权就会有较高的风险&#xff0c;当然&#xff0c;做期权卖方在交易方面对经验和行情的预判是有一定要求的&#xff0c;下文介绍做期权卖方有资金限制吗&#xff1f; 一…

TCP服务器使用多路复用

启用复用的作用&#xff1f; 解决linux系统中的io阻塞问题&#xff0c;让多个阻塞io接口可以一起执行。无需开启线程&#xff0c;节省系统资源。 linux系统中的阻塞io有哪些&#xff1f; scanf、read管道、eadTcp套接字、acppet接收连接请求 有以下两种方式实现多路复用&am…

广州xx策划公司MongoDB恢复-2023.09.09

2023.09.08用户的MongoDB数据库被勒索病毒攻击&#xff0c;数据全部被清空。 提示&#xff1a; mongoDB的默认端口为27017&#xff0c;黑客通常通过全网段扫描27017是否开放判断是否是MongoDB服务器。一旦发现27017开放&#xff0c;黑客就会用空密码、弱密码尝试连接数据库。黑…

总结987

考研倒计时102天 时间记录&#xff1a; 6:20起床 7:00~7:40早读&#xff0c;13年tex2 7:50~8:20实验室 8:30~8:34列日计划 8:40~11:18进步本回顾&#xff0c;记录 11&#xff1a;20~12:20计算机网络网课 2:10~3:05计网20道选择题 3:07~4:42政治1000题25道选择题纠错 …

idea纯java工程使用gradle指定生成jar的Main-Class,idea生成jar

build.gradle核心代码如下&#xff1a; jar {manifest {attributes "Main-Class": "com.example.sample.Application"}from {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }} } 完整代码如下: group com.example.sample ver…

蚂蚁金融大模型

9月8日&#xff0c;蚂蚁集团在上海外滩大会发布的蚂蚁金融大模型基于蚂蚁基础大模型&#xff0c;针对金融产业深度定制。蚂蚁基础大模型平台具备万卡异构集群&#xff0c;其中千卡规模训练 MFU 可达到40%&#xff0c;集群有效训练时长占比90&#xff05;以上&#xff0c; RLHF …

前端面试题JS篇(6)

ES6 Module 和 CommonJS 模块的区别&#xff1a; CommonJS 是对模块的浅拷⻉&#xff0c;ES6 Module 是对模块的引⽤&#xff0c;即 ES6 Module 只存只读&#xff0c;不能改变其值&#xff0c;也就是指针指向不能变&#xff0c;类似 const&#xff1b; import 的接⼝是 read-o…

计算机网络第四节 数据链路层

一&#xff0c;引入数据链路层的目的 1.目的意义 数据链路层是体系结构中的第二层&#xff1b; 从发送端来讲&#xff0c;物理层可以将数据链路层交付下来的数据&#xff0c;装换成光&#xff0c;电信号发送到传输介质上了 从接收端来讲&#xff0c;物理层能将传输介质的光&…

ARM接口编程—RTC(exynos 4412平台)

RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电。 RTC内部原理 RTC寄存器 RTC控制寄存器 …

Leetcode 504.七进制数

给定一个整数 num&#xff0c;将其转化为 7 进制&#xff0c;并以字符串形式输出。 示例 1: 输入: num 100 输出: "202"示例 2: 输入: num -7 输出: "-10" 我的答案&#xff1a; 一、信息 1.目的实现十进制向其他进制的转换。 2.原理&#xff1a;公…

openGauss学习笔记-67 openGauss 数据库管理-创建和管理普通表-创建表

文章目录 openGauss学习笔记-67 openGauss 数据库管理-创建和管理普通表-创建表67.1 背景信息67.2 创建表 openGauss学习笔记-67 openGauss 数据库管理-创建和管理普通表-创建表 67.1 背景信息 表是建立在数据库中的&#xff0c;在不同的数据库中可以存放相同的表。甚至可以通…

Redis模块二:缓存分类 + Redis模块三:常见缓存(应用)

缓存大致可以分为两大类&#xff1a;1&#xff09;本地缓存 2&#xff09;分布式缓存 目录 本地缓存 分布式缓存 常见缓存的使用 本地缓存&#xff1a;Spring Cache 分布式缓存&#xff1a;Redis 本地缓存 本地缓存也叫单机缓存&#xff0c;也就是说可以应⽤在单机环…

Spring Boot 动态加载jar文件

Spring Boot 动态加载jar文件 接口实现&#xff1a; package org.bc.device;public interface IDeviceHandler {String start();String stop(); }实现类&#xff1a; package org.bc.device; public class MqttDevice implements IDeviceHandler{ Override public String s…

深度学习:循环神经网络RNN及LSTM

深度学习&#xff1a;循环神经网络RNN及LSTM 循环神经网络RNN原理代码 长短期记忆网络LSTM原理遗忘门记忆门输出门 代码 循环神经网络RNN 原理 对于传统的神经网络&#xff0c;它的信号流从输入层到输出层依次流过&#xff0c;同一层级的神经元之间&#xff0c;信号是不会相互…

双目立体视觉

#理想模型图 其中&#xff1a; b 为基线&#xff0c;即两个相机原点之间的距离 &#xff1b; fl和fr 分别为左右相机的焦距&#xff0c;理想的双目相机flfrf &#xff1b; cl和cr 分别为左右相机的光心&#xff0c;理想的双目相机clcr &#xff1b; xl和xr 分别为空间中的一点…