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

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

科技

作者 | Olimpiu Pop
译者 | 明知山
策划 | Tina

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资讯

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

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

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

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
减少逃票,方便残障乘客,MTA进站闸机变宽LangChain:打造自己的LLM应用hé bàng?hé bèng?基于大语言模型LangChain框架:知识库问答系统实践|文末赠书猴爹和绿茶婊Nat Commun丨杨海涛团队与合作者开发基于宿主因子的抗新冠病毒广谱性疗法微服务框架之争:Quarkus 是 SpringBoot 的替代品吗?CVPR 2023 | MovieChat: 集成视觉模型和LLM的长视频理解新型框架6044 血壮山河 卢沟桥之变 13Nature子刊|孙蕾/杨海涛/姜标/陈新文/张磊砢合作开发基于宿主因子的抗新冠病毒广谱性疗法Kubernetes:kube-scheduler 源码分析像Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?​晚点财经|集成大模型,或者被大模型集成;10 月中国进口额恢复增长年轻人狂追板面,方便面迎来“中国时刻”提示词专场:从调整提示改善与LLMs的沟通,到利用LLMs优化提示效果Brighton新楼盘出售中,87.5万美元起|近哈佛商学院/BU/BC,方便上I-90高速和搭乘地铁绿线今日黑五巨折:加拿大鹅6折起!Longchamp/Booking旅行/Allsaints/兰蔻等大促开启!Java 近期新闻:JDK 22 的 JEP、Spring Shell、Quarkus、Apache Camel、JDKMon【鞋靴妥当收纳】免安装折叠鞋柜,简约大气,透明可视,方便查找,环保无甲醛~头像|𝐒𝐡𝐚𝐫𝐞·招桃花头像邂逅相遇的日子(2)2023 LLM技术报告—— LLM的工具和平台跨语言编程:在C#应用程序中调用PythonChasing Calm: The Rising Cost of Spiritual Healing in China港大&百度提出LLMRec:基于LLM增强的多模态图神经网络推荐纽约推新应用程序,家长可实时追踪校车准备好屏幕 | 现场:BimBamBoom - Shinzo BakuBaku Ochokochoi @ 下北沢SHELTER程柯团队开发基于外泌体的吸入式mRNA疗法,用于肺癌治疗并促进全身免疫,防止癌症复发OpenAI 演讲:如何通过 API 将大模型集成到自己的应用程序中丢掉 LangChain、像 Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?利用 CRaC,将 Java 应用程序恢复启动时间缩短到几毫秒鸿发超市「2000 万美元」买下82街前Walmart超市!开设第4家Hông Phát分店!如何加快大型遗留应用程序的开发速度?「诗与远方」之我见又该说大选的事了
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。