【AI基础系列】 创建一个Langgraph4j实例工程

文章目录
  1. 一、项目创建
    1. 1. 创建一个SpringAI项目
    2. 2. 添加Langgraph4j依赖
    3. 3. 参数配置
    4. 4. 创建工具
    5. 5. 创建智能体
    6. 6. 测试验证
  2. 二、总结
    1. 微信公众号: 一灰灰Blog

沿用阿里的智能体定义,我们将基于SpringAI ChatClient开发的AI应用叫做单智能体应用;对于更复杂的应用场景,比如需要多个工具辅助工作,存在工作流切换的场景(举一个例子:输入一段评价,判断是好评还是差评,如果是好评,则自动回复多谢好评;如果是差评,则提取关键信息,将评价信息转发给人工客服,进行后续的售后维护等)称为多智能体应用

对于多智能体应用,使用python开发的小伙伴,更常接触的是LangGraph;对于java的生态下,目前也有两个替代的选择项

接下来我们来体验一下如何使用LangGraph4J来进行多智能体的开发

一、项目创建

1. 创建一个SpringAI项目

创建一个SpringAI项目,基本流程同 创建一个SpringAI-Demo工程

2. 添加Langgraph4j依赖

我们这里以智普大模型作为底层的LLM,因此对应的依赖除了langgraph4j之外就是智普的starter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<properties>
<langgraph4j.version>1.6.0-rc4</langgraph4j.version>
</properties>

<dependencies>
<dependency>
<groupId>org.bsc.langgraph4j</groupId>
<artifactId>langgraph4j-springai-agentexecutor</artifactId>
<version>${langgraph4j.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-zhipuai</artifactId>
</dependency>
</dependencies>

3. 参数配置

在配置文件中 application.yml,设置大模型的访问密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
spring:
ai:
zhipuai:
# api-key 使用你自己申请的进行替换;如果为了安全考虑,可以通过启动参数进行设置
api-key: ${zhipuai-api-key}
chat: # 聊天模型
options:
model: GLM-4-Flash

# 修改日志级别
logging:
level:
org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor: debug

4. 创建工具

我们这里创建一个工具类,内部提供两个工具,分别获取当前的时间和天气

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 根据时区,返回时间的工具
*
* @author YiHui
* @date 2025/8/8
*/
public class TimeWeatherTools {
@Tool(description = "传入时区,返回对应时区的当前时间给用户")
public String getTimeByZoneId(@ToolParam(description = "需要查询时间的时区,如Asia/Shanghai, Europe/Paris") ZoneId area) {
// 根据系统当前时间,获取指定时区的时间
ZonedDateTime time = ZonedDateTime.now(area);

// 格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ans = time.format(formatter);
System.out.println("传入的时区是:" + area + "-" + ans);
return ans;
}

@Tool(description = "传入地点,返回对应地点的当前天气给用户")
public String getWeatherByZoneId(@ToolParam(description = "需要查询天气的地区,如北京、上海") String area) {
List<String> weathers = List.of("晴", "阴", "雨", "雪", "雷", "雾");
String ans = weathers.get((int) (Math.random() * weathers.size()));
System.out.println("传入的地点是:" + area + "-" + ans);
return ans;
}
}

5. 创建智能体

我们直接沿用官方的demo示例,来创建一个采用langGraph4j实现的基于智普大模型的智能体

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class ChatController {
private final CompiledGraph<AgentExecutor.State> workflow;

public ChatController(ChatModel chatModel) throws GraphStateException {
workflow = AgentExecutor.builder()
.chatModel(chatModel)
.toolsFromObject(new TimeWeatherTools())
.build()
.compile();
}
}

6. 测试验证

在上面的Controller中,定义一个访问端点,实现智能体的访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@RestController
public class ChatController {
/**
* 通过agent方式访问大模型
*
* @param msg
* @return
*/
@GetMapping("/chat")
public Object chat(String msg) {
AgentExecutor.State last = null;
int i = 0;
for (NodeOutput<AgentExecutor.State> item : workflow.stream(Map.of("messages", new UserMessage(msg)))) {
System.out.println(item);
last = item.state();
System.out.printf("%02d : %s%n", i++, toStr(last.messages()));
}

// 返回最后一条消息
return last.lastMessage().map(Content::getText).orElse("NoData");
}

public String toStr(Object obj) {
ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}

从上面的输出也可以看出,大模型有四次的工具调用,一次是获取北京当前时间,一次是获取北京当前天气,一次是获取伦敦当前时间,一次是获取伦敦当前天气

直接使用langGraph4j实现多轮对话,虽然效果是实现了,从直观感觉上和SpringAI的ChatClient好像没有太大的差别

langGraph4j不太了解的小伙伴,可能会有很多疑问,工作流体现在什么地方呢,条件决策又该如何使用呢?这个框架是怎么工作的呢?又该如何使用它来开发Agent呢?

二、总结

LangGraph4j 是一个 Java 库,用于构建基于大型语言模型 (LLM) 的有状态多代理应用程序。它受 PythonLangGraph 的启发,旨在与 Langchain4jSpring AI 等流行的 Java LLM 框架无缝协作。

LangGraph4j 的核心功能是定义循环图,使不同的组件(代理、工具或自定义逻辑)能够以有状态的方式进行交互

本文只能算是初步看了一眼LangGraph4j,演示了如何创建一个智能体开发的项目,接下来我们将逐渐深入探究一下这个框架的使用理念

文中所有涉及到的代码,可以到项目中获取 https://github.com/liuyueyi/spring-ai-demo

微信公众号: 一灰灰Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

一灰灰blog


打赏 如果觉得我的文章对您有帮助,请随意打赏。
分享到