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 快速搭建一个 RAG 应用。 前面松哥和大家聊了什么是 RAG,以及 RAG 开发所涉及到的技术栈。 前面几篇文章涉及到技术的,松哥都是使用 Python 来演示的,今天我们回归到自己的大本营,拿出我们的看家本领 Java,一起来简单的玩一下 langchain4j。 二 langchain4j RAG langchain4j 提供了三种构建 RAG 应用的方案,分别是: Easy RAG Native RAG Advanced RAG 我们分别来介绍下。 对比总结表 三 选型建议 • 测试 Demo 或内部工具 → Easy RAG • 企业知识库系统 → Native RAG • 金融/法律专业问答 → Advanced RAG 通过这种分层设计,LangChain4j
序 本文主要研究一下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-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的RagAutoConfig LangChain4jAutoConfig dev/langchain4j/spring/ LangChain4jAutoConfig自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessor RagAutoConfig dev/langchain4j } // TODO test } RagAutoConfig默认注册了InMemoryEmbeddingStore、ContentRetriever RagProperties dev/langchain4j
langchain4j 中的 Advanced RAG 涉及到诸多策略,今天和大家聊一聊这里涉及到的一些策略。 八 Accessing Sources 8.1 简介 在 LangChain4j 的 AIServices 中,通过Result包装类和流式回调两种方式可以获取检索增强的原始资料。 String> chat(String userMessage); } Result<String> result = assistant.chat("How to do Easy RAG with LangChain4j interface Assistant { TokenStream chat(String userMessage); } assistant.chat("How to do Easy RAG with LangChain4j getOrDefault("retriever", "向量库"); System.out.println(type + " → " + content.text()); }); 8.3 架构设计原理 该功能基于 LangChain4j
版本 0.28.0 源码 使用langchain4j,可以通过AiServices来封装聊天模型API,实现会话记忆,工具调用,搜索增强,内容审查等功能,并提供简单灵活的用户接口 DefaultAiServices
序 本文主要研究一下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
序本文主要研究一下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。 最近松哥和大伙聊的基本上都是大模型应用开发的入门知识,松哥这边后面会开始做集团的知识库,到时候再和大家分享一些项目中的实践经验。 二 两种方案 LangChain4j 中对于工具的调用提供了两种不同的抽象层次。 三 Low-Level 下面我们通过一个完整的天气查询案例,展示如何在 LangChain4j 中手动构造ToolSpecification并实现工具调用流程。 Map<String, Double> batchGetTemperatures(List<String> cities) { ... } 4.5 VS REST API 维度 传统REST API LangChain4j
序本文主要研究一下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的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-spring-boot-starter的RagAutoConfigLangChain4jAutoConfigdev/langchain4j/spring/LangChain4jAutoConfig.java LangChain4jAutoConfig自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessorRagAutoConfigdev/langchain4j builder.build(); } // TODO test}RagAutoConfig默认注册了InMemoryEmbeddingStore、ContentRetrieverRagPropertiesdev/langchain4j
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