Spring AI正当时,Java从此也可以开发AI应用了

作为一个Java程序员,一直没有动手开发AI应用,就是没有称手的工具,现在好了...

概述
     尽管人工智能有着悠久的历史,但Java在这一领域的作用相对较小。这主要是由于历史上对C/ c++等语言开发的高效算法的依赖,Python作为访问这些库的桥梁。大多数ML/AI工具都是围绕Python生态系统构建的。然而,在OpenAI的ChatGPT等创新的推动下,生成式AI最近取得了进展,通过HTTP普及了与预训练模型的交互。这消除了对C/ c++ /Python库的大部分依赖,并为使用Java等编程语言打开了大门。

Python库LangChain和LlamaIndex已经成为实现生成式AI解决方案的流行工具,并且可以在其他编程语言中实现。这些Python库与Spring项目共享基本主题,例如:

1. 可移植服务抽象
2. 模块化
3. 可扩展性
4. 减少样板代码
5. 与各种数据源的集成
6. 针对常见用例的预构建解决方案

从这些库中获得灵感,Spring AI项目旨在为AI领域的Spring开发人员提供类似的体验。

请注意,Spring AI API不是LangChain或LlamaIndex的直接端口。如果您熟悉这两个项目,您将看到API的显著差异,尽管概念和思想是相当可移植的。

功能概述
这是一个高层次的特性概述。已实现的功能奠定了基础,随后在此基础上构建更复杂的功能。

1) 与AI模型交互
ChatClient: Spring AI的一个基本特性是一个可移植的客户端API,用于与生成AI模型交互。有了这个可移植的API,你可以一开始瞄准一个AI聊天模型,比如OpenAI,然后很容易地切换到另一个AI聊天模型的实现,比如Amazon Bedrock的Anthropic model。必要时,您还可以下拉使用非便携式模型选项。

Spring AI支持许多AI模型。有关概述,请参阅此处。目前支持的具体模型有

OpenAI
Azure OpenAI
亚马逊基岩(Anthropic, Llama, Cohere, Titan, Jurassic2)
HuggingFace
谷歌VertexAI (PaLM2, Gemini)
米斯特拉尔人工智能
稳定的人工智能
Ollama
PostgresML
变形金刚(ONNX)
人为Claude3


提示: AI模型交互的核心是提示,它为AI提供了具体的操作指示。制作一个有效的提示既是一门艺术也是一门科学,这就产生了“提示工程”这一学科。这些提示通常利用模板引擎在预定义的文本中使用占位符进行简单的数据替换。

提示模板:  提示模板支持创建提示,特别是在使用模板引擎时。在我们的概念指南中深入研究PromptTemplates。有关PromptTemplate的操作指南,请参阅PromptTemplate API指南。

输出解析器:AI模型输出通常是原始的java.lang.String值。输出解析器将这些原始字符串重构为对程序员更友好的格式,如CSV或JSON。

2)  整合您的数据
在不重新训练模型的情况下,将专有数据整合到生成式人工智能中已经是一个突破。由于需要专门的硬件,重新训练模型,特别是那些具有数十亿参数的模型是具有挑战性的。“上下文”学习技术提供了一种更简单的方法来为您的预训练模型注入数据,无论是来自文本文件,HTML还是数据库结果。正确的技术对于开发成功的解决方案至关重要。

3) 检索增强生成
检索增强生成(Retrieval Augmented Generation,简称RAG)是一种模式,它使您能够将数据带到预训练的模型中。RAG擅长于“对文档进行查询”的用例。将数据导入模型遵循提取、转换和加载(ETL)模式。后续的类和接口支持RAG的数据准备。 

Document:  Document类封装了AI模型的数据,包括文本和元数据。虽然Document可以表示广泛的内容,例如整个文件,但RAG方法将内容分成更小的部分,以便包含在提示符中。ETL进程使用DocumentReader、DocumentTransformer和DocumentWriter接口,以Vector Database中的数据存储结束。该数据库随后识别与用户查询相关的数据片段。
Document Reader:  文档阅读器生成List<Document>从不同的来源,如pdf、Markdown文件和Word文档。考虑到许多源是非结构化的,Document reader通常基于内容语义进行分段,从而避免了表内的分割

Document Transformer :   transformer进一步修改了List<Document>通过消除多余的数据,如PDF页边距,或附加元数据(例如,主要关键字或摘要)。另一个关键的转换是细分文档以适应AI模型的令牌约束。每个模型都有一个上下文窗口,指示其输入和输出数据限制。通常,一个标记相当于大约0.75个单词。例如,在像gpt-4-32k这样的型号名称中,“32K”表示令牌计数。

Document Writer:  RAG中的最后一个ETL步骤涉及将数据段提交到矢量数据库。虽然DocumentWriter接口不是专门为Vector Database编写的,但它是主要的实现类型。

Vector Stores:: 矢量数据库有助于将数据与人工智能模型相结合。他们确定AI应该使用哪些文档部分来生成响应。矢量数据库的例子包括Chroma, Postgres, Pinecone, Qdrant, Weaviate, Mongo Atlas和Redis。Spring AI的VectorStore抽象允许在数据库实现之间轻松转换。

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT 行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值