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

news2024/11/17 0:24:51

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 os

from 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 ChatOpenAI

prompt = 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_parser
    topic = 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.coloradmin.cn/o/1956225.html

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

相关文章

FRP配置内网穿透52版本以上适用

简述 适用frp配置内网穿透来说我们需要进行简单的区分,具有公网IP的服务器我们简称为服务端,内网的服务器我们可以简称为客户端,frp需要针对不同的服务器配置不同的文件 下载安装包 Linux下载地址 https://github.com/fatedier/frp/relea…

数据丢失不用愁!这四款数据恢复大师免费版助你找回珍贵回忆

我们在办公或者是生活中常常会遇到不小心将手机设备或者计算机当中的重要数据误删除/格式化/或其他不小心丢失的情况,但是不用紧张,这篇文章就是给大家分享如何恢复他们,以下带来除易我数据恢复外的其他好用的数据恢复软件: 第一…

后端笔记(2)--JDBC

1.JDBC简介 *JDBC(Java DataBase Connectivity)就是使用java语言操作关系型数据库的一套API *JDBC本质:(可以使用同一套代码,操作不同的关系型数据库) ​ *官方定义的一套操作所有关系型数据库的规则,即接口 ​ *各…

2024年巴黎奥运会奖牌榜数据源:各国选手为荣誉而战!

奥运会是全球瞩目的盛会,每四年举办一次,汇集了来自超过200个国家的优秀运动员参与夏季和冬季的400多场比赛。这是一项真正的全球综合性运动会,各个国家选手为了荣誉和国家的面子而激烈竞争。2024年的巴黎奥运会将是一场令人期待的盛宴&#…

C语言——选择结构

C语言——选择结构 关系运算符及关系表达式关系运算符关系表达式 逻辑运算符和逻辑表达式逻辑运算符逻辑表达式 选择语句if语句条件运算符switch case语句 关系运算符及关系表达式 关系运算符 关系运算实际上是比较运算,C语言提供了六种关系运算符分别为&#xff…

Go语言教程(一看就会)

全篇文章 7000 字左右, 建议阅读时长 1h 以上。 Go语言是一门开源的编程语言,目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力,以及在现代语言中所见到的高级特性。它是快速的、静态类型编译语言。 第一个GO程序…

一篇文章带你入门爬虫并编写自己的第一个爬虫程序

一、引言 目前我们处在一个信息快速迭代更新的时代,海量的数据以大爆炸的形式出现在网络之中,相比起过去那个通过广播无线电、书籍报刊等传统媒介获取信息的方式,我们现在通过网络使用搜索引擎几乎可以获得任何我们需要的信息资源。 但与此同…

Python3网络爬虫开发实战(7)JavaScript 动态渲染页面爬取

文章目录 一、Selenium1. 基本安装2. 基本使用3. 声明浏览器对象4. 访问页面5. 查找节点6. 节点交互7. 动作链8. 执行 JavaScript9. 获取节点信息10. 切换 Frame11. 延时等待12. 前进后退13. Cookies14. 选项卡管理15. 异常处理16. 反屏蔽17. 无头模式18. Pyppeteer&#xff0c…

《遥远的救世主》读后感

未完待续。。。。 未完待续。。。。 未完待续。。。。 【经典语录】 01. 我们这个民族总是以有文化自居,却忘了问一句:是有什么文化?是真理真相的文化还是弱势文化?是符合事物规律的文化还是违背事物规律的文化?任何…

shell脚本与sed基本语法

Day11 一、shell 基础 1、shell 概念 shell 英文翻译过来是外壳的意思,作为计算机语言来理解可以认为它是 操作系统的外壳。可以通过shell 命令来操作和控制操作系统,比如 Linux中的shell命令就包括 ls、cd、pwd 等等。 2、shell 在内核的基础上编写的…

第一个设计模式——单例模式

目录 一、特点: 二、实现单例模式步骤 三、饿汉式 四、懒汉式 五、双重检查锁 六、静态内部类 七、枚举 八、可能被反序列化和反射破坏什么意思? 九、如何解决呢? 一、特点: 唯一性,单例模式确保程序中只有一…

甘肃粉条:一口爽滑,满心欢喜

在甘肃的美食世界里,粉条是一道独具特色的存在,它以其爽滑的口感和多样的烹饪方式,赢得了无数人的喜爱。甘肃食家巷粉条,选用当地优质的土豆或红薯为原料,经过一系列精细的加工工艺,最终成就了这一根根晶莹…

SSRF (服务端请求伪造)

🎼个人主页:金灰 😎作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 🍊易编橙终身成长社群&#…

2-48 基于matlab的EM算法聚类可视化程序

基于matlab的EM算法聚类可视化程序,通过期望最大化算法(EM)优化类别间距,使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通,可直接运行。 2-48 期望最大化算法(EM) 聚类…

6/9-axis imu sensor/姿态传感器 学习板/开发板 开源 MPU6500 QMC5883 加速度 陀螺仪 地磁传感器

1-应用领域: 游戏交互、3D模型控制、机器人、设备姿态检测、翻转状态检测、无人机、无人船、无人车、VR/AR、AHRS、姿态算法研究与分析,短距无效姿态测量、车辆调平系统,机器震动检测 2-产品硬件规格: 尺寸: 蓝牙:5.0 电池:默认150ma&…

TCP程序设计

TCP概述 建立连接 客户端和服务器端在建立连接时: 服务端是典型的监听接受连接的模式,就是ListenAccept 客户端是主动建立连接的模式,就是Dial Go语言中使用 net包实现网络的相关操作,包括我们TCP的操作。 用于建立连接的典型…

tusiart吐司艺术图像生成、LoRA 模型的使用和训练网站

文章目录 前言一、Tusiart(吐司艺术)是什么二、Tusiart(吐司艺术)主要功能三、Tusiart(吐司艺术) 网站图片四、Tusiart(吐司艺术) 相关地址总结 前言 每天分享一个关于AI项目或者网…

【系统架构设计师】二十、云原生架构设计理论与实践①

目录 一、云原生架构内涵 二、云原生的原则 三、主要架构模式 四、典型的云原生架构反模式 相关推荐 一、云原生架构内涵 云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施…

SQL Server索引碎片的基本知识(附Demo)

目录 前言1. 基本知识2. 检索碎片2.1 dm_db_index_physical_stats2.2 DBCC SHOWCONTIG 3. 修复和优化 前言 索引碎片太高本身会阻碍查询的效率,这个问题要重视 1. 基本知识 索引中的数据页不再连续,导致存储和检索数据时的效率降低 碎片通常发生在以…

虚拟机启动电脑蓝屏问题解决方案

1.查看CPU虚拟化是否开启,没有开启的可以按照教程开启 打开任务管理器,查看是否开启CUP虚拟化 如果没有开启,可以查看下面的链接,进入BIOS开启 win10如何开启虚拟化支持_win10开启cpu虚拟化的方法-系统城 2,控制面板…