如何跨越 LangChain 应用研发的最后一公里

240515-cover.jpg

说 [LangChain] 是现在最流行的 AI 应用开发框架,应该没有人出来反对吧。LangChain 的出现极大地简化了基于大型语言模型(LLM)的 AI 应用构建难度,如果把 AI 应用比作一个人的话,那么 LLM 相当于这个人的“大脑”,而 LangChain 则是通过提供各种工具和抽象,来充当这个人的“四肢”,两者结合起来,就能实现一个具备“思考能力”的 AI 应用。不过,本文并不介绍 LangChain 的具体使用方法,而是希望与读者探讨一下 LangChain 应用研发的最后一公里问题 —— 如何部署 LangChain 应用,以 AWS 为例。你说为什么要部署到 AWS 上?当然是羊毛太香了,日常使用完全免费。

首先,明确一下本文讨论的范围:本文讨论的不仅仅是将一个 LangChain 应用的代码部署到云上跑起来,如果只考虑这一点的话,那么我们只需要考虑使用虚拟机 EC2、容器服务 Fargate 或者 Lambda 函数就可以完成。但是,一个完整的 AI 应用通常还需要一系列的基础服务来支撑,比如使用数据库来保存会话历史,使用向量数据库存储知识库的 Embedding 等。想要实现功能更加完善的 AI 应用甚至还需要消息队列、API Gateway 等能力。因此,本文要讨论的是:如何将一个 LangChain 应用及其依赖的基础服务一并部署到云上。

🔗 LangServe

熟悉 LangChain 生态的读者看到这可能会联想到 LangChain 的一个子项目 [LangServe]。LangServe 的目标就是简化 LangChain 应用的部署,它可以将 LangChain 应用封装成 API 服务器,并默认提供 stream、async、docs、playground 等端口。但只有 LangServe 还远没有解决 LangChain 应用部署的问题,因为它最终提供的只是一个基于 FastAPI 的 API 服务器,类似 Flask、Django 等框架。如何部署 LangServe 应用到云上,如何创建与管理应用依赖的基础服务,这些问题 LangServe 并没有解决。

不过,LangChain 正在积极地在 LangSmith 平台上提供托管 LangServe 的能力,说明 LangChain 社区也意识到 LangChain 应用产品化部署的问题,正在努力解决。但即使如此,LangChain 应用依赖的基础服务怎么办?难道 LangSmith 也要提供这些服务吗?应用托管、后端服务,这些不都是云服务商的核心竞争力吗?为何不如直接使用 AWS、Azure 等云服务商提供的服务呢?

🪄 部署 LangChain 应用的 3 种方式

那我们就来看看如何将 LangChain 应用部署到 AWS 上。在这里,我们介绍三种不同方式来部署 LangChain 应用。如果你有更好的方式,欢迎一起探讨。

⚙️ AWS CDK

在一次 AWS GenAI Day 活动中,AWS 邀请了 LangChain 的 CEO Harrison Chase,活动主题就是“使用 LangChain 和 Amazon Bedrock 构建和部署前沿生成式 AI 应用”,你可以从[这里]观看活动的录播。

有趣的是,活动中有大量篇幅在介绍 AWS 提供的 OpenSearch、Bedrock、Kendra 等多种服务都可以和 LangChain 集成,但是在最后演示的时候,却没有演示如何创建这些服务的实例,也没有演示如何部署 LangChain 应用到 AWS 上,只演示了一个在本地执行的 LangChain 应用,应用中使用了已经部署好的 AWS Bedrock 和 Kendra 的服务实例。

不过,我在视频最后的 Resources 列表里发现了 [langchain-aws-template 这个 GitHub 仓库],里面包含了两个 AWS 与 LangChain 集成的示例应用,并且包含了完整的部署指南,整个部署过程包括 4 步:

  1. 使用 Conda 创建特定的 Python 环境;
  2. 配置密钥等应用所需数据;
  3. 执行 Bash 脚本打包应用;
  4. 使用 AWS CDK 部署应用。

看起来非常简单对不对?但是,如果你需要实现更复杂的功能,依赖更多的基础服务,那你就需要修改打包过程、CDK 部署脚本等,这个过程对于不熟悉 AWS CDK,或者不熟悉 AWS 云服务的开发者来说,是有一定门槛的。

此外,我们之前做过一个[对比],IaC 代码的代码量是业务代码的 2-3 倍,这意味着使用 IaC 工具就需要花费大量的时间来维护 IaC 代码,而开发者显然希望能够更多地专注于业务代码开发,毕竟开发目标是实现应用功能。

这里简单提一下,AWS CDK 是基础设施即代码(IaC)工具中的一种,此类工具除了 AWS CDK 之外,还有 Terraform、Pulumi 等。使用方式类似,也同样存在上面提到的这些问题。

⌨️ AWS 控制台

如果不使用 AWS CDK,我们可以通过登录 AWS 控制台手动创建应用依赖的基础服务。不过这种方式操作起来非常繁琐,需要在控制台的不同页面反复跳转,来创建不同的服务实例,以及服务实例之间的权限配置等,这对于不熟悉 AWS 的开发者来说,是一个很大的挑战。并且这些过程也不能被自动化,团队协作、持续集成、持续部署就更不用想了,对于复杂的应用来说,这种方式显然不可行。

从上面的介绍可以看出,基于 AWS CDK 的部署方式具有一定的门槛,而手动创建的方式又不够自动化,并且这两种方式存在一些相同的问题:

  1. 极易出错:两种方式本质都是手动逐个创建细粒度的服务实例,容易出现配置遗漏、错误等问题,而这些问题在部署过程中很难被发现,只有在应用运行时才会暴露出来。
  2. 需要 AWS 背景知识:不管是通过 CDK 代码定义服务实例,还是通过控制台手动创建服务实例,都需要开发者对 AWS 的服务有深入的了解,包括应用直接依赖的 DynamoDB、S3 等服务,以及间接依赖的 IAM 等服务。
  3. 权限配置繁琐:出于安全的考虑,我们通常以最小权限原则来配置各个资源服务实例的权限,如果由开发者通过 CDK 或者控制台手动管理这些权限,那必定是一个非常繁琐的配置过程,并且在修改业务代码后,也非常容易忘记更新权限配置。
  4. 依赖管理:在将 LangChain 应用发布成 AWS Lambda 函数实例时,我们需要在打包时将应用依赖的 SDK 一并打包进来,而这个过程需要开发者手动管理,一方面容易遗漏依赖库,另一方面如果本地设备的操作系统、CPU 架构与 AWS 平台不一致,那打包过程就会更加麻烦。

🤖️ Pluto

从上面的分析可以看到,AWS 等大型云服务商提供了很多强大的服务,但距离开发者真正用起来却还有一段距离,上手门槛还挺高的。因此,我们产生一个想法:能不能直接从 LangChain 应用代码中直接推导出应用的基础设施资源需求,然后自动在 AWS 等云平台上创建相应的资源实例,通过这种方式来简化资源创建和应用部署的流程。基于此,我们构建了一个研发工具 [Pluto]。

Pluto 是一款面向个人开发者的研发工具,致力于帮助开发者更便捷地构建云和 AI 应用,解决上面提到的一系列云的易用性相关问题。开发者可以在应用代码中直接定义与使用应用所需的云服务,包括 AWS DynamoDB、SageMaker 等。Pluto 会通过静态程序分析的方式从代码中自动获取应用程序的基础设施需求,并在指定云平台上创建相应的服务实例。可以从我们的 [GitHub 仓库]进一步了解 Pluto 的设计与理念,本文就不再过多赘述了。

那么,使用 Pluto 部署 LangChain 应用是什么样的体验呢?我们来看一个简单的示例:

import osfrom pluto_client import Router, HttpRequest, HttpResponse
from langchain_core.pydantic_v1 import SecretStr
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAIprompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")
model = ChatOpenAI(model="gpt-3.5-turbo",api_key=SecretStr(os.environ["OPENAI_API_KEY"]),
)
output_parser = StrOutputParser()def handler(req: HttpRequest) -> HttpResponse:chain = prompt | model | output_parsertopic = req.query.get("topic", "ice cream")joke = chain.invoke({"topic": topic})return HttpResponse(status_code=200, body=joke)router = Router("pluto")
router.get("/", handler)

上面这段代码就是一个基于 Pluto 实现的 LangChain 应用,是不是就像普通 Python 应用一样?但是,只需要执行 pluto deploy,Pluto 就能在 AWS 平台上构建出下图所示的应用架构,过程中会自动创建 API Gateway、Lambda 资源实例,并且配置好 API Gateway 到 Lambda 的路由、触发器、权限等。

限于篇幅,上面这个例子只展示了将 LangChain 应用与 API Gateway 资源集成,同样采用变量定义的方式,可以集成 DynamoDB、S3、SageMaker 等更多资源,你可以从[这里]获取更多示例。

因为基础设施配置是和应用代码一起定义的,所以开发者可以根据自己的需求随意更改代码,在下次 pluto deploy 时,Pluto 会自动更新应用的基础设施配置,而不需要开发者进行额外的操作,解决了上面提到的容易出错、代码打包、权限配置繁琐等体验问题。

💬 总结

本文讨论了多种将 LangChain 应用部署到 AWS 上的方式,发现像 AWS、Azure 等大型云服务提供商虽然提供了很多强大的服务,但是开发者真正用起来却并不轻松,上手门槛较高。这或许也是 LangSmith、Modal、LaptonAI 等 AI Infra 产品出现的原因,他们致力于成为 AI 应用的一站式服务商。而我们则从另一个角度出发,直接从应用代码中推导出应用的基础设施需求,自动在云平台上创建相应的服务实例,以此帮助开发者解决应用部署问题。我们希望最终能够让开发者专注于业务逻辑的编写,即使是对 AWS 不太熟悉的开发者,也能不纠结于基础设施的繁琐配置,将应用轻松地部署到云上。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

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

相关文章

基于vue-grid-layout插件(vue版本)实现增删改查/拖拽自动排序等功能(已验证、可正常运行)

前端时间有个需求,需要对33(不一定,也可能多行)的卡片布局,进行拖拽,拖拽过程中自动排序,以下代码是基于vue2,可直接运行,报错可评论滴我 部分代码优化来自于GPT4o和Clau…

78.WEB渗透测试-信息收集-框架组件识别利用(2)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:77.WEB渗透测试-信息收集-框架组件识别利用(1) shiro:…

支持向量机 及其分类案例详解(附Python 代码)

支持向量机分类器预测收入等级 我们将构建一个支持向量机(SVM)分类器,以预测一个人基于14个属性的收入等级。我们的目标是判断收入是否高于或低于每年$50,000。因此,这是一个二元分类问题。我们将使用在此处可用的人口普查收入数…

JDBC基础

目录 一、JDBC概述 二、JDBC搭建 1.注册JDBC驱动程序 2.建立与数据库连接 3.获得Satement执行sql语句 4.关闭与数据库的链接通道 三、PreparedStatement和Statement 1、代码的可读性和可维护性 2、最重要的一点是极大地提高了安全性 四、结果集处理 一、JDBC概述 JD…

c语言指针2

文章目录 一、void * 指针二、const关键字1.const修饰变量2.const修饰指针变量2. 1 const放在*的右边2. 2 const放在*的左边2. 3 总结 三、指针的运算3. 1指针的加减运算3. 2 指针 - 指针3. 3 指针的关系运算 四、野指针4. 1 什么叫野指针?4. 1 野指针的成因4.1.1 指…

Poetry入门教程

以前使用模块管理和虚拟环境为pip和Virtualenv组合,随着Rasa、Dify等开源项目逐步使用Poetry模块管理,也开始尝试使用Poetry。本文简要介绍Poetry入门操作。 1.Poetry安装 可参考Poetry官网[1]推荐的安装方式: 通过Windows的Powershell如下…

C++编程: 使用 Nanomsg 进行 PUB-SUB 模式基准测试

文章目录 0. 引言1. Nanomsg简介1.1 可扩展性协议类型1.2 支持的传输机制1.3 NanoMsg 架构与实现 2. PUB-SUB 模式基准测试 0. 引言 Nanomsg 作为一款高性能的通信库,支持多种消息传递模式,其中包括 PUB-SUB(发布-订阅)。 本篇文…

yolov8环境安装

一、Miniconda Conda 是一个开源的包管理和环境管理系统,它能运行、安装和更新各种包和依赖,同时还能创建隔离的环境。 1.1 下载安装 Miniconda https://repo.anaconda.com/miniconda/Miniconda3-py39_24.5.0-0-Windows-x86_64.exe1.2 打开 Anaconda …

向量数据库(一)

写在前面 最近在学习一些 AI 相关的开发,了解了一些未接触过的东西,其中有一部分是向量数据库,想开一个专题,对相关的内容做一下整理。 内容 什么是向量数据库 一般在我们的日常开发中,使用的数据库存储主要有两种…

Matlab进阶绘图第65期—带分组折线段的柱状图

带分组折线段的柱状图是在原始柱状图的基础上,在每组柱状图位置处分别添加折线段,以进行对比或添加额外信息。 由于Matlab中未收录带分组折线段的柱状图的绘制函数,因此需要大家自行设法解决。 本文使用自制的BarwithGroupedLine小工具进行…

大模型算法面试题(十四)

本系列收纳各种大模型面试题及答案。 1、微调后的模型出现能力劣化,灾难性遗忘是怎么回事 微调后的模型出现能力劣化,灾难性遗忘(Catastrophic Forgetting)是一个在机器学习领域,尤其是在深度学习和大模型应用中频繁出…

数据库(MySQL)-DQL数据查询语言

DQL(Data Query Language 数据查询语言)的用途是查询数据库数据,如select语句。其中,可以根据表的结构和关系分为单表查询和多表联查。 单表查询 单表查询:针对数据库中的一张数据表进行查询 全字段查询 语法:select 字段名 fro…

报警系统与机房动力环境监控系统的集成及报警功能实施

在当今的运维行业中,确保关键基础设施的安全与稳定运行面临着诸多挑战,如设备故障、环境异常、非法入侵等。为了有效应对这些挑战,报警系统与机房动力环境监控系统的集成变得至关重要。本文旨在为运维团队提供关于报警系统与机房动力环境监控…

使用frrouting、gns3、pim实现ipv6组播(三)

翻遍整个网络都没有找到用ipv6进行组播推流的实例。 朋友说:A true strong person never complains about the environment 那么,就由我来创造一个吧~ 此文涉及到的所有软件均为开源软件,进行深入学习与其他平台移植时十分便利。 记得点赞额…

如何在GPU服务器上安装Stable Diffusion webUI

一、前提条件 1、硬件条件 GPU:12G,建议16G以上,还是尽量勾搭,好像现在最大32G,目前个人性价比24G有时长出售。 内存:16G以上,建议32G,也是越大越好。 硬盘:最好使用…

2024年【金属非金属矿山(地下矿山)安全管理人员】考试报名及金属非金属矿山(地下矿山)安全管理人员模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年金属非金属矿山(地下矿山)安全管理人员考试报名为正在备考金属非金属矿山(地下矿山)安全管理人员操作证的学员准备的理论考试专题,每个月更新的金属非…

抖音矩阵管理系统功能说明:一站式掌握

在当下这个信息爆炸的时代,抖音作为短视频领域的佼佼者,其用户规模持续扩大,影响力日益增强。对于内容创作者和营销人员来说,如何高效管理抖音账号,实现内容的多平台分发和精准触达,成为了亟待解决的问题。…

Redis常用指令(不定期更新)

Redis常用指令(不定期更新) 查询指定前缀key的数量查看键空间事件开启键空间通知 查询指定前缀key的数量 查询【TEST前缀】的key数量 EVAL "return #redis.call(keys,TEST:*)" 0返回信息 查看键空间事件 config get notify-keyspace-even…

Navicat Charts Creator for Mac:数据可视化利器

Navicat Charts Creator for Mac是一款专为Mac用户设计的数据可视化工具,它将复杂的数据转化为直观、易懂的图表,帮助用户更好地理解和分析数据。 该软件支持连接到多种数据库,如MySQL、MariaDB、PostgreSQL等,轻松获取实时数据&…

【QGroundControl二次开发】七.QGC自定义MAVLink消息MavLink通信协议 C++应用

1. 接收解析源码分析 通过接收串口或UDP发来的的字节流buffer&#xff0c;长度lengthbuffer.size()&#xff0c;通过下列脚本解析&#xff0c;每解析出一个mavlink数据包就执行onMavLinkMessage函数 for(int i 0 ; i < length ; i){msgReceived mavlink_parse_char(MAVL…