写点什么

Quarkus 开发基于 LangChain4j 的扩展,方便将 LLM 集成到 Quarkus 应用程序中

作者:Olimpiu Pop

  • 2024-01-15
    北京
  • 本文字数:2656 字

    阅读完需:约 9 分钟

Quarkus 开发基于 LangChain4j 的扩展,方便将 LLM 集成到 Quarkus 应用程序中

LangChain for Java(LangChain4J)战略顾问和布道师 Lize Raes 在 2023 年比利时 Devoxx 大会上做了“Java Meets AI”的演讲,受此启发,Quarkus 团队开始开发基于 LangChain4J 库的扩展,这是 LangChain 库的 Java 重新实现版本(最初用 Python 或 JavaScript 实现)。这将允许开发人员将大语言模型(LLM)集成到他们的 Quarkus 应用程序中。Quarkus LangChain4J 第一个公开版本,即 0.1 版本,在 2023 年 11 月中旬发布。这个扩展几乎每周都会发布一次,最新版本是 0.5.1。


InfoQ 采访了 Quarkus 项目联合负责人 Max Rydahl Andersen,分享了他对该扩展未来发展以及是否适合投产的看法。他说:


在真实项目中使用它?可以尝试,但 langchain4j 的 API 仍在变化,所以我们还处于实验阶段。

我们将继续跟进 langchain4j 并不断扩展它。我们十分关注扩展对“开放”模型的支持,特别是那些可以在云端或本地基础架构上运行的模型。


Andersen 认为 LLM 可以被用在现有和未来的许多企业项目中,他认为新兴的编程模型与 Quarkus 现有的功能集相契合。该扩展允许声明性地定义 LLM 集成点,类似于 Quarkus REST Client:用 @RegisterAiService 注解接口,然后通过在应用程序的任意位置注入服务来使用 LLM。这种方法具有以下优点:


  • 可测试性,可以通过伪接口实现来模拟服务 ;

  • 可观测性,开发人员可以用指标注释来监控方法 ;

  • 弹性,开发人员可以通过容错注释来处理故障、超时和其他临时问题。


@RegisterAiServicepublic interface TriageService {  // methods.}
复制代码


在使用像 ChatGPT 这样的 LLM 时,大多数交互是通过自然语言提示进行的,而在传统应用程序中,交互是通过编程语言进行的。与传统代码不同,quarkus-langchain扩展保留了与 LLM 交互的方式,允许开发人员通过自然语言定义范围和任务。LLM 的范围可以通过 @SystemMessage(String) 注解来定义,任务可以通过 @UserMessage(String) 注解来定义。


@RegisterAiServicepublic interface TriageService {    @SystemMessage("""        You are working for a bank, processing reviews about        financial products. Triage reviews into positive and        negative ones, responding with a JSON document.        """    )    @UserMessage("""        Your task is to process the review delimited by ---.        Apply sentiment analysis to the review to determine        if it is positive or negative, considering various languages.
For example: - `I love your bank, you are the best!` is a 'POSITIVE' review - `J'adore votre banque` is a 'POSITIVE' review - `I hate your bank, you are the worst!` is a 'NEGATIVE' review
Respond with a JSON document containing: - the 'evaluation' key set to 'POSITIVE' if the review is positive, 'NEGATIVE' otherwise - the 'message' key set to a message thanking or apologizing to the customer. These messages must be polite and match the review's language.
--- {review} --- """) TriagedReview triage(String review);}
复制代码


由于大型语言模型的知识收到训练集数据的限制,Quarkus LangChain4j 扩展提供了两种机制来扩展知识:工具和文档存储。



工具允许 LLM 与父应用程序发生交互,它通过调用 REST 端点或执行数据库查询来实现交互。LLM 决定要使用的参数以及如何处理结果。要声明一个工具,只需在 bean 方法上使用@Tool注解:


@ApplicationScopedpublic class CustomerRepository implements PanacheRepository<Customer> {
@Tool("get the customer name for the given customerId") public String getCustomerName(long id) { return find("id", id).firstResult().name; }}
复制代码


文档存储是 Quarkus 的检索增强生成(RAG)实现,这是一种用与感兴趣主题(用户手册、内部文档等)有关的文档来扩展 LLM 上下文的机制。从文档中获取信息包括两个步骤:


摄入过程——解析文档并计算其向量表示,然后存储在文档存储库中。Quarkus 提供了一个 Ingestor 来简化信息的摄入。


@Inject    EmbeddingModel embeddingModel;
public void ingest(List<Document> documents) { var ingestor = EmbeddingStoreIngestor.builder() .embeddingStore(store) .embeddingModel(embeddingModel) .documentSplitter(recursive(500, 0)) .build(); ingestor.ingest(documents); }}
复制代码


RAG 过程——在调用 LLM 之前,查询文档存储并丰富上下文。Quarkus 在这里使用的是 Retriever。


@ApplicationScopedpublic class RetrieverExample implements Retriever<TextSegment> {
private final EmbeddingStoreRetriever retriever;
RetrieverExample(RedisEmbeddingStore store, EmbeddingModel model) { retriever = EmbeddingStoreRetriever.from(store, model, 20); }
@Override public List<TextSegment> findRelevant(String s) { return retriever.findRelevant(s); }}
复制代码


目前,该扩展支持 Redis Store、Chroma Store、Pinecone Store、PgVector(PostgreSQL)Store、进程内 Embedding 或加载 CSV 文件以及与商业(例如 OpenAI)和开源模型(例如 Hugging Face 或 Ollama)进行交互的能力。


Quarkus 紧跟 Spring Framework 的脚步,加入了嵌入 AI 能力的行列。该实现基于 LangChain4j,并得到了 LangChain4j 作者 Dmytro Liubarskyi 及其团队的支持。因为发展迅速,团队正在寻求反馈和想法来改进这些集成。Andersen 表示,LLM 扩展是对其他现有集成非常好的补充:可以集成各种数据摄入系统(例如,通过 Apache Camel 集成),而 Quarkus 的云原生 DNA 可以实现轻松高效的部署。


查看英文原文


https://www.infoq.com/news/2023/12/quarkus-langchain-llm-integratio/


声明:本文为 InfoQ 翻译,未经许可禁止转载。


今日好文推荐


雷军为澎湃 OS 团队颁发百万美金技术大奖;阿里 Lazada 在东南亚六国大裁员;华为员工 2023 年出差134万次|Q资讯


颠覆软件工程、“杀死”开发者?回溯大模型落地应用这一年 | 盘点


今年向量数据库“杀疯了”,但纯向量数据库“凉”了?| 盘点


金融业采用大模型,是“用大炮轰蚊子”吗?| 盘点



2024-01-15 08:005512

评论

发布
暂无评论
发现更多内容

Linux网卡与IP地址:通往网络世界的通行证 🌐

GousterCloud

IP Linux Kenel 网卡

如何注册midjourney账号

蓉蓉

MidJourney

产品设计案例

执于业务

AnyGo for mac中文破解版,轻松修改手机定位,畅游应用无界限

Rose

阿里巴巴中国站按图搜索1688商品(拍立淘) API:如何通过图片快速获取商品的标题、价格、图片、链接,提高了更加智能化、个性化的商品搜索体验

技术冰糖葫芦

api 网关 API 文档 API 类型

IP地址:是给主机配置的,还是给网卡配置的?🤔

GousterCloud

IP Linux Kenel

mac ppt破解版下载 PowerPoint 2019 mac中文永久版

Rose

WorkPlus AI助理 | 提供企业AI私有化部署解决方案

BeeWorks

为何一个网卡需要配置多个IP地址?🌐

GousterCloud

Linux Kenel 网卡 多网卡

《剑指Offer(专项突破版):数据结构与算法名企面试题精讲》PDF

程序员李木子

CAD快速看图 VIP激活版 CAD快速看图破解版 mac/win

Rose

anytoiso pro mac中文破解版 专业级ISO镜像文件制作工具

Rose

SYN攻击是什么,该怎么防御syn攻击

德迅云安全杨德俊

PR 2024破解版下载 Premiere Pro 2024v24.3.0中文直装版 Mac/win

Rose

PIRF393

Echo!!!

English

Paste Mac破解版下载 苹果电脑首选剪切板历史管理工具

Rose

Proxifier:网络代理神器,轻松突破访问限制

Rose

小红书笔记详情API接口:高效获取与分析内容数据的利器

技术冰糖葫芦

api 网关 API 文档 API 类型

一读就懂!B端响应式设计的新手扫盲

执于业务

WorkPlus:企业级私有化即时通讯软件

BeeWorks

WorkPlus Meet视频会议:打破时空障碍,助力企业安全高效协作

BeeWorks

VMware ESXi 7.0 U3p macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

sysin

macos esxi 驱动 OEM unlocker

2024-04-06:用go语言,给你两个非负整数数组 rowSum 和 colSum, 其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和,换言之你

福大大架构师每日一题

福大大架构师每日一题

mnova14怎么安装?核磁数据处理MestReNova 14详细图文下载安装教程 Mac/win

Rose

remote desktop mac破解版下载 微软远程连接工具中文版

Rose

支付系统概述(四):收单系统

agnostic

支付系统设计与实现

事业-最佳实践-编码-编码规范

南山

数据库设计 代码规范 接口设计 检查清单 编码规范

常态化降本增效,陌陌生产服务成本治理实践

童子龙

降本增效 基础架构 FinOps

Consensus Cash or A Gift Card?

Echo!!!

Expression English

VMware ESXi 7.0 U3p macOS Unlocker & OEM BIOS 标准版和厂商定制版

sysin

esxi OEM unlocker dell hpe

“业务架构”

执于业务

Quarkus 开发基于 LangChain4j 的扩展,方便将 LLM 集成到 Quarkus 应用程序中_编程语言_InfoQ精选文章