Langchain4J是一个基于Java语言开发的区块链框架,它提供了一系列的工具和接口,帮助开发者快速搭建和部署区块链应用。 Langchain4J框架的设计灵感来源于区块链技术的快速发展和应用需求的日益增长,它致力于简化区块链开发过程,提高开发效率和可靠性。 在Langchain4J框架中,核心的功能模块包括:区块链网络管理、智能合约支持、交易处理、安全认证等。 构建示例应用:通过构建简单的示例应用来练习使用Langchain4J框架,可以帮助加深对框架的理解,并检验自己的学习成果。 总的来说,通过深入学习Langchain4J框架的源码并实践构建应用,有助于提升自己的区块链开发能力,同时也可以为社区贡献自己的经验和见解。
项目简介LangChain4j 是一个专为 Java 开发者设计的大语言模型 (LLM) 集成框架,旨在简化 Java 应用程序与各种 LLM 提供商的集成过程。 核心目标统一 API 接口 - 为不同的 LLM 提供商和向量存储提供统一的接口丰富的工具箱 - 提供从底层到高层的各种抽象和实现大量示例 - 通过丰富的示例帮助开发者快速上手️ 项目架构图LangChain4j 架构图 - 完整的模块依赖和功能分层 功能模块详解 核心模块 (Core Modules)模块功能描述状态langchain4j-core 提供所有核心接口、抽象类和基础功能✅ 稳定langchain4j 模块依赖关系模块依赖关系图 - 分层架构和组件交互关系 快速开始Maven 依赖配置<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j
序本文主要研究一下langchain4j的ChatMemoryChatMemorylangchain4j-core/src/main/java/dev/langchain4j/memory/ChatMemory.javapublic SystemMessage,添加相同的SystemMessage会被忽略,不同的SystemMessage会保留最新的ChatMemoryStorelangchain4j-core/src/main/java/dev/langchain4j 字符串;InMemoryChatMemoryStore则采用ConcurrentHashMap直接存储listChatMessagelangchain4j-core/src/main/java/dev/langchain4j Quentin Tarantino was born on March 27, 1959 (making him 64 years old as of 2023).原理DefaultAiServicesdev/langchain4j , 1963, so he is currently 58 years old.chatMemory.add(answer2);把userMessage、answer都添加到chatMemory中小结langchain4j
序 本文主要研究一下langchain4j-spring-boot-starter的RagAutoConfig LangChain4jAutoConfig dev/langchain4j/spring/ LangChain4jAutoConfig自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessor RagAutoConfig dev/langchain4j } // TODO test } RagAutoConfig默认注册了InMemoryEmbeddingStore、ContentRetriever RagProperties dev/langchain4j
序本文主要研究一下langchain4j-spring-boot-starter的AiServicesAutoConfigLangChain4jAutoConfigdev/langchain4j/spring LangChain4jAutoConfig自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessorAiServiceScannerProcessordev/langchain4j postProcessBeanDefinitionRegistry通过ClassPathAiServiceScanner去扫描@AiService注解的类ClassPathAiServiceScannerdev/langchain4j BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, registry)注册到registryAiServicesAutoConfigdev/langchain4j AiServiceFactorydev/langchain4j/service/spring/AiServiceFactory.javaclass AiServiceFactory implements
序 本文主要研究一下langchain4j-spring-boot-starter的AiServicesAutoConfig LangChain4jAutoConfig dev/langchain4j/ 自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessor AiServiceScannerProcessor dev/langchain4j postProcessBeanDefinitionRegistry通过ClassPathAiServiceScanner去扫描@AiService注解的类 ClassPathAiServiceScanner dev/langchain4j BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, registry)注册到registry AiServicesAutoConfig dev/langchain4j AiServiceFactory dev/langchain4j/service/spring/AiServiceFactory.java class AiServiceFactory implements
序 本文主要研究一下langchain4j的Agent 示例 CustomerSupportAgent customer-support-agent-example/src/main/java/dev/ langchain4j/example/CustomerSupportAgent.java @AiService public interface CustomerSupportAgent { SystemMessage、memoryId、userMessage CustomerSupportAgentIT customer-support-agent-example/src/test/java/dev/langchain4j langchain4j目前暂不支持类似AutoGen或CrewAI中用于构建多智能体系统的"Agent"高级抽象功能,如果需要则可以基于low-level的API去构建。
序 本文主要研究一下langchain4j的AiServices 示例 原生版本 public interface Assistant { String chat(String userMessage RequestParam("prompt") String prompt) { return assistantV2.chat(prompt); } 源码 AiServices dev/langchain4j DefaultAiServices dev/langchain4j/service/DefaultAiServices.java class DefaultAiServices<T> extends AiServices 小结 langchain4j提供了诸如ChatLanguageModel, ChatMessage, ChatMemory的low level的组件,也提供了诸如Chains和AI Services这样的 langchain4j提供了AiServices来创建DefaultAiServices,它默认是通过JDK的Proxy.newProxyInstance创建了实现类。 doc ai-services
版本 0.28.0 源码 使用langchain4j,可以通过AiServices来封装聊天模型API,实现会话记忆,工具调用,搜索增强,内容审查等功能,并提供简单灵活的用户接口 DefaultAiServices
序本文主要研究一下langchain4j的AiServices示例原生版本public interface Assistant { String chat(String userMessage); RequestParam("prompt") String prompt) { return assistantV2.chat(prompt); } 源码AiServicesdev/langchain4j DefaultAiServicesdev/langchain4j/service/DefaultAiServices.javaclass DefaultAiServices<T> extends AiServices 小结langchain4j提供了诸如ChatLanguageModel, ChatMessage, ChatMemory的low level的组件,也提供了诸如Chains和AI Services这样的 langchain4j提供了AiServices来创建DefaultAiServices,它默认是通过JDK的Proxy.newProxyInstance创建了实现类。docai-services
序本文主要研究一下langchain4j-spring-boot-starter的RagAutoConfigLangChain4jAutoConfigdev/langchain4j/spring/LangChain4jAutoConfig.java LangChain4jAutoConfig自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessorRagAutoConfigdev/langchain4j builder.build(); } // TODO test}RagAutoConfig默认注册了InMemoryEmbeddingStore、ContentRetrieverRagPropertiesdev/langchain4j
序本文主要研究一下langchain4j的RAG概述RAG(Retrieval-Augmented Generation)即检索增强生成,它通过检索来获取相关信息,注入到prompt,然后用增强的prompt 实现LangChain4j 提供了三种RAG(Retrieval-Augmented Generation,检索增强生成)的实现方式:Easy RAG:这是最简单的方式,适合初学者快速上手。 用户只需将文档丢给LangChain4j,无需了解嵌入、向量存储、正确的嵌入模型选择以及如何解析和拆分文档等复杂内容。这种方式非常适合快速体验 RAG 功能。 LangChain4j handles everything under the hood.* **Retrieval:** LangChain4j uses Apache Tika to detect LangChain4j 提供了三种RAG(Retrieval-Augmented Generation,检索增强生成)的实现方式:Easy RAG、Naive RAG、Advanced RAG。
序本文主要研究一下langchain4j的Naive RAG示例public class Naive_RAG_Example { /** * This example demonstrates In this example, we will use OpenAI's gpt-4o-mini, but you can choose any supported model. // Langchain4j this example, we'll import only a single document, but you can load as many as you need. // LangChain4j EmbeddingStoreContentRetrieverdev/langchain4j/rag/content/retriever/EmbeddingStoreContentRetriever.javapublic 小结langchain4j提供了EmbeddingStoreContentRetriever来开启Naive RAG的功能,EmbeddingStoreContentRetriever.builder(
LangChain4j支持的模型记录LanguageModel:它们的API非常简单-接受String作为输入并返回String作为输出。
序本文主要研究一下langchain4j对Model Context Protocol (MCP) 的支持MCPMCP协议规定了两种传输方式:HTTP:客户端请求一个SSE(Server-Sent Events 这个github仓库最近的3个commits返回结果示例如下:Here are the summaries of the last three commits in the LangChain4j GitHub **Commit [36951f9](https://github.com/langchain4j/langchain4j/commit/36951f9649c1beacd8b9fc2d910a2e23223e0d93 **Commit [6fcd19f](https://github.com/langchain4j/langchain4j/commit/6fcd19f50c8393729a0878d6125b0bb1967ac055 **Commit [2e74049](https://github.com/langchain4j/langchain4j/commit/2e740495d2aa0f16ef1c05cfcc76f91aef6f6599
最近在深度体验和使用 Spring AI 和 LangChain4j,从开始的满怀期待五五开,但最后极具痛苦的使用 LangChain4j,让我真正体验到了正规军和草台班子的区别。 Spring AI VS LangChain4j Spring AI:使用简单、写法优雅、但功能提供的较少、成熟度稍高; LangChain4j:作为移植大模型著名框架 LangChain 功能稍多、灵活度高 1.SDK 问题折腾到半夜 举个例子,我昨天下午到晚上 11 点半都在研究 LangChain4j 将连续对话保存到 MySQL,首先官方并没有提供文档和代码示例,其次网上的资源很少,我按照经验和摸索终于写了一版实现 3.蹩脚的用法 LangChain4j 的使用也是比较麻烦,在 Spring AI 中使用 ChatModel 就可以操作大模型了,但 LangChain4j 要写成 ChatLanguageModel 但你猜 LangChain4j 要怎么用,首先要在配置文件中添加 streaming-chat-model 并且配置 api-key 和 model-name 等信息,并且不能使用 ChatLanguageModel
序本文主要研究一下langchain4j的HTTP Clientlangchain4j-http-clientlangchain4j提供了langchain4j-http-client模块,它实现了一个 execute方法,其中有一个支持ServerSentEventListenerHttpClientBuilderFactorylangchain4j-http-client/src/main/java/dev/langchain4j 定义了connectTimeout、readTimeout、build方法HttpClientBuilderLoaderlangchain4j-http-client/src/main/java/dev/langchain4j (); }}SpringRestClientBuilderFactory的create返回的是SpringRestClientBuilderSpringRestClientBuilderdev/langchain4j new SpringRestClient(this); }}SpringRestClientBuilder的build创建的是SpringRestClientSpringRestClientdev/langchain4j
LangChain4j中,将不再扩展对LanguageModel的支持,因此所有新功能采用ChatLanguageModel API。 ChatLanguageModel是LangChain4j中的底层API,提供了最大的功能和灵活性。还有高级API(如Chain和AiServices)。 除了ChatLanguageModel和LanguageModel,LangChain4j还支持以下类型的模型: EmbeddingModel:可将文本转换为Embedding ImageModel:可生成和编辑
序本文主要研究一下langchain4j的Advanced RAG核心流程将UserMessage转换为一个原始的QueryQueryTransformer将原始的Query转换为多个Query每个Query *
* Advanced RAG in LangChain4j is described here: https://github.com/langchain4j/langchain4j DefaultQueryTransformerdev/langchain4j/rag/query/transformer/DefaultQueryTransformer.javapublic class ExpandingQueryTransformer利用DEFAULT_PROMPT_TEMPLATE让LLM给出用户query的n个不同版本,默认n为3QueryRouterdev/langchain4j ContentInjectordev/langchain4j/rag/content/injector/ContentInjector.java@Experimentalpublic interface
继续我们的langchain4j之旅,今天来看看RAG如何实现,“RAG萌宠新手盆友们”建议先看看B站大佬的视频RAG 工作机制详解—哔哩哔哩_bilibili,核心步骤就是下面这3张图: 最简单的RAG