springAI框架学习总结

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.hqwc.cn/news/681203.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刀片电池创新技术引领的能源革命速锐得揭秘比亚迪海豹核心数据

在全球汽车工业迈向电动化浪潮的今天&#xff0c;电池技术作为电动汽车发展的核心&#xff0c;其重要性不言而喻。比亚迪&#xff0c;作为中国领先的新能源汽车制造商&#xff0c;近年来推出了具有颠覆性创新的刀片电池&#xff0c;引起了新能源汽车业界的广泛关注。速锐得对比…

终于有人把HTTP、HTTPS、SOCKS5三种代理协议讲清楚了!

IP代理可以用于很多场景&#xff0c;无论是家庭网络还是工作网络&#xff0c;都为我们的日常工作提供了很多便利。HTTP、HTTPS 和 SOCKS5都是代理&#xff08;Proxy&#xff09;协议&#xff0c;用于在网络通信中转发请求和响应&#xff0c;但它们在工作原理和用途上有着不同的…

一、手写一个uart协议——rs232

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1 波形设计1.3.2 代码实现与tb1.3.4 顶层设计1.3.3 仿真 本篇内容&#xff1a; 一、RS232的回环测试 上位机…

WEB基础--JDBC基础

JDBC简介 JDBC概述 数据库持久化介绍 jdbc是java做数据库持久化的规范&#xff0c;持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备(断电之后&#xff0c;数据还在&#xff0c;比如硬盘&#xff0c;U盘)中以供之后使用。大多数情况下&#xff0c;特别是企业级…

nature《自然》期刊文献怎么在家查看下载

nature《自然》期刊我们都知道&#xff0c;是世界上历史悠久的、最有名望的科学杂志之一。下载该期刊文献是需要使用权限的&#xff0c;如果你没有nature《自然》期刊的资源&#xff0c;又该如何获取呢&#xff1f;请看本文的经验分享。 一、先百度“文献党下载器” 在文献党下…

Ansible--Templates 模块 Tags模块 Roles模块

一 Templates 模块 ①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件&#xff0c;可看作一个编译过的模 板文件&#xff0c;用来产生目标文本&#xff0c;传递Python的变量给模板去替换模板中的标记。 ②在配置文件中&#xff0c;会有一些数据&#xff08;如…

如何确保UDP文件传输工具有最低稳定的传输速度?

在当前日新月异的数字时代背景下&#xff0c;文件传输工具已经成为我们日常生活与工作中不可或缺的一部分&#xff0c;尤其针对那些频繁涉及即时数据交互与多媒体流通的场景。 UDP协议&#xff0c;以其突出的高速传输与低延迟特性&#xff0c;脱颖而出成为众多用户的首选。不过…

学习笔记:【QC】Android Q : telephony-phone 模块

一、phone init 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 二、phone MO 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 三、phone MT 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以…

旧物回收小程序开发:打造绿色生活,共筑美好未来

随着环保意识的逐渐增强&#xff0c;我们越来越意识到旧物回收的重要性。为了响应这一趋势&#xff0c;我们精心研发了一款旧物回收小程序&#xff0c;旨在通过科技的力量&#xff0c;让每个人都能够轻松参与到旧物回收的行动中来&#xff0c;共同为地球环保贡献一份力量。 一…

机器学习每周挑战——基于统计性分析和回归的球员薪资预测

背景描述 本数据集的工资数据截至 2023-24 赛季夏季转会窗口。数据提取自游戏《Football Manager 2024》&#xff0c;包含 40,000 名球员的数据。 FM24 是一款深受欢迎的足球模拟经营游戏。玩家将扮演一位足球经理&#xff0c;负责经营一支足球俱乐部&#xff0c;通过合理的人…

DDR5和LPDDR4/5 命令解析

关键名称介绍 DDR5 SDRAM和LPDDR4/5都采用了高级的命令集来支持更高效的内存管理和操作,其中“Multi-purpose command (MPC)”、“Mode Register Read (MRR)”、“Mode Register Write (MRW)”,以及“Write Pattern Command”是几种关键的命令类型,它们在内存初始化、配置和…

家装空间3D建模素材:打造理想家园的必备工具

在家装过程中&#xff0c;设计师和业主往往需要通过3D建模技术来实现对空间的精确规划和设计。3D建模素材作为这一领域的基础元素&#xff0c;为设计师提供了丰富的想象空间&#xff0c;帮助他们更好地呈现业主的期望和需求。 这些3D建模素材可以涵盖各种家装元素&#xff0c;如…