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 提供以下功能:•支持所有主要模型提供商,例如 OpenAI、Microsoft、Amazon、Google 和 Huggingface
•支持的模型类型包括“聊天”和“文本到图像”,还有更多模型类型正在开发中
•支持的模型类型包括“聊天”和“文本到图像”,还有更多模型类型正在开发中
•AI 模型输出到 POJO 的映射
•支持所有主要矢量数据库提供商,例如 Azure 矢量搜索、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate
•跨 Vector Store 提供商的可移植 API,包括同样可移植的新颖的类似 SQL 的元数据过滤器 API
•Function calling 函数调用
•AI 模型和向量存储的 Spring Boot 自动配置和启动器
•数据工程的 ETL 框架
-SpringBoot3.2.4
-JDK21
-Gradle8.7
-OpenAIAPIKey
-DockerCompose
-GitingFang 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-clispringbootnew--fromai--nameeric-spring-ai-rag-demo
Spring Initializr这里使用IDEA创建,也可使用网页版:https://start.spring.io/,具体步骤查看下图:
需要替换成自己的OpenAI API key和代理URL,以下只是样例数据。
exportOPENAI_API_KEY=sk-1234567890abcdef1234567890abcdef
exportOPENAI_BASE_URL=https://api.openai.com/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
GEThttp://localhost:8080/ai/generate
{
"question":"Tellmeajoke",
"answer":"Whydidthescarecrowwinanaward?Becausehewasoutstandinginhisfield!"
}执行脚本: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.DataLoaderService
arsingPDFdocument
2024-04-10T22:55:52.969+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]t.f.ai.dataloader.DataLoaderService
arsingdocument,splitting,creatingembeddingsandstoringinvectorstore...thiswilltakeawhile.
2024-04-10T22:55:53.009+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:1
2024-04-10T22:55:53.156+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:4
2024-04-10T22:55:53.184+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:7
2024-04-10T22:55:53.188+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:10
2024-04-10T22:55:53.278+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:13
2024-04-10T22:55:53.330+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:16
2024-04-10T22:55:53.370+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage:19
2024-04-10T22:55:53.397+08:00INFO18778---[spring-ai-rag-demo][nio-8080-exec-3]o.s.ai.reader.pdf.PagePdfDocumentReader
rocessingPDFpage: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.DataLoaderService
oneparsingdocument,splitting,creatingembeddingsandstoringinvectorstore查看PG Vector数据库,验证向量数据是否成功插入:
#默认启用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]
以下是官方的一些设计图,感兴趣的可以看下:
允许开发人员在启动应用程序时使用特定于模型的选项,然后在运行时使用提示请求覆盖它们:
Spring AI Chat Completion API 构建在 Spring AIGeneric Model API之上,提供聊天特定的抽象和实现。
| 欢迎光临 链载Ai (http://www.lianzai.com/) | Powered by Discuz! X3.5 |