当前位置: 首页 > news >正文

LangChain4j检索增强生成RAG

目录

    • RAG
    • 引入依赖
    • yml配置
    • 主启动类
    • 自定义ChatAssistant接口
    • 配置类LLMConfig
    • 控制类RagLanChain4jController
    • 测试
    • 总结

在这里插入图片描述

RAG


RAG (Retrieval-Augmented Generation) 即检索增强生成,是一种将外部知识检索与大型语言模型 (LLM) 生成能力相结合的人工智能技术框架。其核心思想是在LLM处理用户查询并生成回答之前,先从一个或多个外部知识源 (如数据库、文档集合、API等) 中检索与查询相关的、最新的信息片段,然后将这些检索到的信息作为额外的上下文注入到LLM的提示中,从而引导LLM生成更准确、更相关、更具事实性的内容。

引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- LangChain4j原生 基础--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId></dependency><!-- LangChain4j原生 高阶--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId></dependency><!-- easy-rag --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-easy-rag</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

yml配置

server:port: 9011spring:application:name: langchain4j-rag

主启动类

@SpringBootApplication
public class RagLangChain4jApp {public static void main(String[] args) {SpringApplication.run(RagLangChain4jApp.class, args);}
}

自定义ChatAssistant接口

public interface ChatAssistant {String chat(String msg);
}

配置类LLMConfig

@Configuration
public class LLMConfig {@Bean(name = "qwen")public ChatModel chatModelQwen() {return OpenAiChatModel.builder().apiKey(System.getenv("ALIYUN_KEY")).modelName("qwen-plus").baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1").build();}// 基于内存的向量数据库@Beanpublic InMemoryEmbeddingStore<TextSegment> inMemoryEmbeddingStore() {return new InMemoryEmbeddingStore<>();}@Beanpublic ChatAssistant chatAssistant(ChatModel chatModel,EmbeddingStore<TextSegment> embeddingStore) {return AiServices.builder(ChatAssistant.class).chatModel(chatModel).chatMemory(MessageWindowChatMemory.withMaxMessages(50)).contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore)).build();}
}

控制类RagLanChain4jController

@RestController
public class RagLanChain4jController {@Resourceprivate ChatAssistant chatAssistant;@Resourceprivate InMemoryEmbeddingStore<TextSegment> inMemoryEmbeddingStore;// http://localhost:9011/rag/chat?msg=错误码A0104和A0301是什么@GetMapping("/rag/chat")public String chat(@RequestParam(value = "msg") String msg) throws FileNotFoundException {//1 加载文档:使用适当的 DocumentLoader 和 DocumentParser 加载文档// Document document = FileSystemDocumentLoader.loadDocument("E:/Java/test.docx");FileInputStream fileInputStream = new FileInputStream("E:/Java/test.docx");Document document = new ApacheTikaDocumentParser().parse(fileInputStream);//2 转换文档:使用 DocumentTransformer 清理或增强文档(可选)//3 拆分文档:使用 DocumentSplitter 将文档拆分为小的片段(可选)//4 嵌入文档:使用 EmbeddingModel 将文档片段转换为嵌入向量//5 存储嵌入:使用 EmbeddingStoreIngestor 存储嵌入向量EmbeddingStoreIngestor.ingest(document, inMemoryEmbeddingStore);//6 检索相关内容:根据用户查询,从 EmbeddingStore 检索最相关的文档片段String result = chatAssistant.chat(msg);//7 生成响应:将检索到的内容与用户查询一起提供给大模型,生成最终的响应System.out.println(result);return result;}
}

测试

访问 http://localhost:9011/rag/chat?msg=错误码A0104和A0301是什么
在这里插入图片描述
在这里插入图片描述

总结


以上主要介绍了 LangChain4j 检索增强生成 RAG 相关知识,想了解更多 LangChain4j 知识的小伙伴请参考 LangChain4j 官网 进行学习,学习更多 LangChain4j 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。

http://www.lryc.cn/news/611864.html

相关文章:

  • Anthropic于本周一推出了其旗舰模型的升级版Claude Opus 4.1
  • 第十八天:C++进制之间的转换
  • 17.9 ChatGLM3-6B开源!32K长文本+推理提速45%,多任务性能飙升29.4%
  • Transwell 细胞迁移与侵袭实验:从原理到操作的详细指南
  • VSCode:基础使用 / 使用积累
  • QML开发:QML中的基本元素
  • 大数据之Flume
  • AT32的freertos下modbus TCP移植
  • #C语言——学习攻略:探索内存函数--memcpy、memmove的使用和模拟实现,memset、memcmp函数的使用
  • flex布局:容器的justify-content属性
  • CEH、OSCP、CISP、CISSP 四大网络安全认证攻略
  • 【hot100】无重复字符的最长子串-Python3
  • duiLib 编译时复制资源目录到exe同级目录
  • 推动本地流智能:基于 Apache Kafka 与 Flink 的实时机器学习实践
  • 无需SCADA/OPC,实现直接与西门子PLC Web API通讯实现数据读写(一)
  • Mysql如何迁移数据库数据
  • 【自动驾驶】《Sparse4Dv3 Advancing End-to-End 3D Detection and Tracking》论文阅读笔记
  • 工业协议转换终极武器:EtherCAT转PROFINET网关的连接举例
  • Spring Boot全局异常处理与日志监控实战指南
  • 从Navisworks到定制化BIM系统:HOOPS Exchange如何实现高效3D格式解析?
  • 【公考】----申论篇
  • 测试单节点elasticsearch配置存储压缩后的比率
  • 20250806给PRO-RK3566开发板在Buildroot系统下扩大rootfs分区2GB
  • 移动端网页调试实战,跨设备兼容与触控交互问题排查全流程
  • Class30数据增广
  • 【docker】完整 Dockerfile 示例和构建运行指南
  • SmartX 用户建云实践|宝信软件:搭建“双架构”私有云平台,灵活满足多种业务需求
  • Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞
  • Python爬虫 urllib 模块详细教程:零基础小白的入门指南
  • Unity3D水下场景与游泳系统开发指南