郑州大学现代远程教育 《网页设计与网站建设》个人主页,淮南做网站推广,竞价单页模板,中国优秀企业网站欣赏RAG#xff1a;融合检索与生成的文本精准生成技术
检索增强生成#xff08;RAG#xff09;是一种技术#xff0c;它通过结合检索模型和生成模型来提高文本生成的准确性。具体来说#xff0c;RAG首先利用检索模型从私有或专有的数据源中搜索相关信息#xff0c;然后将这些…
RAG融合检索与生成的文本精准生成技术
检索增强生成RAG是一种技术它通过结合检索模型和生成模型来提高文本生成的准确性。具体来说RAG首先利用检索模型从私有或专有的数据源中搜索相关信息然后将这些信息提供给生成模型如大型语言模型LLM以生成更加准确、基于上下文的回复。这种方法有助于减少大模型在生成过程中可能出现的“幻觉”现象并且能够使模型的回答更贴合企业的特定数据从而提高了回答的精确度与相关性。这样在使用大模型时即使面对企业特有的知识或数据也能获得更为精准的答案。
Spring AI提升Java AI开发效率与灵活性的解决方案
我们使用了Spring AI来做这个检索增强。
之所以选择Spring AI是因为在过去用Java编写AI应用时面临的一个主要困境是没有非常标准的Java封装。
现在Spring项目推出了一套可以兼容市面上主要各类生成任务的接口——Spring AI极大地解决了这一问题。
Spring AI通过标准化不同AI提供者的接口实现使得开发者能够一次编写代码仅通过修改配置即可轻松切换不同的AI实现。
同时它直接兼容Flux流输出简化了与基于流的机器人模型的集成。通过良好的抽象设计Spring AI显著减少了程序员在对接不同类型接口时查阅文档和迁移实现的工作量为基于Java的AI开发带来了极大的便利性和效率提升。因此采用Spring AI不仅提高了开发效率还增强了项目的可维护性与灵活性。
Spring生态AI框架Spring AI Alibaba赋能Java开发者高效对接多AI服务商
Spring AI Alibaba 是基于 Spring 生态系统设计的用于AI工程的应用框架特别适合 Java 和 Spring Boot 开发者。它通过提供一套统一的抽象接口标准化了不同AI服务提供商如阿里云、OpenAI等的接入方式使得开发者能够轻松切换AI服务而无需大幅改动代码。此外Spring AI Alibaba 集成了阿里云百炼系列的多个模型支持对话、文本生成图像等功能并提供了诸如Prompt Template等实用工具来简化开发过程。其核心优势在于极大提高了AI应用开发的效率与灵活性同时保持了与现有Java Spring Boot项目的良好兼容性。
增强检索打造PDF财务报表查询后端代码
为了通过检索增强的方式读取一个阿里巴巴的财务报表PDF并提供对外服务我们需要按照以下步骤进行
1. 确保前置条件
JDK版本确保你的JDK版本在17及以上。
Spring Boot版本确认使用的Spring Boot版本为3.3.x或更高。
API Key申请访问阿里云百炼页面登录账号后开通“百炼大模型推理”服务并创建一个新的API Key。将此Key配置到环境变量中
export AI_DASHSCOPE_API_KEYYOUR_VALID_API_KEY
并且在application.properties文件里添加
spring.ai.dashscope.api-key: ${AI_DASHSCOPE_API_KEY}
2. 添加仓库与依赖
由于spring-ai-alibaba-starter尚未发布到Maven中央仓库因此需要在项目的pom.xml文件中添加如下仓库设置来支持获取最新快照版本及里程碑版本
repositoriesrepositoryidsonatype-snapshots/idurlhttps://oss.sonatype.org/content/repositories/snapshots/urlsnapshotsenabledtrue/enabled/snapshots/repositoryrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repositoryrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repository/repositories然后添加必要的依赖项
dependenciesdependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter/artifactIdversion1.0.0-M2/version/dependency!-- 其他依赖 --
/dependencies3. 编写RAG服务相关代码
首先定义RagService类用于处理索引构建和查询逻辑。这包括向量存储、文档检索器以及如何使用这些组件来处理来自客户端的请求。
public class RagService {private final ChatClient chatClient;private final VectorStore vectorStore;private final DashScopeApi dashscopeApi new DashScopeApi(您的API密钥);DocumentRetriever retriever;public RagService(ChatClient chatClient, EmbeddingModel embeddingModel) {this.chatClient chatClient;vectorStore new DashScopeCloudStore(dashscopeApi,new DashScopeStoreOptions(阿里巴巴财报知识库));retriever new DashScopeDocumentRetriever(dashscopeApi,DashScopeDocumentRetrieverOptions.builder().withIndexName(阿里巴巴财报知识库).build());}// 构建索引public String buildIndex() {String filePath /path/to/your/financial_report.pdf;DocumentReader reader new DashScopeDocumentCloudReader(filePath, dashscopeApi, null);ListDocument documentList reader.get();vectorStore.add(documentList);return SUCCESS;}// 查询方法public StreamResponseSpec queryWithDocumentRetrieval(String message) {StreamResponseSpec response chatClient.prompt().user(message).advisors(new DocumentRetrievalAdvisor(retriever, DEFAULT_USER_TEXT_ADVISE)).stream();return response;}
}
4. 创建Controller以暴露REST API
最后我们需要创建一个控制器类来接收HTTP请求并调用之前定义的服务方法。
RestController
RequestMapping(/ai)
public class RagController {private final RagService ragService;public RagController(RagService ragService) {this.ragService ragService;}GetMapping(/steamChat)public FluxString generate(RequestParam(value input, defaultValue 2024年6月止云智能集团的营收是多少) String input, HttpServletResponse httpResponse) {StreamResponseSpec chatResponse ragService.queryWithDocumentRetrieval(input);httpResponse.setCharacterEncoding(UTF-8);return chatResponse.content();}GetMapping(/buildIndex)public String buildIndex() {return ragService.buildIndex();}
}
通过上述步骤我们实现了基于Spring Cloud Alibaba框架下的检索增强功能能够从指定的PDF文件中提取信息并通过HTTP接口返回给用户。需要注意的是在实际部署前请确保已经完成了所有必要的环境配置特别是关于API密钥的安全管理和正确配置。
构建React流式聊天应用从零开始的实现攻略 基于提供的知识我们可以分析出构建一个支持流式输出的前端项目需要遵循一定的步骤。这里的项目将使用React框架来创建并与后端服务进行交互以处理用户输入并显示响应。后端接口返回的是fluxString数据类型这意味着客户端能够以渐进的方式接收和展示信息而非等待全部数据加载完毕后再一次性展示。
分析
从给出的知识来看我们已经有了关于如何设置基础React环境、以及如何处理流式数据请求的具体示例。这些例子非常适合用来作为本问题解决方案的基础。接下来将详细介绍如何根据要求实现这样一个前端应用。
实现步骤
首先确保你已经安装了Node.js和npm或yarn然后按照以下步骤操作
初始化一个新的React应用
npx create-react-app rag-chat-frontend
cd rag-chat-frontend
npm install
修改public/index.html文件如果需要自定义HTML头部等信息:不过在这个案例中我们可以直接使用默认生成的内容。
更新src/index.js以引入应用程序入口点:
import React from react;
import ReactDOM from react-dom;
import App from ./App;ReactDOM.render(React.StrictModeApp //React.StrictMode,document.getElementById(root)
);
编写主组件src/App.js:
import React from react;
import ChatComponent from ./components/ChatComponent;function App() {return (div classNameAppChatComponent //div);
}export default App;
创建聊天组件src/components/ChatComponent.js 来处理用户输入及流式数据接收:
import React, { useState } from react;function ChatComponent() {const [input, setInput] useState();const [messages, setMessages] useState();const handleInputChange (event) {setInput(event.target.value);};const handleSendMessage async () {try {const response await fetch(http://localhost:8080/ai/steamChat?input${input});if (!response.ok) throw new Error(Network response was not ok);const reader response.body.getReader();const decoder new TextDecoder(utf-8);let done false;while (!done) {const { value, done: readerDone } await reader.read();done readerDone;const chunk decoder.decode(value, { stream: true });setMessages((prevMessages) prevMessages chunk);}setMessages((prevMessages) prevMessages \n\n\n\n);} catch (error) {console.error(Failed to fetch, error);}};return (divinputtypetextvalue{input}onChange{handleInputChange}placeholderEnter your message/button onClick{handleSendMessage}Send/buttondivh3Messages:/h3pre{messages}/pre/div/div);
}export default ChatComponent;
启动你的React应用:
npm start
这将打开浏览器并自动导航到 http://localhost:3000/ 你可以在这里测试你的聊天界面。
小结
通过上述步骤我们建立了一个基本的聊天应用程序界面它可以通过发送GET请求至指定URL (http://localhost:8080/ai/steamChat) 来与后端通信。该请求会携带用户的输入文本参数。当后端开始流式地返回数据时前端应用程序会逐步解析这些数据片段并即时更新显示给用户。这种方式非常适合于实时性较强的场景如在线聊天或实时问答系统。