原文:LangChain: 类似 Flask/FastAPI 之于 Django,LangServe 就是「LangChain 自己的 FastAPI」 - 知乎
当前阶段对开发者来讲,一个让人感到舒服的开发流程应该具备这么五特性:
- 支持 LCEL,让人赏心悦目又可以简化开发流程的 dsl 必须支持
- 优雅简洁的 cli ,可以方便的通过 cli 来创建项目骨架、对话式配置需要用到的依赖、变量等
- 「reload」支持,可以边改代码边看到结果
- 改完马上就能看到 demo 的结果,而不是为了看一眼结果转头去调一堆部署细节到头来忘了接下来想干啥...
- 多机多卡集群部署支持,llm 时代就是大数据时代,真正有意义的生产级部署面临的数据预处理、数据并行、参数并行、推理并行都不是单机的思路可以解决的,所以仅仅针对单机环境优化的开发工具除了自嗨没有意义。
让人惊喜的是 LangServe 已经完成了前四个,第五个且再看。
LangServe 是 LangChain 的 Eugene Yurtsev 帅哥主刀开发的一个快速开发应用框架,跟 LangChain 的关系有点类似于 Flask/FastAPI 之于 Django 的关系,ta 自己 github 上的介绍是 「LangServe helps developers deploy LangChain runnables and chains as a REST API.」,其中 runnable 就是「人民群众最喜欢的 LCEL」的基本构成模块,LangServe 刚开始开发还没「满月」,git 上的第一条 commit 是 9 月 29 号,以至于 langserve.ai 域名都还没人抢注(只能帮到这儿了.... ;)
说实话头一次看到 LangServe 我还以为是 LangChainServe,以至于名字看过几回都没仔细研究 ta,jina-ai 的 LangChainServe 挺好的,由 Jina 开发并开源出来,方便大家把写好的 LangChain 服务放到 Jina 云上去,毕竟 Jina 本身就是从 BERT-as-a-service 开始的,把机器学习中的服务独立放出来是它家看家本领。
看一下 LangServe 的 Features:
- LangServe 是由 LangChain 团队自己开发,作用跟 jina 的 LangChainServe 类似(估计这也是为啥 jina 把LangChainServe 设成 archived 的原因),技术选型上都差不多但没有绑定特定的云(当然 ta 的 cli 里面倒是率先支持了 gcp)。初步看下来只是更加倾向于 LCEL 了,把 DAG 的每一部分都打散开,做成 web service,更加方便拆开、重组,单这一个点就很吸引人!
- 内置了 langchain cli,通过运行 「langchain your-project」就可以像运行 「django-admin startproject mysite」写 web 一样的方式写 llm 应用!更进一步,在生成项目骨架之后, LangServe 提供了 makefile 脚本,方便通过 make start/deploy/test 等指令快速部署,当前版本的部署实现是通过 uvicorn 来做的,云端方面内置了 gcp 的支持。由于整个开发包是通过 poetry 管理的,你会发现如果你想把你开发的 llm 应用通过 pypi 放出去简直不要太简单,因为 poetry 内置了针对 pypi 的支持,想发布 package 到 pypi 你要做的就是去申请一个账号,然后在本地 poetry release。
- llm 应用其实就是 web 应用,自然没有理由不支持 「--reload」
- 另外一个特点当然就是内置了 「playground」页面,类似 FastAPI 可以随时查看测试 API ,通过这个你可以随时把 每个 runnable 打开看看,调试一下。FastAPI 是通过 http://your-ip:port/docs 或者 redoc 来内置提供了 api 的说明、调试,LangServe 也类似,ta 的入口在 http://your-ip:port/playground
- 没有针对多机多卡的集群环境支持,TBD
总结一下 LangServe 已经非常接近理想中的 llm 应用开发工具了,开发环境的各个步骤分别长这个样子,强烈推荐新项目采用!直观看一下几个开发界面:
图一:项目骨架内置的快速开发指令
图二:必不可少的 FastAPI docs
图三:重点是这个,可配置、可 debug 的 playground
跑个题,RAG 的评测还真是很不容易整!主观性墙,量化费劲,量化费劲就意味着不太容易通过升职加薪的答辩 ...