从事 ML 工作 6 年多之后,我创办了 3 家 AI/LLM 初创公司,构建了数十个项目和流程,尝试了许多 LLM 工具 - 从 RAG 和 Agent 框架到经过适当测试、CI/CD 和可观察性的基于 LLM 的服务。
本文列出了我最喜欢的工具,原因多种多样。我们将经历完整的 LLM 应用程序开发生命周期 — 从 RAG 数据库和代理,到具有 HTTPS 的 API 端点和具有适当可观察性的自动部署管道,同时检查每个步骤的框架和工具。
还有一件事——你可能不同意我选择的技术栈;但是,我选择工具主要是基于易用性。例如,你可以使用像 Azure 这样的大型云提供商,而不是在 VPS 上部署东西——这样你将获得更好的可扩展性、更多的开箱即用服务等等。但掌握一切需要更多的时间,而且你更容易受到供应商锁定。当使用带有 Coolify(我们稍后会讨论)的 VPS 时,大约需要 10 分钟即可开始使用,并且你将获得所需的一切——数据库、前端/后端部署、自动化 CI/CD 和备份——具有直观且易于使用的 UI。
LLM API 和自托管选项
大型语言模型 API 主要有两种选择:
- 如果您要使用自托管版本,Ollama是最佳选择。您可能会问:“为什么需要自托管的 LLM?它更昂贵、更难设置且响应质量更低”。答案很简单 — 隐私。
- 如果项目不需要很高的隐私和安全性,我总是使用Openrouter。它比任何其他 LLM 提供商都好,因为它建立在多个提供商之上,为您提供了一个简单的界面来与其中任何一个进行交互。如果您为一个 LLM 编写了管道,则只需更改请求中的几个字符串即可更改 LLM。无需额外的库,无需切换提供商,就是这么简单。
还有许多其他 LLM 提供商,如 together.ai、Mistral 等;不过,我更喜欢 Openrouter,因为它的界面简单,并提供其他有用的功能(自动记录、模型比较、自动模型选择、免费试用等)。
Ollama 和 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 可观察性平台:
- 阿里泽凤凰
- 朗史密斯
我发现 LangSmith 更容易使用;他们有一种非常好的方式来跟踪输入输出,并且评估开发速度非常快。然而,Phoenix 有更好的免费套餐,因为它们允许跟踪更多数据。如果你想开始使用 LLM 可观察性,我肯定会推荐 LangSmith——它非常适合 PoC 和原型设计。
阿里泽 vs 菲尼克斯
后端
对于后端,我总是使用 Python、FastAPI 和 Pydantic。以下是一些原因:
- FastAPI 非常快,具有非常好的文档,并且包含 LLM 应用程序开发可能需要的所有功能,如数据库 ORM、身份验证、CORS 和多线程部署。
- Pydantic 可帮助您为函数和端点添加一些严格的类型,因此您始终可以确保所有变量都具有所需的类型;它有助于使您的应用程序防错。
通常我将它们与 Gunicorn + Uvicorn 工作者结合起来,这样我就可以同时处理多个请求。
不过,您可以使用任何后端框架(Flask,Django),因为它们都具有常见的功能,并且都已准备好投入生产。
部署
对于部署,我总是使用 Docker 来容器化我的应用程序。主要原因是
- 可重复性——如果您使用应用程序构建 Docker 映像,则可以在任何系统和任何 CPU 架构上运行它;
- 可扩展性——如果您的应用程序是docker化的,那么很容易启动多个实例,或将它们部署在集群上;
- 部署 — 部署 Docker 镜像非常容易,尤其是使用 Docker Compose。您可以将数据库、反向代理和后端添加到文件
docker-compose.yml
,并轻松一次性部署所有内容,而无需单独担心所有内容。
为了部署我的 Docker 镜像,我使用 Coolify - 它是一个开源、自托管的平台,大大简化了部署过程,提供:
- 自动化 SSL 证书管理——您无需担心让您的后端兼容 https;
- 不受供应商锁定 - 您可以在任何 VPS 或云提供商上部署 Coolify,添加一个抽象层,帮助您摆脱所有提供商的束缚;
- 简单的反向代理——您现在不需要关心安全性和域,因为您在 Coolify 中唯一需要做的就是写入您想要的域;
- 自动数据库备份——如果您使用常见的映像(如 PostgreSQL、MySQL、Redis 等),则只需单击几个按钮即可设置备份,而无需编写自定义解决方案或付费。
- CI/CD 管道 — 通过连接你的 github,你会自动获得免费的自动部署管道。因此,每当你更新你的应用程序时,它都会自动部署;
- 协作功能 — 您可以与团队共享 Coolify,并可以共同处理应用程序的不同方面,而不会互相干扰。您还可以控制每个用户的权限。
- 监控和通知——您可以使用 Telegram/Discord 等众多应用程序之一,并在部署发生任何问题时收到通知。
Coolify — 简单、功能丰富、美观
概括
在本文中,我们介绍了编写自己的 LLM 应用程序的一套不错的技术堆栈。通过使用这些工具,您可以获得:
- 可靠、易于使用的向量数据库;
- 法学硕士 (LLM) 适用于各种大小的问题,并具有适当的隐私;
- 不受供应商锁定;
- 对您的管道进行适当的记录和监控;
- 可扩展且可维护的方式轻松部署您的应用程序。