链载Ai

标题: Spring AI 提供以下功能 [打印本页]

作者: 链载Ai    时间: 2025-12-2 09:29
标题: Spring AI 提供以下功能

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 2em auto 1em;padding-right: 1em;padding-left: 1em;border-bottom: 2px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">Spring AI

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1em;letter-spacing: 0.1em;color: rgb(80, 80, 80);">Spring AI项目旨在简化包含人工智能功能的应用程序的开发,避免不必要的复杂性。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1em;letter-spacing: 0.1em;color: rgb(80, 80, 80);">该项目从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,但 Spring AI 并不是这些项目的直接移植。该项目的成立相信下一波生成式人工智能应用程序不仅适用于 Python 开发人员,而且将在许多编程语言中普遍存在。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1em;letter-spacing: 0.1em;color: rgb(80, 80, 80);">该项目从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,但 Spring AI 并不是这些项目的直接移植。该项目的成立相信下一波生成式人工智能应用程序不仅适用于 Python 开发人员,而且将在许多编程语言中普遍存在。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">Spring AI 提供以下功能:

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">此功能集可让您实现常见用例,例如“对文档进行问答”或“聊天”。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">环境要求

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;">-SpringBoot3.2.4
-JDK21
-Gradle8.7
-OpenAIAPIKey
-DockerCompose
-Git

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">项目初始化

如果不想从零开始,可直接克隆我已经完成的源码:

gitclonehttps://github.com/amuguelove/eric-spring-ai-rag-demo

使用Spring Cli

#MacOS按照spring-cli工具
brewtapspring-cli-projects/spring-cli
brewinstallspring-cli
springbootnew--fromai--nameeric-spring-ai-rag-demo

使用Spring Initializr

这里使用IDEA创建,也可使用网页版:https://start.spring.io/,具体步骤查看下图:

OpenAI 凭证配置

需要替换成自己的OpenAI API key代理URL,以下只是样例数据。

exportOPENAI_API_KEY=sk-1234567890abcdef1234567890abcdef
exportOPENAI_BASE_URL=https://api.openai.com/

Spring AI 项目配置

spring:
application:
name:spring-ai-rag-demo

datasource:
url:jdbc:postgresql://localhost:5432/postgres
username:postgres
password:postgres

ai:
openai:
api-key{OPENAI_API_KEY}
#Note:OpenAiApiwillsplice:"/v1/chat/completions"
base-url{OPENAI_BASE_URL}
chat:
options:
model:gpt-3.5-turbo
max-tokens:1024
temperature:0.7
embedding:
options:
model:'text-embedding-ada-002'
vectorstore:
pgvector:
index-type:hnsw
distance-type:cosine_distance
dimensions:1536

实战演示

启动项目后,通过代码仓库中的request.http文件直接运行,不需要使用浏览器和Postman等工具。

###TestOpenAIconnectivity
GEThttp://localhost:8080/ai/generate

###CleanData
DELETEhttp://localhost:8080/data/delete

###LoadData
POSThttp://localhost:8080/data/load

###CountData
GEThttp://localhost:8080/data/count

###RAGTest
GEThttp://localhost:8080/rag

###RAGTestTWO
GEThttp://localhost:8080/rag?question=开源大模型食用指南主要讲了什么?

###WithoutRAG
GEThttp://localhost:8080/rag?rag=false

项目启动

./gradlwbootRun

验证OpenAI是否联通

GEThttp://localhost:8080/ai/generate
{
"question":"Tellmeajoke",
"answer":"Whydidthescarecrowwinanaward?Becausehewasoutstandinginhisfield!"
}

验证数据加载到VectorDB

执行脚本:POST http://localhost:8080/data/load,以下是日志输出:

2024-04-10T22:55:52.459+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]t.f.ai.dataloader.DataLoaderServicearsingPDFdocument
2024-04-10T22:55:52.969+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]t.f.ai.dataloader.DataLoaderServicearsingdocument,splitting,creatingembeddingsandstoringinvectorstore...thiswilltakeawhile.
2024-04-10T22:55:53.009+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:1
2024-04-10T22:55:53.156+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:4
2024-04-10T22:55:53.184+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:7
2024-04-10T22:55:53.188+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:10
2024-04-10T22:55:53.278+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:13
2024-04-10T22:55:53.330+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:16
2024-04-10T22:55:53.370+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:19
2024-04-10T22:55:53.397+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReaderrocessingPDFpage:22
2024-04-10T22:55:53.429+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader:ProcessingPDFpage:25
2024-04-10T22:55:53.455+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader:ProcessingPDFpage:28
2024-04-10T22:55:53.581+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader:Processing37pages
2024-04-10T22:55:53.606+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.612+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.617+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.623+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.625+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.631+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.636+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.645+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.650+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.656+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.664+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.669+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.676+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.682+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.687+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.693+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.699+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.704+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.710+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.713+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.717+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.722+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.729+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.736+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.741+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.751+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:55:53.757+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto3chunks.
2024-04-10T22:55:53.762+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.a.transformer.splitter.TextSplitter:Splittingupdocumentinto2chunks.
2024-04-10T22:56:52.916+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]t.f.ai.dataloader.DataLoaderServiceoneparsingdocument,splitting,creatingembeddingsandstoringinvectorstore

查看PG Vector数据库,验证向量数据是否成功插入:

RAG知识库问答验证

#默认启用RAG进行问答
GEThttp://localhost:8080/rag
{
"question":"Whatisthelargesttrendof2023?",
"answer":"Thelargesttrendof2023istheriseofGenerativeAI,poweredbyLargeLanguageModels(LLMs)suchasGPT-3andGPT-4.ThistrendhasgainedsignificantprominenceintheAIandMLindustry,withwidespreadadoptionbeingdrivenbytechnologieslikeChatGPT."
}

GEThttp://localhost:8080/rag?question=开源大模型食用指南主讲了什么?
{
"question":"开源大模型食用指南主讲了什么?",
"answer":"开源大模型食用指南主要介绍了围绕开源大模型、针对国内初学者的教程。其中包括环境配置、本地部署、高效微调等技能的全流程指导,旨在简化开源大模型的部署、使用和应用流程,让更多普通学生、研究者更好地使用开源大模型。具体内容包括基于AutoDL平台的开源LLM环境配置指南,不同开源LLM的部署使用教程,开源LLM的部署应用指导,以及开源LLM的全量微调、高效微调方法等。这些内容旨在帮助学生和未来的从业者了解和熟悉开源大模型的食用方法。"
}


#关闭RAG问答
GEThttp://localhost:8080/rag?rag=false
{
"question":"Whatisthelargesttrendof2023?",
"answer":"I'msorry,butIdon'thaveinformationonfuturetrendsastheyaresubjecttochangeandevolveovertime."
}

推荐阅读

Spring AI[1]

RAG and Spring AI — Querying Your Own Documents with Open AI)[2]

附录

以下是官方的一些设计图,感兴趣的可以看下:

Chat Options Flow

允许开发人员在启动应用程序时使用特定于模型的选项,然后在运行时使用提示请求覆盖它们:

ChatClient Class Diagram

Chat Model API

Spring AI Chat Completion API 构建在 Spring AIGeneric Model API之上,提供聊天特定的抽象和实现。

OpenAiApi Client Class Diagram

Spring AI Function Call Flow

Embedding Client Class Diagram








欢迎光临 链载Ai (http://www.lianzai.com/) Powered by Discuz! X3.5