欢迎来到 Spring AI 项目!
Spring AI 项目为开发 AI 应用程序提供了 Spring 友好的 API 和抽象。
让你变得@Beans
聪明起来!
有关更多信息,请参阅我们的Spring AI 参考文档。
项目链接
-
文档
-
问题
-
讨论- 如果您有问题、建议或反馈,请转到此处!
-
从 0.7.1-SNAPSHOT 升级
教育资源
-
关注Azure OpenAI 的研讨会材料
-
该研讨会包含从“hello world”到“检索增强生成”的分步示例
-
一些精选的视频。搜索 YouTube!了解更多。
-
Spring 技巧:Spring AI
-
Spring AI 概述 @ Devoxx 2023
-
Spring AI 简介 - 将生成式 AI 添加到您的 Spring 应用程序中
入门
请参阅入门指南以获取有关添加依赖项的说明。
请注意,新的 Spring CLI 项目让您可以通过两个简单的步骤来启动和运行,详细描述请参见此处。
-
安装 Spring CLI
-
输入
spring boot new --from ai --name myai
你的终端
手动添加依赖项
请注意,有两个主要步骤。
-
将 Spring Milestone 和 Snapshot 存储库添加到您的构建系统中。
-
添加Spring AI BOM
-
添加特定 AI 模型、矢量数据库或您需要的其他组件依赖项的依赖项。
概述
尽管人工智能有着悠久的历史,但 Java 在该领域的作用相对较小。这主要是由于历史上依赖于用 C/C++ 等语言开发的高效算法,而 Python 则充当访问这些库的桥梁。大多数 ML/AI 工具都是围绕 Python 生态系统构建的。然而,在 OpenAI 的 ChatGPT 等创新的推动下,生成式 AI 的最新进展已经普及了通过 HTTP 与预训练模型的交互。这消除了对 C/C++/Python 库的大部分依赖,并为使用 Java 等编程语言打开了大门。
Python 库LangChain和LlamaIndex已成为实现生成式 AI 解决方案的热门工具,并且可以用其他编程语言实现。这些 Python 库与 Spring 项目共享基础主题,例如:
-
便携式服务抽象
-
模块化
-
可扩展性
-
减少样板代码
-
与多种数据源集成
-
针对常见用例的预构建解决方案
Spring AI 项目从这些库中汲取灵感,旨在为 AI 领域的 Spring 开发人员提供类似的体验。
请注意,Spring AI API 不是 LangChain 或 LlamaIndex 的直接端口。如果您熟悉这两个项目,您将看到 API 中的显着差异,尽管概念和想法相当可移植。
功能概述
这是高级功能概述。所实现的功能奠定了基础,后续更复杂的功能将在此基础上构建。
您可以在参考文档中找到更多详细信息
与 AI 模型交互
ChatClient: Spring AI 的一个基本功能是一个可移植的客户端 API,用于与生成式 AI 模型进行交互。借助此便携式 API,您可以首先针对一种 AI 聊天模型(例如 OpenAI),然后轻松地将实现替换为另一种 AI 聊天模型(例如 Amazon Bedrock 的 Anthropic 模型)。必要时,您还可以下拉使用非便携式型号选项。
Spring AI 支持多种 AI 模型。有关概述,请参见此处。目前支持的具体型号有
-
开放人工智能
-
Azure 开放人工智能
-
亚马逊基岩(Anthropic、Llama2、Cohere、Titan、Jurassic2)
-
抱脸
-
谷歌 VertexAI(PaLM2、Gemini)
-
米斯特拉尔人工智能
-
稳定性人工智能
-
奥拉马
-
PostgresML
-
变形金刚 (ONNX)
-
人类克劳德3
提示: AI 模型交互的核心是提示,它为 AI 提供采取行动的具体指令。制作有效的提示既是一门艺术也是一门科学,因此产生了“提示工程”学科。这些提示通常利用模板引擎,使用占位符在预定义文本中轻松替换数据。
在我们的概念指南中探索有关提示的更多信息。要了解 Prompt 类,请参阅Prompt API 指南。
提示模板:提示模板支持提示的创建,特别是在使用模板引擎时。
深入研究我们的概念指南中的 PromptTemplates 。有关 PromptTemplate 的实践指南,请参阅PromptTemplate API 指南。
输出解析器: AI 模型输出通常作为原始java.lang.String
值。输出解析器将这些原始字符串重组为对程序员更友好的格式,例如 CSV 或 JSON。
在我们的概念指南中了解有关输出解析器的见解。有关实现详细信息,请访问OutputParser API 指南。
合并您的数据
将专有数据整合到生成人工智能中而不需要重新训练模型已经是一项突破。由于需要专门的硬件,重新训练模型(尤其是具有数十亿参数的模型)具有挑战性。“上下文”学习技术提供了一种更简单的方法,可以将数据(无论是来自文本文件、HTML 还是数据库结果)注入到预先训练的模型中。正确的技术对于开发成功的解决方案至关重要。
检索增强生成
检索增强生成(简称 RAG)是一种使您能够将数据引入预训练模型的模式。RAG 擅长“查询文档”用例。
了解有关检索增强生成的更多信息。
将数据引入模型遵循提取、转换和加载 (ETL) 模式。后续的类和接口支持RAG的数据准备。
文件:
该类Document
封装了 AI 模型的数据,包括文本和元数据。虽然文档可以表示大量内容(例如整个文件),但 RAG 方法将内容分割成较小的部分以包含在提示中。ETL 过程使用接口DocumentReader
、DocumentTransformer
、 和DocumentWriter
,最后将数据存储在矢量数据库中。该数据库随后识别与用户查询相关的数据片段。
文档读者:
文档阅读器可List<Document>
从多种来源生成文档,例如 PDF、Markdown 文件和 Word 文档。鉴于许多源都是非结构化的,文档阅读器通常根据内容语义进行分段,避免表或代码部分内的拆分。初始创建后List<Document>
,数据流经转换器以进行进一步细化。
文档转换器:
List<Document>
Transformer通过消除多余的数据(例如 PDF 页边距)或附加元数据(例如主要关键字或摘要)来进一步修改。另一个关键的转变是细分文档以适应人工智能模型的令牌约束。每个模型都有一个上下文窗口,指示其输入和输出数据限制。通常,1 个令牌约等于 0.75 个单词。例如,在 gpt-4-32k 等模型名称中,“32K”表示令牌计数。
文档编写者:
RAG 中的最后一个 ETL 步骤涉及将数据段提交到向量数据库。尽管该DocumentWriter
接口并非专门用于矢量数据库编写,但它是主要的实现类型。
矢量存储: 矢量数据库有助于将您的数据与 AI 模型相结合。他们确定人工智能应使用哪些文档部分来生成响应。矢量数据库的示例包括 Chroma、Postgres、Pinecone、Qdrant、Weaviate、Mongo Atlas 和 Redis。Spring AI 的VectorStore
抽象允许在数据库实现之间轻松转换。
克隆存储库
该存储库包含大型模型文件。要克隆它,您必须:
-
忽略大文件(不会影响 spring-ai 的行为)
GIT_LFS_SKIP_SMUDGE=1 git clone git@github.com:spring-projects/spring-ai.git
:。 -
或者在克隆存储库之前安装Git Large File Storage 。
构建
通过运行单元测试进行构建
./mvnw clean package
构建包括集成测试。在运行之前设置 OpenAI 和 Azure OpenAI 的 API 密钥环境变量。
./mvnw clean verify -Pintegration-tests
运行特定的集成测试,最多允许两次尝试才能成功。当托管服务不可靠或超时时,这非常有用。
./mvnw -pl vector-stores/spring-ai-pgvector-store -Pintegration-tests -Dfailsafe.rerunFailingTestsCount=2 -Dit.test=PgVectorStoreIT verify
构建文档
./mvnw -pl spring-ai-docs antora
然后文档位于目录中spring-ai-docs/target/antora/site/index.html
使用java-format 插件重新格式化
./mvnw spring-javaformat:apply
使用license-maven-plugin更新许可证标头的年份
./mvnw license:update-file-header -Plicense
使用 javadoc 检查 javadoc :javadoc
./mvnw javadoc:javadoc -Pjavadoc
项目地址: https://github.com/spring-projects/spring-ai.git
如果无法下载,请多次刷新,还不行,就使用魔法上网