

待完善
大语言模型(LLM)的风口持续了两年的现在,想让他可以为之前的企业应用赋能,首选的第一开发语言还是 Python。但实际上,Java 才是在 Web 应用开发领域的老大哥。Java 是如何给于大语言模型应用(LLMs)交出答卷的呢?LangChain4j,Spring AI,以及各家模型厂商的 SDK。
如果有这类框架开发的经验,就会发现根本没有任何新鲜的技术。对于整体结构来讲,只是多了一项新的基础服务调用。本篇笔者就带着大家一起来看看,Java 如何旧壶装新酒!
没有技术是独立存在的,所有技术都是为业务服务,而业务来自于哪里?来自需求。
就本篇来说,目标是做一个款 AIGC 框架。大方向是定了,但需要几个突破口,也就是核心功能。
LLMs 的输出来自于我们的提示词 (Prompt)。有了输出,才能为程序所用。问答之间,成为了第一个需求。对接通信的核心框架。
为企业赋能,就得让大模型内化企业知识库。大型企业,要用其垂直领域的微调模型,需要很大的成本。小微企业,用RAG 技术投资回报率(ROI,Return on Investment )更高。
与已经非常成熟的 Python 做复刻,再加上 Java 语言自身的特色,便有了第一代产品,LangChain4j。
Java 开发者如今也可以称为 Spring 开发者。如其语意一样,给 Java 带来了春天。Spring 向来以生态称帝,AI 来了,也需要紧跟。所以有了新一代产品,Spring AI。
到这里初版算是成型,需求在使用中继续迭代。
在21世纪,罗伯特·C·马丁(Bob 大叔)发表了面向对象设计的SOLID原则,即单一职责(SRP)、开闭原则(OCP)、里氏替换(LSP)、接口隔离(ISP)、依赖倒置(DIP)。
最后一点:高层模块不应该依赖低层模块,而应该依赖于抽象;抽象不应该依赖于细节。在 Java 语言中,抽象即是接口、抽象类这些定义规范的,是软件设计的第一层映射。这句话看起来还是很抽象,下面举一个简单的例子:
在 Spring 应用中,连接数据库是一个基础操作。不过数据库种类很多,逐个实现有些费事,怎样以不变应万变呢?官方定义了一个抽象层,数据库厂商提供实现。对于开发者来说,只需关心地址、认证(账号、密码),在指定谁家驱动,就完成了连接。
所以针对需求,先写下接口,与其之间的调用关系。
客户端,客户端的消息体,响应的消息体。
Spring AI 的效果是让提示词和对象一样,可以前后置增强。不仅仅是一个字符串,更有高级定制属性
上传文件,分割内容,存储等一系列操作,正是“知识库”的核心。
各家模型提供的Java的SDK需要按部就班的,先创建c对象所需的b,然后在创建b所需的a,输出也是一层套一层。
而是用 Java 目前的两款AIGC框架,几乎是一条链式调用即可完成。前者就是API,到了后者,形成了一种特殊的开发范式:领域专用语言(DSL,Domain Specific Language)。一种组合多个API形成的交互式 API。
多模型 Model,多模态 Modal,方法调用 function,可观测,工作流 flow,智能体 agent 。
为了能够让框架走的更远,生态是不可或缺的因素。以上列举的,两款成型的产品可以实现大部分,剩下的就需要另一些来补充。
比如工作流。Python 生态中有LangGraph,Java 生态也添加了对应产品,LangGraph4j。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。