springAI框架学习总结

ops/2025/3/21 14:36:44/

springAI

1.springAI基本介绍

springAI是一个AI工程应用框架,其目标是将 Spring 生态系统设计原则(例如可移植性和模块化设计)应用于 AI 领域,并推广使用 POJO 作为 AI 领域应用程序的构建块。

2.特性

灵活的AIP支持chat,text-to-image, and Embedding models。支持同步和stream API。向下可以接入特定的模型。

Chat Models

  • OpenAI

  • Azure Open AI

  • Amazon Bedrock

    • Cohere's Command

    • AI21 Labs' Jurassic-2

    • Meta's LLama 2

    • Amazon's Titan

  • Google Vertex AI Palm

  • Google Gemini

  • HuggingFace - access thousands of models, including those from Meta such as Llama2

  • Ollama - run AI models on your local machine

  • MistralAI

Text-to-image Models

  • OpenAI with DALL-E

  • StabilityAI

Transcription (audio to text) Models

  • OpenAI

Embedding Models

  • OpenAI

  • Azure OpenAI

  • Ollama

  • ONNX

  • PostgresML

  • Bedrock Cohere

  • Bedrock Titan

  • Google VertexAI

  • Mistal AI

灵活的提供了多个厂商的向量存储API.

Vector Databases

  • Azure Vector Search

  • Chroma

  • Milvus

  • Neo4j

  • PostgreSQL/PGVector

  • PineCone

  • Redis

  • Weaviate

  • Qdrant

为 AI Models and Vector Stores提供了Spring Boot Auto Configuration and Starters .

支持以下模型:

  • OpenAI

  • Azure OpenAI

  • VertexAI

  • Mistral AI

支持的模型供应商:

  • OpenAI

  • Microsoft,

  • Amazon,

  • Google

  • and Huggingface

提供数据工程ETL框架:

  • 核心功能是促进使用向量存储将文档传输到模型提供者。 ETL 框架基于 Java 函数式编程概念,可帮助您将多个步骤链接在一起。

  • 支持读取各种格式的文档,包括 PDF、JSON 等。

  • 允许进行数据操作以满足需求。涉及分割文档以遵守上下文窗口限制,并使用关键字增强其以提高文档检索效率。

  • 处理后的文档存储在矢量数据库中,以便将来检索。

https://github.com/open-webui/open-webui

058 Docker运行Open WebUI拉取镜像_哔哩哔哩_bilibili

3.springAI框架使用搭建

参考文档:

Installation :: Spring Cli

Spring AI

Spring AI :: Spring AI Reference

Getting Started :: Spring AI Reference

Spring AI 中的类:

  • DocumentReader:一个 Java 功能接口,负责从数据源加载 List<Document>。 常见的数据源有 PDF、Markdown 和 JSON。

  • Document:数据源的基于文本的表示形式,还包含用于描述内容的元数据。

  • DocumentTransformer:负责以各种方式处理数据(例如,将文档分割成更小的部分或向文档添加额外的元数据)。

  • DocumentWriter:允许您将文档保存到数据库中(最常见的是在 AI 堆栈中,矢量数据库)。

  • Embedding:将数据表示为 List<Double>,矢量数据库使用它来计算用户查询与相关文档的“相似度”。

在矢量数据库中,查询与传统的关系数据库不同。 他们执行相似性搜索,而不是精确匹配。 当给定向量作为查询时,向量数据库返回与查询向量“相似”的向量。 矢量数据库用于将您的数据与 AI 模型集成。 使用它们的第一步是将数据加载到矢量数据库中。 然后,当用户查询要发送到人工智能模型时,首先检索一组相似的文档。 然后,这些文档将作为用户问题的上下文,并与用户的查询一起发送到人工智能模型。 该技术称为检索增强生成(RAG)。

评估AI模型响应 : 一种方法涉及呈现用户的请求和人工智能模型对模型的响应,查询响应是否与提供的数据一致。

利用矢量数据库中存储的信息作为补充数据可以增强评估过程,有助于确定响应相关性。

Spring AI 项目当前提供了一些非常基本的示例,说明如何以提示的形式评估响应以包含在 JUnit 测试中。

step1 下载安装spring cli工具 https://github.com/spring-projects/spring-cli/releases

step2.创建myai工程

spring boot new --from ai --name myai

step3.创建openAI账户,获取api key并配置其于项目工程

获取apikey

https://platform.openai.com/api-keys

New API

配置api key

step4.运行myai工程

step5.访问工程:

curl localhost:8080/ai/simple

参考代码:https://github.com/rd-1-2022/ai-openai-helloworld/tree/main

注意:可能因为网络无法访问,需自行解决

Spring AI整合OpenAI和Ollama本地大模型_哔哩哔哩_bilibili

ollama

   4. springAI API

  • chat completion API(openAI/Ollama/huggingface/google vertexAI)

  • Embeddings API (openAI/ollama/google vertexAI/Transformer(ONNX)) EmbeddingClient 界面旨在与 AI 和机器学习中的嵌入模型直接集成。 其主要功能是将文本转换为数值向量,通常称为嵌入。 这些嵌入对于语义分析和文本分类等各种任务至关重要。

    EmbeddingClient 界面的设计围绕两个主要目标:

    可移植性:该接口确保了跨各种嵌入模型的轻松适应性。 它允许开发人员以最少的代码更改在不同的嵌入技术或模型之间切换。 这种设计符合 Spring 的模块化和可互换性理念。

    简单性:EmbeddingClient 简化了将文本转换为嵌入的过程。 通过提供 embed(String text) 和 embed(Document document) 等简单方法,它消除了处理原始文本数据和嵌入算法的复杂性。 这种设计选择使开发人员(尤其是刚接触 AI 的开发人员)能够更轻松地在应用程序中利用嵌入,而无需深入研究底层机制。

  • image generation api(openAI/stability)

  • transcription API (openAI)

  • vector databases(Neo4j/PGvector/Redis);

  • Function Calling

    大型语言模型(LLM)在训练后被冻结,导致知识过时,并且无法访问或修改外部数据。

    Function Calling 机制解决了知识过时问题,允许注册自定义用户函数,将大型语言模型连接到外部系统的 API。 这些系统可以为llm提供实时数据并代表他们执行数据处理操作。

  • Multimodality API(多模态 api) 多模态是指模型同时理解和处理多种类型模式的的信息数据能力,包括:文本、图像、音频;

    多模式大语言模型(LLM)特征使模型能够结合其他模态(图像、音频、视频)来处理和生成文本响应;

    springAI多模态API提供了所有必要的统一抽象和代码封装来支持多模态LLM

  • Prompts

    角色: system Role /User Role/ Assitant Role/Function Role

    提示技术:

    • Text Summarization: 文本总结

    • Question Answering: 问题问答

    • Text Classification: 文本分类

    • Conversation: 交互式自然对话

    • Code Generation: 代码生成

    高级技术:

    • Zero-shot, Few-shot Learning(零样本,少样本学习): 使模型能够通过最少甚至没有特定问题类型的先前示例做出准确的预测或响应,使用学习到的概括来理解新任务并采取行动。

    • Chain-of-Thought(链式思维): 将多个人工智能响应链接起来,创建连贯且上下文相关的对话。 它帮助人工智能保持讨论的主线,确保相关性和连续性。

    • ReAct (Reason + Act): 这种方法中,人工智能首先分析输入(推理),然后确定最合适的行动或响应方案。 它将理解与决策结合起来。

  • 输出解析(Output Parsers)

    OutputParser 接口允许您获取结构化输出,例如将输出映射到 Java 类或 AI 模型基于字符串的输出的值数组。

output Parser接口实现:BeanOutputParser(java bean 与json)、MapOutputParser(json转map)、ListOutputParser(输出为逗号分隔的list)

  • ETL Pipeline

    Extract,Transform,Load->ETL

    Retrieval Augmented Generation (RAG):检索增强生成

    ETL 框架充当检索增强生成 (RAG) 用例中数据处理的支柱。

    ETL 管道编排从原始数据源到结构化向量存储的流向,确保数据采用最佳格式供 AI 模型检索。

    RAG 用例是文本,通过从数据体中检索相关信息来增强生成模型的功能,从而提高生成输出的质量和相关性。

    ETL pipeline的三个主要组件:

    • DocumentReader 实现了 Supplier<List<Document>>接口

    • DocumentTransformer 实现了 Function<List<Document>, List<Document>>接口

    • DocumentWriter 实现了Consumer<List<Document>>接口 Document 类包含文本和元数据,是通过 DocumentReader 从 PDF、文本文件和其他文档类型创建的。

      ETL 类型:

      • PagePdfDocumentReader 实现了 DocumentReader

      • TokenTextSplitter 实现了 DocumentTransformer

      • VectorStore 接口of DocumentWriter接口

      将数据基本加载到向量数据库中以与检索增强生成(RAG)模式一起使用,代码如下: vectorStore.accept(tokenTextSplitter.apply(pdfReader.get()));

  • 测试评估(evaluation testing)

  • 通用模型api(Generic Model API)

    为了给所有 AI 模型客户端提供基础,创建了通用模型 API。 这使得通过遵循通用模式可以轻松地为 Spring AI 提供新的 AI 模型支持。 以下部分为此 API介绍:


http://www.ppmy.cn/ops/40151.html

相关文章

深度解析Elasticsearch索引数据量过大的优化与部署策略

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 分片和副本策略 1.1分片策略 1.1.1 数据量 1.1…

什么是DMA? STM32如何配置DMA?

您好&#xff0c;我们一些喜欢嵌入式的朋友一起建立的一个技术交流平台&#xff0c;本着大家一起互相学习的心态而建立&#xff0c;不太成熟&#xff0c;希望志同道合的朋友一起来&#xff0c;抱歉打扰您了QQ群372991598 一、DMA简介 1、DMA简介 DMA(Direct Memory Access&a…

整理好的中债国债3年期到期收益率数据集(2002-2023年)

01、数据简介 国债&#xff0c;又称国家公债&#xff0c;是由国家发行的债券&#xff0c;是中央ZF为筹集CZ资金而发行的一种ZF债券&#xff0c;是中央ZF向投资者出具的、承诺在一定时期支付利息和到期偿还本金的债权债务凭证。 中债&#xff0c;是指由中国中债登记结算有限责…

MongoDB 集合创建指南:命名规范、索引优化和数据模型设计

在构建任何 MongoDB 数据库时&#xff0c;正确创建集合是确保数据存储和查询效率的关键。从合适的命名规范到索引优化和数据模型设计&#xff0c;每个步骤都至关重要。让我们深入探讨 MongoDB 集合的创建过程&#xff0c;以及在每个阶段中需要考虑的关键要点。 MongoDB 创建集…

确保WEB应用安全:深入分析与有效防范

目录 前言 一. 概述 二. WEB应用体系结构脆弱性分析 1.前端用户界面 2.后端服务器 3.数据库 4.风险和后果 5.缓解措施 三. SQL注入攻击及防范 1.使用参数化查询或预定义语句 2.输入验证和转义 3.最小化数据库权限 4.使用存储过程和预定义语句 5.保持软件更新 6.实…

【数据结构(邓俊辉)学习笔记】列表03——有序列表

文章目录 0. 概述1. 唯一化2. 查找2.1 实现2.2 顺序查找2.3 复杂度 0. 概述 介绍下有序列表。 若列表中所有节点的逻辑次序与其大小次序完全一致&#xff0c;则称作有序列表&#xff08;sorted list&#xff09;。为保证节点之间可以定义次序&#xff0c;依然假定元素类型T直接…

虚幻五关卡制作学习笔记

1.创建一个移动平台 这个移动平台的功能&#xff1a;从箭头1移动到箭头2来回移动&#xff0c;可移动时发绿光&#xff0c;不可移动时发红光 首先&#xff0c;创建两个材质&#xff0c;发红光和绿光 然后我们创建一个actor蓝图类&#xff0c;添加两个arrow组件&#xff0c;两个…

RabbitMQ-基础

RabbitMQ 同步调用 双方交互都是实时的&#xff0c;可以立即返回结果 问题 拓展性差&#xff1a;每次有新的需求&#xff0c;代码经常变动&#xff0c;不符合开闭原则性能下降&#xff1a;调用者需要等待服务提供者分别执行后才返回结果&#xff0c;服务提供者很多情况下会…