2024年打造生产级LLM应用的最佳技术栈
在机器学习领域工作超过6年,创办了3家AI/LLM初创公司,构建了数十个项目和管道,我尝试过许多LLM工具——从RAG和Agent框架到基于LLM的服务,并且进行了适当的测试、CI/CD和可观察性处理。
本文列出了我最喜欢的工具,我们将经历一个完整的LLM应用程序开发生命周期——从RAG数据库和代理,到使用HTTPS的API端点,并配备适当可观察性的自动部署管道,同时检查每个步骤的框架和工具。如果你想了解更多关于LLM的相关内容,可以阅读以下这些文章:
大型语言模型景观
利用大型语言模型进行因果推理:为什么知识和算法至关重要?
如何为你的业务选择合适的大型语言模型(LLM)
语言模型在虚假信息活动中存在误用——如何降低风险?
还有一件事——你可能不同意我选择的技术堆栈,然而,我选择我的工具主要基于使用的简单性。例如,你可以使用像Azure这样的大型云提供商,而不是将东西部署在VPS上——你将获得更好的可伸缩性,更多的开箱即用服务,等等。但是掌握所有东西需要更多的时间,而且你将更容易被供应商锁定。当使用带有Coolify的VPS(我们将在后面讨论)时,大约需要10分钟的时间来开始,你可以通过直观和易于使用的UI获得所需的一切-数据库,前端/后端部署,自动CI/CD和备份。
LLM API和自托管选项
对于LLM API,有两个主要的选择:
如果你要使用自托管版本,那么Ollama 就是最佳选择。你可能会问:“为什么需要自托管LLM?”它更昂贵,更难设置,响应质量更低。”答案很简单——隐私。我已经写过关于隐私和LLM的文章,但长话短说——如果你使用任何API,你就会与其他公司共享你的数据,而这些公司又会与更多的第三方共享你的数据。在某些项目中,这是不允许的。
如果项目不需要很高的隐私和安全性,我总是使用Openrouter。它比任何其他LLM提供程序都要好,因为它构建在多个提供程序之上,为你提供了一个简单的接口,可以与其中任何一个进行交互。如果你已经为一个LLM编写了管道,那么你可以通过更改请求中的几个字符串来更改LLM。不需要额外的库,不需要切换提供程序,非常简单。
还有很多其他的LLM提供商。together.ai, Mistral等。然而,我更喜欢Openrouter,因为它简单的界面和它提供的额外有用的功能(自动日志记录,模型比较,自动模型选择,免费试用等等)。
RAG数据库
大多数LLM都有这样的问题:
- 不是最新的信息
- 缺乏领域知识
- 错误的信息或虚假内容
- 不引用来源
- 有偏见的回答
所有这些问题都可以使用适当的RAG(检索增强生成)来解决。所有RAG算法都需要某种形式的矢量数据库。这是我最喜欢的选择:
ChromaDB – 它是完美的原型和PoC(概念证明)创作。它非常容易设置(因为它是建立在SQLite之上的,所以你的数据库只是你PC上的一个文件),并且使用非常直观和良好的文档。
对于更严肃的项目,我使用Supabase(它建立在PostgreSQL之上)和PGVector插件。Supabase的一些优点包括直观和易于使用的UI、许多特性,如备份、角色管理、api和Python包。还有许多使用Supabase的指南,我个人喜欢的是它是开源的,你可以在自己的服务器上自行托管它。
通常我使用自定义编写的解决方案,但有时LangChain可以极大地帮助构建RAG管道。
代理
如果你想创建一个更复杂的LLM管道,或者你想用LLM解决一些难题,你必须使用代理方法。LLM代理是使用顺序(一步一步)推理的AI系统。基本上,不是为你的LLM定义一套指令,而是给它完全的自由和一套工具来解决问题。
下面是我用来创建代理的Python库:
- LangChain——目前最流行的代理框架之一,它有很好的文档,很大的社区和很多教程。我的一个建议是使用initialize_agent方法,而不是像create_react_agent或create_json_agent这样的新方法。主要原因是新方法还没有那么多的指导和说明,对我个人来说,它们有点令人困惑。initialize_agent方法更容易使用,并且有许多不同方法的指南。
- LlamaIndex – LangChain的主要竞争对手,以索引和数据检索方面的优化而闻名。简而言之,如果你正在构建一个RAG管道,llamaindex可能是更快更好的选择,然而,对于更复杂的项目和管道,最好使用LangChain。
一般来说,最好使用LangChain开始学习LLM,因为它的功能更丰富,更容易使用。
可观察性
现在,当你部署了LLM应用程序后,你需要衡量答案的质量、准确性和速度。但LLM怎么做呢?我使用了两种解决方案,它们都是提供跟踪、评估、可视化和监控的开源LLM可观察性平台:
- Arize Phoenix
- LangSmith
我发现LangSmith更易于使用,他们有一个很好的方法来跟踪投入产出,评估也发展得很快。然而,Phoenix有一个更好的免费层,因为它们允许跟踪更多的数据。如果你想从LLM的可观察性开始,我肯定会推荐LangSmith——它非常适合PoC和原型设计。
后端
对于后端,我总是使用Python, FastAPI和Pydantic。以下是一些简短的原因:
FastAPI非常快,有非常好的文档,并且包含了LLM应用程序开发可能需要的所有特性,如数据库orm、身份验证、CORS和多线程部署。
Pydantic帮助你为函数和端点添加一些严格的类型,这样你就可以确保所有变量都有你想要的类型,它有助于防止应用程序出错。
通常我将它们与 Gunicorn 和 Uvicorn 工作者结合使用,这样我就可以同时处理多个请求。
然而,你可以使用任何后端框架(Flask, Django),因为它们都有通用的功能,而且都是生产就绪的。
部署
对于部署,我总是用Docker容器化我的应用程序。主要原因是
- 可重复性——如果你使用 Docker 镜像构建你的应用,你可以在任何系统和任何CPU架构上运行它
- 可扩展性——如果你的应用是dockerized的,很容易启动多个实例,或者将它们部署在集群上
- 部署——部署Docker镜像非常容易,尤其是使用Docker Compose。你可以在Docker Compose中添加数据库、反向代理和后端。Yml文件,并且可以轻松地一次部署所有内容,而无需分别担心所有内容。
为了部署我的Docker镜像,我使用了Coolify——这是一个开源的、自托管的平台,它极大地简化了部署过程,提供:
- 自动SSL证书管理——你不需要担心使你的后端https兼容
- 没有供应商锁定-你可以在任何VPS或云提供商上部署Coolify,添加一个抽象层,帮助你从所有提供商中获得自由
- 简单的反向代理——你现在不需要关心安全和域,因为你在Coolify中唯一需要做的就是写你想要的域
- 自动数据库备份——如果你使用的是PostgreSQL、MySQL、Redis等常见镜像,你只需点击几个按钮就可以设置备份,而无需编写定制的解决方案或付费
- CI/CD管道-通过连接你的github,你自动获得免费的自动部署管道。当你对应用进行更新时,它会自动部署
- 协作功能-你可以与你的团队共享Coolify,并且你可以在应用程序的不同方面一起工作,而不会打断彼此。你还可以管理每个用户的权限
- 监控和通知——你可以选择像Telegram/Discord这样的应用程序,如果你的部署发生了什么事情,你就会收到通知
总结
在本文中,我们介绍了编写你自己的LLM应用程序的一个很好的技术堆栈。通过使用这些工具,你将能够获得:
- 可靠、易用的向量数据库
- 适用于各种问题的LLM,具有不同的规模,并且具备适当的隐私保护
- 避免供应商锁定
- 对管道进行适当的日志记录和监控
- 以可伸缩和可维护的方式轻松部署应用程序
在评论中分享你的技术堆栈——我们一起讨论,找出最好的一套工具!
来源:
3. https://python.langchain.com/v0.1/docs/modules/agents/
6. https://stackshare.io/langsmith
7. https://fastapi.tiangolo.com
8. https://docs.pydantic.dev/latest/
感谢阅读!你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/。
原文作者:Artem Shelamanov
翻译作者:过儿
美工编辑:过儿
校对审稿:Jason
原文链接:https://python.plainenglish.io/tech-stack-for-production-ready-LLM-applications-in-2024-5eb14105d1b4