【LangChain系列 1】 LangChain初探

news2024/10/7 10:15:20

原文链接:【LangChain系列 1】LangChain初探https://mp.weixin.qq.com/s/9UpbM84LlsHOaMS7cbRfeQ

本文速读:

  • LangChain是什么

  • LangChain初探

    • 环境准备

    • LLMs

    • Prompt Templates

    • Output Parser

    • 第一个LLMChain应用

01 LangChain是什么


LangChain是一个大语言模型的应用开发框架,在LangChain在基础上,我们可以快速开发AI应用。

02 LangChain初探


环境准备

  • openai api key

注册一个openai开发者帐号,然后可以生成key,获取key来调用open ai的接口,调用接口会消耗费用,帐号中有免费的5美金可以使用。

  • python开发环境

可以使用conda,也可以直接使用python 3,我使用的是python 3.8.9版本。

  • 安装openai和langchain

pip install openaipip install langchain

LLMs

LangChain中有LLMs和ChatModels两种语言模型:

  • LLMs:输入一个字符串,然后返回一个字符串。

  • ChatModels:输入一连串Message,比如说一连串对话,以此为上下评文,然后输入一条Message。

两者的区别是:LLMs偏向于问与答,ChatModel更偏向于对话的场景。

Message包含content和role两个部分,LangChain根据role在不同分为四种Message:

  • HumanMessage:代表人类/用户的message。

  • AIMessage:代表AI的message。

  • SystemMessage:代表系统的message。

  • FunctionMessage:代表函数调用的message。

下面我们看一个简单的例子怎么使用LLMs和ChatModels。

1. 输入一个字符串

from langchain.llms import OpenAIfrom langchain.chat_models import ChatOpenAI

text = "What would be a good company name for a company that makes colorful socks?"

llm = OpenAI()chat_model = ChatOpenAI()
llm.predict(text)
chat_model.predict(text)

2. 输入一个Message

from langchain.llms import OpenAIfrom langchain.chat_models import ChatOpenAI

text = "What would be a good company name for a company that makes colorful socks?"
messages = [HumanMessage(content=text)]

llm = OpenAI()
chat_model = ChatOpenAI()

llm.predict_messages(messages)
chat_model.predict_messages(messages)

Prompt Templates

一般来讲,我们不会将用户的输入或者问题直接传递给LLM应用,而是将它放到一个固定的上下文中,方便LLM应用理解提出的问题,从而给出更准确的回答,这段上下文就是我们所说在prompt templates。

例如:

from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("What is a good name for a company that makes {product}?")
prompt.format(product="colorful socks")

prompt templates的作用就是把product这个变量抽离出来,我们可以根据需要赋予它不同的值,这样就更加灵活。

prompt templates除了可以用于字符串,它还可以用于Message,例如:

from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate)

template = "You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

chat_prompt.format_messages(input_language="English", output_language="French", text="I love programming.")

上述chat_prompt相当于:

[    
    SystemMessage(content="You are a helpful assistant that translates English to French.", additional_kwargs={}),
    HumanMessage(content="I love programming.")
]

Output Parser

output parser的作用就是将LLMs的输出进行解析处理,最终返回给我们需要的格式,例如:

  • 将文本转换为json

  • 将Message转换为字符串

  • 将其它信息转换为字符串

下面这个例子就是将LLM返回的一个字符串转换为以逗号为分隔的列表。

from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""


    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

CommaSeparatedListOutputParser().parse("hi, bye")

第一个LangChain应用

介绍完LangChain应用所需要的最基础的组件后,我们可以开启Hello World之旅了,开始写第一个最简单的LangChain应用。

from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""


    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
    llm=ChatOpenAI(),
    prompt=chat_prompt,
    output_parser=CommaSeparatedListOutputParser()
)
chain.run("fruits")

以上就是本篇的全部内容,我们下一篇再见。

 更多最新文章尽在公众号:大白爱爬山

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

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

相关文章

Linux socket网络编程

一、主机字节序列和网络字节序列 主机字节序列分为大端字节序列和小端字节序列,不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存…

Prometheus+Grafana+AlertManager监控Linux主机状态

文章目录 PrometheusGrafanaAlertManager监控平台搭建开始监控Grafana连接Prometheus数据源导入Grafana模板监控Linux主机状态 同系列文章 PrometheusGrafanaAlertManager监控平台搭建 Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter …

ChatGPT取代人类仍然是空想?有没有一种可能是AI在迷惑人类

ChatGPT自从去年发布以来,就掀起了这些大语言模型将如何颠覆一切的激烈讨论,从为学生写作文、输出SEO文章,甚至取代谷歌成为世界上最受欢迎的搜索引擎,影响领域无所不包,甚至可能取代编剧、小说家和音乐家等从事创意工…

spring复习:(57)PropertyOverrideConfigurer用法及工作原理

一、属性配置文件 dataSource.urljdbc:mysql://xxx.xxx.xxx.xxx/test dataSource.usernameroot dataSource.passwordxxxxxx dataSource.driverClassNamecom.mysql.jdbc.Driver #dataSource.typecom.alibaba.druid.pool.DruidDataSource二、spring配置文件 <?xml version&…

C++STL之vector 容器

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a;C基础 ♈️今日夜电波&#xff1a;恋 —星野源 0:13 ━━━━━━️&#x1f49f;──────── 4:13 &…

亚马逊自动下单软件是怎么操作的?

如果需要亚马逊自动下单软件&#xff0c;那么首选肯定是亚马逊鲲鹏系统&#xff0c;亚马逊鲲鹏系统是一款模拟真人进行全自动化操作的软件&#xff0c;可以注册亚马逊买家号、养号、自动下单留评等&#xff0c;功能非常的齐全。 要进行下单&#xff0c;那么首先我们就需要有一批…

司空见惯 - Feasycom公司介绍(飞易通)

网址&#xff1a; Feasycom IOT Modules Feasycom 是一家专注于物联网产品和服务研发的公司。他们专注于蓝牙模块、Wi-Fi 和 LoRa 技术。Feasycom 为物联网连接提供一站式解决方案&#xff0c;提供自己的蓝牙和 Wi-Fi 协议栈实施方案。他们拥有一系列产品&#xff0c;包括可在…

剑指Offer07.重建二叉树 C++

1、题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例1&#xff1a; Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,15,7] …

2023年国赛 高教社杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…

Gin框架入门

介绍 Gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确&#xff0c;具有快速灵活&#xff0c;容错方便等特点 对于golang而言&#xff0c;web框架的依赖要远比Python&#xff0c;Java之类的要小。自身的net/http足够简单&…

国标视频云服务EasyGBS国标平台进行内网映射两个公网设备配置的详细步骤

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff0c;分发的视频…

无涯教程-PHP - 标量函数声明

在PHP 7中&#xff0c;引入了一个新函数&#xff0c;即标量类型声明。标量类型声明有两个选项- Coercive - 强制性是默认模式。Strict - 严格模式必须明确提示。 可以使用上述模式强制执行以下类型的函数参数- intfloatbooleanstringinterfacesarraycallable 强制模…

686. 重复叠加字符串匹配

686. 重复叠加字符串匹配 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;__686重复叠加字符串匹配__暴力解法__直接调用函数__686重复叠加字符串匹配__KMP算法 原题链接&#xff1a; 686. 重复叠加字符串匹配 https://leetcode.cn/prob…

vue 简单实验 自定义组件 综合应用 传参数 循环

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><ol><!--现在我们为每个 todo-item 提供 todo 对象todo 对象是变量&#xff0c;即其内容可以是动态的。…

Python Pandas 提取csv数据再合并

文章目录 需求思路&#xff1a;步骤伪代码 需求 从不同的csv文件中提取相同的列&#xff0c;然后合并成一个csv 假设有这样一张csv&#xff0c; column A&#xff0c; B&#xff0c; C, D 的数据分别来自a.csv, b.csv, c.csv, d.csv指定的某一列数据。 Title 列的Items是之前…

【自动驾驶】TI SK-TDA4VM 开发板上电调试,AI Demo运行

1. 设备清单 TDA4VM Edge AI 入门套件【略】USB 摄像头(任何符合 V4L2 标准的 1MP/2MP 摄像头,例如:罗技 C270/C920/C922)全高清 eDP/HDMI 显示屏最低 16GB 高性能 SD 卡连接到互联网的 100Base-T 以太网电缆【略】UART电缆外部电源或电源附件要求: 标称输出电压:5-20VDC…

无线路由器实现网络接入

目录 简介 1. 常见的接人互联网方式及设备 2.常见的接入互联网方式比较 2.2接入互联网设备 简介 随着IT技术的不断发展&#xff0c;一些中小型企业和家庭用户对网络带宽的需求越来越高。而传统的接入互联网方式虽然价格便宜&#xff0c;但是其稳定性受线路等其他因素影响。因…

轻松搭建远程Node.js服务端,让你的应用在公共网络中畅行无阻!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

「2024」预备研究生mem-带绝对值的一次与二次不等式方程和不等式图像

一、带绝对值的一次与二次不等式&方程和不等式图像 代入特殊值 带绝对值的方程不等式&#xff1a; 二、课后题

solidity0.8.0的应用案例9:代理合约

代码由OpenZeppelin的Proxy合约简化而来。 代理模式 Solidity合约部署在链上之后,代码是不可变的(immutable)。这样既有优点,也有缺点: 优点:安全,用户知道会发生什么(大部分时候)。坏处:就算合约中存在bug,也不能修改或升级,只能部署新合约。但是新合约的地址与…