第一章.干货干货!!!Langchain4j对接AI大模型-开发自己的智能体

前言

在人工智能技术迅猛发展的今天,大型语言模型(LLM)已成为推动技术创新的核心引擎。从ChatGPT到Gemini,从Claude到文心一言,这些强大的AI模型正在重塑我们与计算机交互的方式,也为开发者提供了前所未有的机遇。然而,如何将这些前沿技术真正落地到实际应用中,构建出真正智能、实用的AI代理(Agent),仍是许多开发者面临的挑战。

Java作为企业级应用开发的主流语言,在全球拥有庞大的开发者生态和丰富的应用场景。LangChain4j正是连接Java世界与AI大模型的桥梁,它让Java开发者能够以熟悉的编程范式,轻松集成各种AI能力到现有系统中。无论是构建智能客服、文档分析工具,还是开发复杂的决策支持系统,LangChain4j都提供了简洁而强大的解决方案。

本文将从实战角度出发,系统介绍如何利用LangChain4j框架对接主流AI大模型,开发具备自主决策能力的智能体。我们将摒弃晦涩的理论说教,专注于可立即应用的实践知识,通过清晰的代码示例和架构设计,带您快速掌握AI智能体开发的核心要领。无论您是Java资深开发者,还是刚接触AI应用编程的新手,都能从本文中获得可直接复用的技术干货

为什么要开发智能体

AI 智能体(AI Agent)是一种能自主感知环境、制定决策并执行任务的智能系统。它基于大语言模型(LLM)构建,具备以下核心能力:

  • 自主性:无需人工干预,可独立完成目标(如自动处理邮件、分析数据)。

  • 记忆与学习:通过对话历史或外部存储(如向量数据库)积累知识,优化决策。

  • 工具调用(Tool Use):能调用 API、运行代码或操作外部系统(如搜索网页、发送消息)。

  • 多步推理:拆解复杂任务,规划执行路径(如“订机票→查天气→推荐行程”)。

典型应用包括:

  • 个人助手(如自动安排会议、整理文档)

  • 企业自动化(如客服机器人、数据分析代理)

  • AI 协同系统(多个智能体分工合作,完成复杂流程)

智能体能 24/7 处理重复性任务(如客服问答、报表生成),比人工响应更快且成本更低。AI 智能体代表了 AI 应用的下一代范式,从“被动响应”转向“主动服务”。开发智能体不仅能解决现实问题,更是企业和开发者拥抱 AI 浪潮的必要选择。借助 Langchain4j 等工具,开发者可以高效构建适应不同场景的智能体,释放 AI 的真正潜力。

SpringAI和Langchain4j

随着大模型(LLM)应用开发的兴起,Java 生态中出现了多个集成 AI 能力的框架,其中 Spring AI 和 Langchain4j 是两个主要选择。两者都致力于简化 AI 集成,但在设计理念、灵活性和适用场景上存在显著差异

Spring AI 是 Spring 官方推出的 AI 集成框架,依托 Spring 生态,提供标准化的 API 来对接 OpenAI、Azure AI、Hugging Face 等大模型。它的主要特点包括:

  • 深度集成 Spring:天然支持依赖注入、自动配置,适合 Spring Boot 项目。
  • 标准化接口:提供统一的 ChatClient、EmbeddingClient 等抽象,便于切换不同模型供应商。
  • 企业友好:与 Spring Security、Spring Data 等组件无缝协作,适合传统企业应用。

但 Spring AI 也存在一些局限性:

  • 灵活性较低:高度封装,定制复杂 AI 流程(如 Agent、RAG)较困难。
  • Java 专属:无法直接利用 Python 生态的 LangChain 工具链。
  • 较新且依赖 Spring:非 Spring 项目集成成本较高。

Langchain4j 是 Java 版的 LangChain,旨在提供与 Python 生态对等的 AI 开发体验。相较于 Spring AI,它的优势包括:

  • 更接近 Python LangChain,生态兼容性强,直接借鉴 LangChain 的核心概念(如 Chains、Agents、Tools),方便开发者跨语言复用知识。支持 RAG(检索增强生成)、智能体(Agent)、记忆管理等高级功能,适合复杂 AI 应用。

  • 轻量级,不依赖 Spring可作为独立库集成到任何 Java/Kotlin 项目,适用于非 Spring 环境(如 Quarkus、Micronaut)。模块化设计,可按需引入组件,减少依赖膨胀。

  • 更灵活的 AI 工作流控制,提供 ConversationMemory、ToolExecutor 等底层 API,方便定制复杂 AI 行为。支持本地模型(如 Ollama)和多种云模型(OpenAI、Gemini、Claude),切换成本低。

  • 更活跃的社区和扩展性
    由于 LangChain 在 AI 领域的广泛采用,Langchain4j 能更快跟进新功能(如多模态、Agent 编排)。支持自定义工具(Tools)和检索器(Retrievers),适合构建自主 AI 代理

选 Spring AI:适合 Spring 生态的简单 AI 集成(如聊天接口、文本嵌入)。选 Langchain4j:需要复杂 AI 代理(Agent)、RAG 或非 Spring 项目,或希望复用 Python LangChain 经验。总体而言,Langchain4j 在灵活性、功能丰富性和跨平台支持上更具优势,尤其适合需要深度定制 AI 能力的开发者。

Java集成LangChain4j

LangChain4j 官方文档 : https://docs.langchain4j.dev/intro

1.搭建项目

搭建java工厂,导入LangChain4j的基础依赖,其中包括:langchain,SpringBoot,以及基础工具包

<parent>
  <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>3.4.0</version>
 </parent>

 <properties>
     <maven.compiler.source>21</maven.compiler.source>
     <maven.compiler.target>21</maven.compiler.target>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <junit.version>5.11.4</junit.version>
     <langchain.version>1.0.0-beta1</langchain.version>
     <hutool.version>5.8.34</hutool.version>
 </properties>

 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>dev.langchain4j</groupId>
             <artifactId>langchain4j-community-bom</artifactId>
             <version>${langchain.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>

 <dependencies>
     <!--   常用工具类     -->
     <dependency>
         <groupId>cn.hutool</groupId>
         <artifactId>hutool-all</artifactId>
         <version>${hutool.version}</version>
     </dependency>
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
     </dependency>
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>-->
        <!-- langchain4j 基础依赖 -->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
            <version>${langchain.version}</version>
        </dependency>
        <!--通义千问-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
        </dependency>

        <!--Ollama本地大模型-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-ollama-spring-boot-starter</artifactId>
            <version>${langchain.version}</version>
        </dependency>

        <!--互联网搜索API-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-web-search-engine-searchapi</artifactId>
            <version>${langchain.version}</version>
        </dependency>

        <!--RAG知识库-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-easy-rag</artifactId>
            <version>${langchain.version}</version>
        </dependency>

        <!--pgvector向量数据库-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-pgvector</artifactId>
            <version>${langchain.version}</version>
        </dependency>
 </dependencies>

 <repositories>
     <repository>
         <id>Central Repository</id>
         <url>https://repo1.maven.org/maven2/</url>
     </repository>
 </repositories>

下面对这些依赖做一些解释

  • langchain4j :langchain4j的基础依赖
  • langchain4j-community-dashscope-spring-boot-starter :用来对接阿里的灵积平台的依赖,主要是为了使用千问大模型
  • langchain4j-ollama-spring-boot-starter :用来对接本地大模型基础依赖
  • langchain4j-web-search-engine-searchapi :用来做互联网搜索的基础依赖
  • langchain4j-easy-rag :搭建RAG知识库的依赖
  • langchain4j-pgvector :向量数据库处理,用来搭建RAG知识库

2.配置大模型

在项目的 application.yaml 文件中配置大模型。我这里使用阿里的 千问 大模型,配置如下

langchain4j:
  community:
    dashscope:  #通义千问
      chat-model:
        api-key: sk-你的key
        #https://bailian.console.aliyun.com/?apiKey=1#/api-key
        model-name: qwen-max-latest #模型名字
  • api-key : 你需要去阿里百练云平台配置一个秘钥 地址:https://bailian.console.aliyun.com/?apiKey=1#/api-key
  • model-name :去百练平台找自己想要的模型名字

3.开发对话智能体

当我们引入 langchain4j-community-dashscope , 并在yml做了相关配置后,自动就会创建:QwenChatModel 模型对象,通过Spring的自动注入即可使用


/**
 * @author admin  2025/3/27 9:02
 */
@RestController
@RequestMapping("/chat")
//构造器注入
@RequiredArgsConstructor
public class ChatController {

	//注入千问大模型
    private final QwenChatModel qwenChatModel;

    /**
     * 简单对话
     */
    @RequestMapping("/low")
    public String chat1(@RequestParam String message) {
        return qwenChatModel.chat(message);
    }
}

测试效果如下:
在这里插入图片描述

LangChain4j 对接Ollama本地模型

1.安装本地模型

首先需要在本地安装好Ollama,进入Ollama官网 : https://www.ollama.com/ 找到 download ,根据自己的系统环境下载对应的Ollama安装包,我这里下载的是windows版本

在这里插入图片描述
下载好之后双击安装,安装好之后进入到ollama安装目录,使用命令提示符窗口运行命令下载模型比如:deepseek-v1:7b,根据硬件情况选择合适的模型,模型的版本可以在ollama官网查看:https://www.ollama.com/library/deepseek-r1
在这里插入图片描述

2.对接本地模型

通过ollama安装好本地模型后,接着需要在yml中配置ollama模型,配置如下

langchain4j:
  ollama:
    chat-model:
      base-url: http://127.0.0.1:11434
      model-name: qwen2:7b
  • 11434 : 是本地模型的端口
  • model-name: qwen2:7b ,这里使用的7b参数的模型

3.创建智能体

当我们引入了:langchain4j-ollama 依赖以及在yml配置了ollama后,默认就会创建OllamaChatModel 模型,直接注入使用即可,如下

@RestController
@RequestMapping("/chat")
@RequiredArgsConstructor
public class ChatController {

    private final OllamaChatModel ollamaChatModel;


    /**
     * 本地模型
     */
    @RequestMapping("/ollama")
    public String ollama(@RequestParam String message) {
        return ollamaChatModel.chat(message);
    }

在这里插入图片描述

LangChain4j 高级API

LangChain4j 提供了2中编码方式,一种是偏向于更底层的低级API编码方式,这种方式编码会稍显复杂,另外一种是高级API编码方式,它的出现是为了简化大模型的使用,下面我们来试玩一下。

1.创建智能体接口

创建一个 interface ,提供一个对话方法,如下

public interface ChatAssistant {

    /**
     * 对话方法
     * @param userMessage :用户消息
     * @return :结果
     */
    String chat(String userMessage);

2.创建Controller

然后通过AiServices工具来构建智能体,代码如下


    private final QwenChatModel qwenChatModel;
    
    /**
     * 通过 AiService
     */
    @RequestMapping("/hig")
    public String chat2(@RequestParam String message) {
        return AiServices.builder(ChatAssistant.class).chatLanguageModel(qwenChatModel).build().chat(message);
    }

当然:你现在觉得通过 AiServices构建智能体稍显复杂,但是随着智能体的功能越来越多,通过高级API的编码方式确实会简单不少。如果将 langchain4j和SpringBoot集成将会更加简单。

为了让代码更加规范,我们可以把 AiServices.builder 构建智能体的代码封装到Config中如下


/**
 * @author admin  2025/3/28 9:14
 */
@RequiredArgsConstructor
@Configuration
public class AssistantConfig {

    /**
     * 创建智能体
     * @param qwenChatModel :大模型
     */
    @Bean
    public ChatAssistant chatAssistant(QwenChatModel qwenChatModel){
        return AiServices.builder(ChatAssistant.class)
                .chatLanguageModel(qwenChatModel)
                .build();
    }

}

然后在Controller中注入 ChatAssistant chatAssistant 智能体调用 chat 方法即可。

总结

文章先写到这里,本篇文章介绍了 Langchain4j 和其重要性,然后通过Java程序集成Langchain4j实现大模型对接,分别对接了千问模型以及Ollama本地模型。以及Langchain4j 高级API的用法。当然Langchain4j 还有很多很多功能,我们期待下一章。喜欢的话请给个好评,你的鼓励是我最大的动力,点赞破10000,我就是头发掉光,也出下章。

### 集成 LangChain4J 与 PgVector LangChain4J 是一种用于构建基于大模型的应用程序的框架,而PgVector是一种 PostgreSQL 扩展,允许存储和查询向量数据。以下是关于如何将两者集成的方法。 #### 安装依赖项 为了实现两者的集成,首先需要安装必要的库: ```bash # 添加 Maven 或 Gradle 依赖项到项目中 <dependency> <groupId>io.langchain</groupId> <artifactId>langchain4j-data-pgvector</artifactId> <version>最新版本号</version> </dependency> ``` 如果使用的是Gradle,则可以这样配置: ```gradle implementation 'io.langchain:langchain4j-data-pgvector:最新版本号' ``` #### 数据库设置 确保已启用 `pgvector` 扩展并创建相应的表结构来支持嵌入式向量存储[^1]。 ```sql -- 启用 pgvector 扩展 CREATE EXTENSION IF NOT EXISTS vector; -- 创建一个示例表以保存文档及其对应的向量表示形式 CREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT NOT NULL, embedding VECTOR(1536) -- 假设我们使用的嵌入维度为1536 ); ``` #### 使用 LangChain4J 连接至 PgVector 下面是一个简单的例子展示如何通过 LangChain4J 将文本转换为嵌入并向数据库写入这些嵌入的数据。 ```java import io.langchain4j.data.embedding.Embedding; import io.langchain4j.data.document.Document; import io.langchain4j.data.vectorstore.pgvector.PgVectorStore; import java.util.List; public class Main { public static void main(String[] args) throws Exception { String connectionString = "jdbc:postgresql://localhost/mydb"; String user = "postgres"; String password = "password"; // 初始化 PgVectorStore 实例 try (var store = new PgVectorStore.Builder() .connectionString(connectionString) .username(user) .password(password) .tableName("documents") // 对应前面定义好的表名 .build()) { Document document = new Document( "The quick brown fox jumps over the lazy dog." ); Embedding embedding = generateEmbeddingFor(document); // 自己实现或者调用外部服务生成嵌入 // 存储文档以及其对应嵌入到数据库里 store.add(List.of(new Pair<>(document, embedding))); System.out.println("Document stored successfully!"); } } private static Embedding generateEmbeddingFor(Document doc){ // 此处省略具体逻辑,实际应用可能涉及调用 LLM API 获取嵌入值 double[] values = { /* ... */ }; // 替换为真实的浮点数组 return new Embedding(values); } } ``` 上述代码片段展示了基本流程:先初始化 `PgVectorStore` 并指定连接参数;接着准备要处理的内容对象(这里是单条记录),再计算该内容的相关嵌入表达最后存入库中[^2]。 #### 查询相似度 当完成数据录入之后就可以执行近似最近邻搜索操作找出最接近目标输入语义含义的结果集了。 ```java // 构造待比较的新样本 Document queryDoc = new Document("What does it mean?"); Embedding queryEmb = generateEmbeddingFor(queryDoc); List<Pair<Document, Double>> results = store.findMostSimilar(queryEmb, topK=5); for(var pair : results){ System.out.printf("Score=%.4f Content=%s%n",pair.getSecond(),pair.getFirst().getContent()); } ``` 此部分演示了怎样利用先前建立起来的知识库去检索那些跟提问最为贴切的回答选项们[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨家巨子@俏如来

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值