RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?

Langchain4j框架-Java程序员的大模型框架 LangChain4j 可以理解是Java版本的LangChain,是一个旨在简化将大型语言模型(LLM)集成到 Java 应用程序中的框架。它帮我们封装了不同LLM 提供商(如 OpenAI、Google Vertex AI)的专有API方便在不同 LLM 或嵌入式存储之间切换,而无需重写代码。该项目于 2023 年初启动,旨在填补 Java 生态系统中缺乏 LLM 库和框架的空白。 阅读详情

LLM 的知识仅限于其训练数据。如希望使 LLM 了解特定领域的知识或专有数据,可:

  • 使用本节介绍的 RAG
  • 使用你的数据对 LLM 进行微调
  • 结合使用 RAG 和微调

1 啥是 RAG?

RAG 是一种在将提示词发送给 LLM 之前,从你的数据中找到并注入相关信息的方式。这样,LLM 希望能获得相关的信息并利用这些信息作出回应,从而减少幻觉概率。

可通过各种信息检索方法找到相关信息。这些方法包括但不限于:

  • 全文(关键词)搜索。该方法使用 TF-IDF 和 BM25 等技术,通过匹配查询(例如用户提问)中的关键词与文档数据库中的内容来搜索文档。它根据这些关键词在每个文档中的频率和相关性对结果进行排名
  • 向量搜索,也称“语义搜索”。文本文档通过嵌入模型转换为数值向量。然后根据查询向量与文档向量之间的余弦相似度或其他相似度/距离度量,查找并对文档进行排名,从而捕捉更深层次的语义含义
  • 混合搜索。结合多种搜索方法(例如全文搜索 + 向量搜索)通常能提高搜索效果

本文主要关注向量搜索。全文搜索和混合搜索目前仅通过 Azure AI Search 集成支持,详情参见 AzureAiSearchContentRetriever。计划在不久的将来扩展 RAG 工具箱,以包含全文搜索和混合搜索。

2 RAG 的阶段

RAG 过程分为两个不同阶段:索引和检索。LangChain4j 提供用于两个阶段的工具。

2.1 索引

文档会进行预处理,以便在检索阶段实现高效搜索。

该过程可能因使用的信息检索方法而有所不同。对向量搜索,通常包括清理文档,利用附加数据和元数据对其进行增强,将其拆分为较小的片段(即“分块”),对这些片段进行嵌入,最后将它们存储在嵌入存储库(即向量数据库)。

通常在离线完成,即用户无需等待该过程的完成。可通过例如每周末运行一次的定时任务来重新索引公司内部文档。负责索引的代码也可以是一个仅处理索引任务的单独应用程序。

但某些场景,用户可能希望上传自定义文档以供 LLM 访问。此时,索引应在线进行,并成为主应用程序的一部分。

索引阶段的简化流程图

在这里插入图片描述

2.2 检索

通常在线进行,当用户提交一个问题时,系统会使用已索引的文档来回答问题。

该过程可能会因所用的信息检索方法不同而有所变化。对于向量搜索,通常包括嵌入用户的查询(问题),并在嵌入存储库中执行相似度搜索。然后,将相关片段(原始文档的部分内容)注入提示词并发送给 LLM。

检索阶段的简化流程图

在这里插入图片描述

3 简单 RAG

LangChain4j 提供了“简单 RAG”功能,使你尽可能轻松使用 RAG。无需学习嵌入技术、选择向量存储、寻找合适的嵌入模型、了解如何解析和拆分文档等操作。只需指向你的文档,LangChain4j 就会自动处理!

若需定制化RAG,请跳到rag-apis。

当然,这种“简单 RAG”的质量会比定制化 RAG 设置的质量低一些。然而,这是学习 RAG 或制作概念验证的最简单方法。稍后,您可以轻松地从简单 RAG 过渡到更高级的 RAG,逐步调整和自定义各个方面。

3.1 导入 langchain4j-easy-rag 依赖

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-easy-rag</artifactId>
    <version>0.34.0</version>
</dependency>

3.2 加载文档

List<Document> documents = FileSystemDocumentLoader.loadDocuments("/home/langchain4j/documentation");

这将加载指定目录下的所有文件。

底层发生了什么?

Apache Tika 库被用于检测文档类型并解析它们。由于我们没有显式指定使用哪个 DocumentParser,因此 FileSystemDocumentLoader 将加载 ApacheTikaDocumentParser,该解析器由 langchain4j-easy-rag依赖通过 SPI 提供。

咋自定义加载文档?

若想加载所有子目录中的文档,可用 loadDocumentsRecursively :

List<Document> documents = FileSystemDocumentLoader.loadDocumentsRecursively("/home/langchain4j/documentation");

还可通过使用 glob 或正则表达式过滤文档:

PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:*.pdf");
List<Document> documents = FileSystemDocumentLoader.loadDocuments("/home/langchain4j/documentation", pathMatcher);

使用 loadDocumentsRecursively 时,可能要在 glob 中使用双星号(而不是单星号):glob:**.pdf。

3.3 预处理

并将文档存储在专门的嵌入存储中也称向量数据库。这是为了在用户提出问题时快速找到相关信息片段。可用 15+ 种支持的嵌入存储,但为简化操作,使用内存存储:

InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
EmbeddingStoreIngestor.ingest(documents, embeddingStore);
底层发生了啥?
  • EmbeddingStoreIngestor 通过 SPI 从 langchain4j-easy-rag 依赖中加载 DocumentSplitter。每个 Document 被拆分成较小的片段(即 TextSegment),每个片段不超过 300 个 token,且有 30 个 token 的重叠部分。
  • EmbeddingStoreIngestor 通过 SPI 从 langchain4j-easy-rag 依赖中加载 EmbeddingModel。每个 TextSegment 都使用 EmbeddingModel 转换为 Embedding。

选择 bge-small-en-v1.5 作为简单 RAG 的默认嵌入模型。该模型在 MTEB 排行榜上取得了不错的成绩,其量化版本仅占用 24 MB 空间。因此,我们可以轻松将其加载到内存中,并在同一进程中通过 ONNX Runtime] 运行。

可在完全离线的情况下,在同一个 JVM 进程中将文本转换为嵌入。LangChain4j 提供 5 种流行的嵌入模型开箱即用。

  1. 所有 TextSegment 和 Embedding 对被存储在 EmbeddingStore 中
  2. 创建一个AI 服务,它将作为我们与 LLM 交互的 API:
interface Assistant {

    String chat(String userMessage);
}

ChatLanguageModel chatModel = OpenAiChatModel.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .modelName(GPT_4_O_MINI)
    .build();

Assistant assistant = AiServices.builder(Assistant.class)
    .chatLanguageModel(chatModel)
    .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
    .contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore))
    .build();

配置 Assistant 使用 OpenAI 的 LLM 来回答用户问题,记住对话中的最近 10 条消息,并从包含我们文档的 EmbeddingStore 中检索相关内容。

  1. 对话!
String answer = assistant.chat("如何使用 LangChain4j 实现简单 RAG?");

4 访问源信息

如希望访问增强消息的检索源,可将返回类型包装在 Result 类中:

interface Assistant {

    Result<String> chat(String userMessage);
}

Result<String> result = assistant.chat("如何使用 LangChain4j 实现简单 RAG?");

String answer = result.content();
List<Content> sources = result.sources();

流式传输时,可用 onRetrieved() 指定一个 Consumer<List<Content>>:

interface Assistant {

    TokenStream chat(String userMessage);
}

assistant.chat("如何使用 LangChain4j 实现简单 RAG?")
    .onRetrieved(sources -> ...)
    .onNext(token -> ...)
    .onError(error -> ...)
    .start();

5 RAG API

LangChain4j 提供丰富的 API 让你可轻松构建从简单到高级的自定义 RAG 流水线。本节介绍主要的领域类和 API。

5.1 文档(Document)

Document 类表示整个文档,例如单个 PDF 文件或网页。当前,Document 只能表示文本信息,但未来的更新将支持图像和表格。

package dev.langchain4j.data.document;

/**
 * 表示通常对应于单个文件内容的非结构化文本。此文本可能来自各种来源,如文本文件、PDF、DOCX 或网页 (HTML)。
 * 每个文档都可能具有关联的元数据,包括其来源、所有者、创建日期等
 */
public class Document {

    /**
     * Common metadata key for the name of the file from which the document was loaded.
     */
    public static final String FILE_NAME = "file_name";
    /**
     * Common metadata key for the absolute path of the directory from which the document was loaded.
     */
    public static final String ABSOLUTE_DIRECTORY_PATH = "absolute_directory_path";
    /**
     * Common metadata key for the URL from which the document was loaded.
     */
    public static final String URL = "url";

    private final String text;
    private final Metadata metadata;
API
  • Document.text() 返回 Document 的文本内容
  • Document.metadata() 返回 Document 的元数据(见下文)
  • Document.toTextSegment() 将 Document 转换为 TextSegment(见下文)
  • Document.from(String, Metadata) 从文本和 Metadata 创建一个 Document
  • Document.from(String) 从文本创建一个带空 Metadata 的 Document

5.2 元数据(Metadata)

每个 Document 都包含 Metadata,用于存储文档的元信息,如名称、来源、最后更新时间、所有者或任何其他相关细节。

Metadata 以KV对形式存储,其中键是 String 类型,值可为 String、Integer、Long、Float、Double 中的任意一种。

用途
  • 在将文档内容包含到 LLM 的提示词中时,可以将元数据条目一并包含,向 LLM 提供额外信息。例如,提供文档名称和来源可以帮助 LLM 更好地理解内容。
  • 在搜索相关内容以包含在提示词中时,可以根据元数据条目进行过滤。例如,您可以将语义搜索范围限制为属于特定所有者的文档。
  • 当文档的来源被更新(例如文档的特定页面),您可以通过其元数据条目(例如“id”、“source”等)轻松找到相应的文档,并在嵌入存储中更新它,以保持同步。
API
  • Metadata.from(Map) 从 Map 创建 Metadata
  • Metadata.put(String key, String value) / put(String, int) / 等方法添加元数据条目
  • Metadata.getString(String key) / getInteger(String key) / 等方法返回元数据条目的值,并转换为所需类型
  • Metadata.containsKey(String key) 检查元数据中是否包含指定键的条目
  • Metadata.remove(String key) 从元数据中删除指定键的条目
  • Metadata.copy() 返回元数据的副本
  • Metadata.toMap() 将元数据转换为 Map

5.3 文档加载器(Document Loader)

可从 String 创建一个 Document,但更简单的是使用库中包含的文档加载器之一:

  • FileSystemDocumentLoader 来自 langchain4j 模块
  • UrlDocumentLoader 来自 langchain4j 模块
  • AmazonS3DocumentLoader 来自 langchain4j-document-loader-amazon-s3 模块
  • AzureBlobStorageDocumentLoader 来自 langchain4j-document-loader-azure-storage-blob 模块
  • GitHubDocumentLoader 来自 langchain4j-document-loader-github 模块
  • TencentCosDocumentLoader 来自 langchain4j-document-loader-tencent-cos 模块

5.4 文本片段转换器

TextSegmentTransformer 类似于 DocumentTransformer(如上所述),但它用于转换 TextSegment。

与 DocumentTransformer 类似,没有统一的解决方案,建议根据您的数据自定义实现 TextSegmentTransformer。

提高检索效果的有效方法是将 Document 的标题或简短摘要包含在每个 TextSegment 。

5.5 嵌入

Embedding 类封装了一个数值向量,表示嵌入内容(通常是文本,如 TextSegment)的“语义意义”。

阅读更多关于向量嵌入的内容:

API
  • Embedding.dimension() 返回嵌入向量的维度(即长度)
  • CosineSimilarity.between(Embedding, Embedding) 计算两个 Embedding 之间的余弦相似度
  • Embedding.normalize() 对嵌入向量进行归一化(就地操作)

嵌入模型

EmbeddingModel 接口代表一种特殊类型的模型,将文本转换为 Embedding。

当前支持的嵌入模型可以在这里找到。

API
  • EmbeddingModel.embed(String) 嵌入给定的文本
  • EmbeddingModel.embed(TextSegment) 嵌入给定的 TextSegment
  • EmbeddingModel.embedAll(List<TextSegment>) 嵌入所有给定的 TextSegment
  • EmbeddingModel.dimension() 返回该模型生成的 Embedding 的维度

嵌入存储

EmbeddingStore 接口表示嵌入存储,也称为向量数据库。它用于存储和高效搜索相似的(在嵌入空间中接近的)Embedding。

当前支持的嵌入存储可以在这里找到。

EmbeddingStore 可以单独存储 Embedding,也可以与相应的 TextSegment 一起存储:

  • 它可以仅按 ID 存储 Embedding,嵌入的数据可以存储在其他地方,并通过 ID 关联。
  • 它可以同时存储 Embedding 和被嵌入的原始数据(通常是 TextSegment)。
API
  • EmbeddingStore.add(Embedding) 将给定的 Embedding 添加到存储中并返回随机 ID
  • EmbeddingStore.add(String id, Embedding) 将给定的 Embedding 以指定 ID 添加到存储中
  • EmbeddingStore.add(Embedding, TextSegment) 将给定的 Embedding 和关联的 TextSegment 添加到存储中,并返回随机 ID
  • EmbeddingStore.addAll(List<Embedding>) 将一组 Embedding 添加到存储中,并返回一组随机 ID
  • EmbeddingStore.addAll(List<Embedding>, List<TextSegment>) 将一组 Embedding 和关联的 TextSegment 添加到存储中,并返回一组随机 ID
  • EmbeddingStore.search(EmbeddingSearchRequest) 搜索最相似的 Embedding
  • EmbeddingStore.remove(String id) 按 ID 从存储中删除单个 Embedding
  • EmbeddingStore.removeAll(Collection<String> ids) 按 ID 从存储中删除多个 Embedding
  • EmbeddingStore.removeAll(Filter) 删除存储中与指定 Filter 匹配的所有 Embedding
  • EmbeddingStore.removeAll() 删除存储中的所有 Embedding
嵌入搜索请求(EmbeddingSearchRequest)

EmbeddingSearchRequest 表示在 EmbeddingStore 中的搜索请求。其属性如下:

  • Embedding queryEmbedding: 用作参考的嵌入。
  • int maxResults: 返回的最大结果数。这是一个可选参数,默认为 3。
  • double minScore: 最低分数,范围为 0 到 1(含)。仅返回得分 >= minScore 的嵌入。这是一个可选参数,默认为 0。
  • Filter filter: 搜索时应用于 Metadata 的过滤器。仅返回 Metadata 符合 Filter 的 TextSegment。
过滤器(Filter)

关于 Filter 的更多细节可以在这里找到。

嵌入搜索结果(EmbeddingSearchResult)

EmbeddingSearchResult 表示在 EmbeddingStore 中的搜索结果,包含 EmbeddingMatch 列表。

嵌入匹配(Embedding Match)

EmbeddingMatch 表示一个匹配的 Embedding,包括其相关性得分、ID 和嵌入的原始数据(通常是 TextSegment)。

嵌入存储导入器

EmbeddingStoreIngestor 表示一个导入管道,负责将 Document 导入到 EmbeddingStore。

在最简单的配置中,EmbeddingStoreIngestor 使用指定的 EmbeddingModel 嵌入提供的 Document,并将它们与其 Embedding 一起存储在指定的 EmbeddingStore 中:

EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
        .embeddingModel(embeddingModel)
        .embeddingStore(embeddingStore)
        .build();

ingestor.ingest(document1);
ingestor.ingest(document2, document3);
ingestor.ingest(List.of(document4, document5, document6));

可选地,EmbeddingStoreIngestor 可以使用指定的 DocumentTransformer 来转换 Document。这在您希望在嵌入之前对文档进行清理、增强或格式化时非常有用。

可选地,EmbeddingStoreIngestor 可以使用指定的 DocumentSplitter 将 Document 拆分为 TextSegment。这在文档较大且您希望将其拆分为较小的 TextSegment 时非常有用,以提高相似度搜索的质量并减少发送给 LLM 的提示词的大小和成本。

可选地,EmbeddingStoreIngestor 可以使用指定的 TextSegmentTransformer 来转换 TextSegment。这在您希望在嵌入之前对 TextSegment 进行清理、增强或格式化时非常有用。

示例:

EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()

    // 为每个 Document 添加 userId 元数据条目,便于后续过滤
    .documentTransformer(document -> {
        document.metadata().put("userId", "12345");
        return document;
    })

    // 将每个 Document 拆分为 1000 个 token 的 TextSegment,具有 200 个 token 的重叠
    .documentSplitter(DocumentSplitters.recursive(1000, 200, new OpenAiTokenizer()))

    // 为每个 TextSegment 添加 Document 的名称,以提高搜索质量
    .textSegmentTransformer(textSegment -> TextSegment.from(
            textSegment.metadata("file_name") + "\n" + textSegment.text(),
            textSegment.metadata()
    ))

    .embeddingModel(embeddingModel)
    .embeddingStore(embeddingStore)
    .build();

程序员为什么要学大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

​

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线 ↓

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容:

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容:

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容:

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容:

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

​

大模型开发之Langchain4j(看这一篇就够了) 本文介绍了SpringBoot与Langchain4j结合开发AI应用的技术方案。首先阐述了大模型的定义、特点及其在NLP、CV等领域的分类,包括通用(L0)、行业(L1)和垂直(L2)三个层级,并列举了大语言模型的主要应用场景。随后对比了Java生态的三大AI开发工具:LangChain4J(功能全面,支持15+主流模型)、Spring AI(深度集成Spring生态)和Spring AI Alibaba(对接阿里云大模型)。重点分析了LangChain4j作为Java专用LLM集成库的核心功能,包括多模 阅读详情

相关推荐

个人总结 - LangChain4j应用(完结)

LangChain4j是一个旨在简化大语言模型(LLMs)与Java应用程序集成的框架。 主要介绍:Classification、Image Models、Spring Boot 集成、Logging、Observability、Integrations(集成)

向前 3524

Java开发者LLM实战——使用LangChain4j构建本地RAG系统

RAG(Retrieval-Augmented Generation)的核心思想是:将传统的信息检索(IR)技术与现代的生成式大模型(如chatGPT)结合起来。具体来说,RAG模型在生成答案之前,会首先从一个大型的文档库或知识库中检索到若干条相关的文档片段。再将这些检索到的片段作为额外的上下文信息,输入到生成模型中,从而生成更为准确和信息丰富的文本。RAG的工作原理可以分为以下几个步骤:1.接收请求:首先,系统接收到用户的请求(例如提出一个问题)。2.信息****检索(R)

京东科技开发者 3540

四大主流大模型集成框架深度解析:LangChain、LangGraph、LangChain4j 与 LlamaIndex

大模型集成框架生态正在经历从 "百花齐放" 到 "分层收敛" 的演进:通用框架做广度,专业框架做深度,编排框架做复杂度,不同语言生态各自发展。LangChain凭借先发优势与庞大生态,仍是通用框架的首选,但其定位正逐渐从 "全能框架" 向 "编排底座" 收敛LangGraph代表了 Agent 开发的正确方向 —— 显式状态、可控流程、可观测性,是复杂智能体的事实标准是 Java 企业级市场的核心玩家,随着大模型在传统行业渗透,其重要性将持续提升LlamaIndex。

u013127325的博客 866

Java程序员的AI之LangChain4j(一)从零到企业级AI开发

让JAVA程序员更快的理解AI接入的LangChain4j

qq1071643762的博客 1万+

LangChain4j:Java开发者的大语言模型集成新范式

在人工智能技术迅猛发展的今天,大型语言模型(LLM)已成为推动智能化应用落地的核心引擎。然而,对于Java开发者而言,如何高效地将LLM能力融入传统企业级应用,曾是一道技术鸿沟。LangChain4j作为Java生态中首个专注于LLM集成的开源框架,以模块化设计和高度可扩展性,正在重塑Java开发者构建AI应用的方式。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1264

AI Agent+RAG组合拳:从架构到实战的知识库问答指南

在人工智能应用落地中,RAG(检索增强生成)通过外部知识库为大模型提供事实依据,而AI Agent则赋予模型规划、行动与反思的自主决策能力。二者结合形成的Agentic RAG,不仅能解决传统检索中多跳问题、查询表达不匹配及幻觉等痛点,还能通过多轮检索、查询改写和工具调度,显著提升知识库问答的准确性与可解释性。本文从向量检索、混合召回、Agent编排到Graph RAG与评估体系,系统拆解了实际项目中的完整落地路径,涵盖LangChain、Spring AI等主流技术栈,并给出银行、通信等行业场景的实践经验

weixin_33861800的博客 792

Langchain4j如何实现智能问答的跨越式进化?

若想加载所有子目录中的文档,可用使用。

Everly_的博客 793

LangChain与Exa Search实战:构建智能RAG搜索代理与知识库系统

检索增强生成(RAG)是解决大语言模型(LLM)知识局限与幻觉问题的关键技术范式。其核心原理在于将外部知识源(如搜索引擎、数据库)与LLM的生成能力相结合,通过检索获取实时、准确的信息,再交由LLM进行理解、整合与回答,从而极大提升了AI应用在事实准确性、时效性和可解释性方面的价值。这一技术广泛应用于智能客服、行业研究、知识库问答等需要动态信息获取的场景。本文聚焦于如何利用专为LLM设计的搜索引擎Exa,结合LangChain框架的编排能力,高效实现RAG系统。Exa通过语义搜索(Neural Search

weixin_30645617的博客 412

基于LangChain4j的CRAG系统实战:让RAG具备反思与纠错能力

检索增强生成(RAG)技术通过结合检索系统与大语言模型,有效提升了问答系统的准确性和信息可靠性。其核心原理在于利用向量检索从知识库中获取相关上下文,再交由大模型生成答案,从而减少模型幻觉。这项技术的价值在于能够处理动态、专有的知识,广泛应用于智能客服、企业知识库和文档分析等场景。然而,传统RAG面临检索结果质量不可控的挑战,当知识库存在错误或过时信息时,系统容易产生误导性输出。为此,Agentic RAG和CRAG(纠错检索增强生成)等进阶范式应运而生,它们通过引入评估、反思和动态纠错机制,显著提升了系统的

weixin_34290096的博客 332

三相Vienna整流器过零点电流畸变?试试这个SVPWM调制波补偿技巧

本文针对三相Vienna整流器在电流过零点附近出现的电流畸变问题,提出了一种基于SVPWM调制波补偿的有效解决方案。该方法通过注入零序分量重构占空比,巧妙解决因拓扑约束导致的调制矛盾,在基本不增加计算复杂度的前提下,显著平滑电流波形,降低THD。

weixin_29212867的博客 114

阿里云网络架构设计

背景 一个企业上云,首先要考虑整个网络的规划,涉及到云上和云下的网络规划,云上VPC的规划,云上不同地域VPC的互通,云上可用区的选择等等,所以一定要提前规划好整体的网络架构,现在阿里云云上的虚拟化网络解决方案已经完全转向 了云企业网,所以所有使用阿里云的企业客户多多少少都会使用阿里云的CEN 支撑自己的业务。 云企业网介绍 云企业网(Cloud Enterprise Network)是承载在阿里云提供的高性能、低延迟的私有全球网络上的一张高可用网络。 IDC专线接入CEN 首先面临的是云上和云下打通,那么

修电脑的码农 4840

本地RAG实战:用Ollama+LangChain搭建私有文档智能问答系统

RAG(检索增强生成)是一种将大语言模型与外部知识源动态结合的关键技术,其核心原理是通过向量检索从私有文档中精准召回相关片段,再交由LLM基于事实生成答案,从而突破模型知识截止与幻觉瓶颈。相比微调或重训练,RAG具备零参数修改、秒级知识更新、数据本地化等显著工程优势,特别适用于PDF、数据库、网页等多源异构文档的实时问答场景。本文聚焦本地化落地,详解如何利用Ollama轻量部署Llama 3.1、LangChain构建端到端流水线,并通过向量对齐、上下文压缩与Prompt约束等关键技术,实现高准确率、可溯源

weixin_34195142的博客 497

通俗解析:霍尔编码器、光电编码器、电位计、磁编码器和旋转变压器的实战选型指南

本文深入解析了霍尔编码器、光电编码器、电位计、磁编码器和旋转变压器五大主流编码器的工作原理与核心特性。通过对比精度、环境耐受性、成本及寿命等关键维度,并结合消费电子、工业自动化、汽车电子及极端环境等典型应用场景,提供了一份清晰的实战选型指南,旨在帮助工程师根据具体需求,在性能、可靠性与成本间做出最优决策。

weixin_29216353的博客 254

LangChain4j + Redis向量库:除了RAG,你还能用它做这些事(实战思路分享)

本文探讨了LangChain4j与Redis向量数据库结合的高阶应用,超越基础的RAG(检索增强生成)技术,展示了五大实战场景:智能FAQ客服系统、用户画像向量化、代码知识库管理、商品语义化搜索和法律文档智能归类。这些创新应用显著提升了语义理解和智能推荐的效果,为企业级AI开发提供了新思路。

weixin_27051161的博客 249

TRK-MPC5634M开发板实战:从硬件解析到CAN、ADC外设驱动调试

在嵌入式系统开发,尤其是汽车电子和工业控制领域,微控制器(MCU)是核心执行单元。其工作原理基于处理器内核、存储器和丰富的外设接口协同工作,通过软件编程实现对硬件的精确控制。这种技术价值在于能够为严苛环境提供可靠、实时的控制解决方案。典型的应用场景包括汽车车身控制、网关、电池管理系统以及工业自动化设备。本文聚焦于恩智浦(NXP)基于Power Architecture e200z0内核的汽车级MCU——MPC5634M,并以其官方评估板TRK-MPC5634M为平台,深入探讨其硬件设计逻辑、软件环境搭建及核

weixin_29997523的博客 288

从零理解Brep:用Python玩转3D建模的边界表示法(附OpenCASCADE示例)

本文深入解析了边界表示法(Brep)在3D建模中的应用,通过Python和OpenCASCADE的实战示例,详细介绍了Brep的核心数据结构、布尔运算、网格转换及3D打印优化技巧。适合CAD设计、3D打印和计算机图形学领域的开发者学习与实践。

n4o5p6q7r的博客 427

高级java每日一道面试题-2025年8月05日-基础篇[LangChain4j]-什么是 Agent?LangChain4j 中的 Agent 有哪些类型?

摘要(150字): LangChain4j的Agent(智能体)是大语言模型的强大抽象,具备任务导向、工具使用、状态感知和协同能力等特征。与普通AI Service不同,Agent通过AgenticScope实现状态共享和调用链记录。LangChain4j支持两大类Agent系统:预定义路径的Workflows和动态决策的Pure Agents。提供了多种Workflow模式,包括顺序/并行/循环工作流和条件路由,通过@Agent注解和AgenticServices工厂类实现。典型应用包括创意写作流程(顺序

qq_43071699的博客 742

Switch游戏安装新思路:抛弃Commander One,试试这款免费的Mac神器OpenMTP

本文介绍了Mac用户安装Switch游戏的新选择——免费工具OpenMTP,对比收费软件Commander One,OpenMTP在MTP连接稳定性和文件管理上更具优势。详细解析了OpenMTP的安装配置、核心功能及实战操作,帮助用户高效完成游戏安装,特别适合已破解并安装DBI的Switch用户。

weixin_30664051的博客 583

Graph RAG实战:用知识图谱升级网站智能问答

知识图谱是一种结构化表达实体及其逻辑关系的技术,其核心在于建模‘是什么’与‘为什么相关’的语义网络。相比传统向量检索依赖文本相似度,图谱通过节点、关系与属性实现可推理的知识组织,显著提升AI在复杂业务场景下的准确率与可解释性。Graph RAG正是这一范式的工程落地——它将文档、API手册、FAQ等非结构化内容转化为图结构,再结合Langchain工作流编排与GPT-4o生成能力,让问答系统具备‘顺藤摸瓜’的因果推演能力。典型应用场景包括SaaS官网自助客服、技术文档智能导航、HR员工政策问答等。本文聚焦G

weixin_30751947的博客 344

【图数据库与知识图谱入门】2.2 图数据库 vs. 关系型数据库 vs. NoSQL数据库

本文对比了关系型数据库、NoSQL数据库和图数据库的核心差异与应用场景。关系型数据库以二维表结构为核心,适合结构化数据的事务处理(如MySQL),但多表关联查询性能随层级增加而下降。NoSQL数据库(如MongoDB)具有灵活schema,适合海量非结构化数据存储,但关联查询能力较弱。图数据库专注于节点-边关系建模,擅长处理复杂关联分析(如社交网络)。通过学生-课程案例展示了MySQL的多表JOIN操作和MongoDB的两种关联实现方式(内嵌文档和文档引用),揭示了不同数据库在数据关联处理上的本质区别。

kngines 1541

SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models

大型语言模型(LLM)被认为是推进智能教育的一项关键技术,因为它们展示了深入理解教学场景和为学生提供个性化指导的潜力。然而,当前个性化教学中基于LLM的应用主要遵循“问答”范式,学生被动地获得答案和解释。在本文中,我们提出了苏格拉底式教学模式(SocraticLM ),它实现了一种苏格拉底式的“发人深省”的教学范式,实现了真正的课堂教师的角色,让学生积极参与到真正掌握解决问题所需的思考过程中。

weixin_43961909的博客 2883
上一篇: 使用LangChain4J实现Agent与Tool调用
下一篇: 【大语言模型基础】-详解Transformer原理
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值