-- 知识铺
引言
提到 Spring Boot,几乎每位 Java 开发者都对这个非凡的框架如雷贯耳。近来,Spring 团队致力于将其与 LLM 结合。对于我们这些开发者来说,是时候拓宽知识的视野了。在本篇博文中,我们将深入探讨 Spring AI 与 Ollama。
准备工作
这类 AI 模型基于大量数据集创建,能够像人类一样思考和生成想法或内容。每个模型根据其训练目的和所用数据集,各有所长。有些适用于通用场景,而有些则可用于特定领域,比如编程等。
著名例子包括:
- GPT-3/4(由 OpenAI 开发)
- Llama 3(由 Meta 开发)
- Ollama
Ollama - 是一个选项,允许你在自己的笔记本或容器上运行 LLM,提供开源的 LLM 服务。这样,你就无需直接连接到 AI 提供商(例如 OpenAI 的 GPT 模型),而是可以选择使用替代模型。
目前,Ollama 提供了许多选择,如 Mistral、Llama3、Gemma 等。我们可以通过 CLI(命令行界面)、REST API 和 SDK(软件开发工具包)与它们进行交互。
查看以下网站以获取更多信息
- Ollama - 官方网站:https://ollama.com/
- Ollama - GitHub 仓库:https://github.com/ollama/ollama
检索增强生成(RAG)
**检索增强生成(RAG)**是一种优化 LLM 输出的过程,通过在模型给出响应或答案前,将知识库作为额外信息加入到训练数据中。
- 生成的意思是 LLM 根据用户的查询生成数据,并基于 LLM 的知识库产生新的结果
- 但如果数据太通用、过时,或者你需要特定于你业务的数据怎么办?
- 那么,检索增强的意思是我们将数据源(位于其他地方)视为文档。
- 然后,在 LLM 生成响应之前,我们将检索相似文档,并将其与提示一起发送给 LLM 以供考虑。
关于 RAG 的更多信息,请参考这里。我认为这是最佳资源。
二师兄talks推荐搜索
RAG检索增强生成
向量数据库
向量数据库是专为将数据存储为向量(数字序列)而设计的数据库。
- 插入 => 将文档/文本块转换为向量并存储到数据库中
- 检索 => 通过数据的相似性/上下文搜索数据并返回。(相似性搜索)
关于 向量数据库 的更多信息,请参考这里。
- 向量数据库:初学者指南!
- 使用向量数据库 ChromaDB 构建语义搜索应用程序
- 向量数据库深度比较:为何Qdrant是您的最佳选择
Spring AI 项目
Spring AI 从 LangChain(Python)获得灵感,后者能够与 AI 和多种 LLM 集成。目前,我们可以选择不同的模型和向量数据库。你可以直接在网站上查看 Spring AI 的文档。
Vaadin
Vaadin 是一个用于用 Java/Kotlin 构建 Web 应用的框架。这里没什么特别的,我只是想尝试一下 Vaadin,因此我抓住了这个机会。如果你感兴趣,可以通过以下网站开始你的项目。
开始使用
我们的构想
- 创造一能对股票行情周报总结的工具
以下是本项目的示例结果
集成的可行性
我们先在本地手动测试一下 Ollama
好的,然后使用 Spring AI 集成到我们的 Vaadin 项目中。以下是相关配置。
|
|
构想实现
我拆分为以下步骤
- 设置 RAG
- 使用 Vaadin 设计 UI
- 创建通讯流程
设置 RAG
在这个项目中,我使用 Apache Tika 来读取 PDF 文件,文件放在 /resources 下
当应用启动时,过程将开始读取 PDF 并将数据存储到嵌入式向量数据库中。
使用 Vaadin 的 UI
这是一个简单的消息输入界面,用于接收提示(我试图创建一个类似于 ChatGPT 的 UI,但使用的是 Vaadin)
创建通讯流程
最后但同样重要的一步是,我们将创建一个服务,通过附加系统提示来与模型通讯,我们将使用 HashMap 进行替换,然后使用 SystemPromptTemplate 创建消息,再发送给 LLM
增强建议
如果你按照这里的步骤进行操作,你会发现未来有很多地方需要改进。以下是我的一些建议:
将 RAG 工作器和前端组件分离
目前,我的项目看起来是这样的
我相信,如果我们将工作负载分散到分布式系统中,效果会更好
使用专业向量数据库而非嵌入式简易数据库
如果我们需要将项目推广到更高的环境或向终端用户开放,不妨考虑使用专业向量数据库,而非消耗大量内存的嵌入式简易数据库。
目前,Spring AI 提供以下选项:
- Azure Vector Search - Azure 向量存储。
- ChromaVectorStore - Chroma 向量存储。
- MilvusVectorStore - Milvus 向量存储。
- Neo4jVectorStore - Neo4j 向量存储。
- PgVectorStore - PostgreSQL/PGVector 向量存储。
- PineconeVectorStore - PineCone 向量存储。
- QdrantVectorStore - Qdrant 向量存储。
- RedisVectorStore - Redis 向量存储。
- WeaviateVectorStore - Weaviate 向量存储。
结论
这就是我的行情分析实例。虽然规模不大,但我通过探索和动手实践,获得了宝贵的经验。
参考资源
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240730/Spring-AI-+-Ollama-%E7%9A%84%E8%BD%BB%E6%9D%BE%E6%9E%84%E5%BB%BALLM-%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%90%AB%E6%BA%90%E7%A0%81--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com