Quarkus 团队开发基于 LangChain4J 的扩展
Quarkus 团队近期开始开发一个基于 LangChain4J 库的扩展,旨在将大型语言模型(LLM)集成到 Quarkus 应用中。这一扩展的灵感来源于 Lize Raes 在 Devoxx Belgium 上的演讲《Java Meets AI》。LangChain4J 是 LangChain 库的 Java 实现,最初是用 Python 或 JavaScript 编写的。
扩展的开发与发布
Quarkus LangChain4J 的第一个公开版本 0.1 于 2023 年 11 月中旬发布,随后几乎每周都有更新,最新版本为 0.5.1。Quarkus 项目联合负责人 Max Rydahl Andersen 表示,该扩展目前仍处于实验阶段,API 仍在变化,但团队会持续跟进 LangChain4J 的发展,并计划扩展对“开放”模型的支持,特别是那些可以在云或本地基础设施上运行的模型。
扩展的核心功能
该扩展允许开发者以声明式的方式定义 LLM 集成点,类似于 Quarkus REST 客户端。开发者可以通过 @RegisterAiService 注解来注册 AI 服务,并将该服务注入到应用的任何地方。这种方式提供了以下优势:
- 可测试性:可以通过模拟接口的实现来测试服务。
- 可观测性:通过指标注解,开发者可以监控方法。
- 弹性:通过容错注解,开发者可以处理失败、超时等临时问题。
与 LLM 的交互
与传统代码不同,Quarkus LangChain4J 扩展保留了与 LLM 的自然语言交互方式。开发者可以通过 @SystemMessage 和 @UserMessage 注解来定义 LLM 的任务和范围。例如,在处理银行产品评论时,可以通过自然语言提示对评论进行情感分析,并返回 JSON 格式的结果。
扩展 LLM 知识的机制
由于 LLM 的知识受限于其训练集,Quarkus LangChain4J 提供了两种扩展 LLM 知识的机制:工具和文档存储。
- 工具:允许 LLM 通过调用 REST 端点或执行数据库查询与父应用交互。开发者可以通过
@Tool注解在 bean 方法上声明工具。 - 文档存储:Quarkus 实现了检索增强生成(RAG)机制,通过将相关文档的向量表示存储在文档仓库中来扩展 LLM 的上下文。信息访问涉及两个步骤:文档的解析和向量表示的存储(通过 Ingestor 实现),以及调用 LLM 前的上下文丰富(通过 Retriever 实现)。
支持的存储和模型
目前,该扩展支持多种存储(如 Redis、Chroma、Pinecone、PgVector 等)和模型(如 OpenAI、Hugging Face、Ollama 等)。
未来的发展与反馈
Quarkus 团队正在快速推进该扩展的开发,并希望获得用户的反馈和想法,以改进集成。Andersen 认为,LLM 扩展很好地补充了 Quarkus 现有的集成功能,特别是与各种数据摄取系统的集成(如通过 Apache Camel 集成),而 Quarkus 的云原生特性也使得部署更加简单高效。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。