从0到1开发一个企业级 AI Agent:基于 Spring Boot + LangChain4j + RAG + Function Calling 实现金融贷后智能助手
·
一、背景
传统业务系统:
用户
|
Web/App
|
业务系统
|
数据库
所有逻辑由代码固定实现。
例如贷后系统:
用户查询:
“帮我分析一下客户张三为什么逾期?”
传统方式:
开发接口:
/loan/query
/repay/query
/collection/query
前端调用多个接口。
引入 Agent 后:
用户
|
AI Agent
|
-------------------------
| | |
订单查询 还款查询 催收查询
Tool Tool Tool
|
MySQL
用户只需要描述目标:
分析客户逾期原因,并给出催收建议
Agent 自动:
- 理解任务
- 判断需要哪些数据
- 调用业务接口
- 汇总分析
- 输出结果
二、整体架构设计
企业级 Agent 架构
用户
|
|
Chat Interface
|
|
+----------------+
| AI Agent |
+----------------+
|
---------------------------------
| | |
Prompt Memory Planner
| | |
| | |
-------- Tool Calling ----------
|
----------------------------------
| | |
业务API Tool RAG知识库 数据库Tool
| | |
Spring服务 Milvus MySQL
三、技术选型
后端
Java 17
Spring Boot 3.x
LangChain4j
MyBatis Plus
Redis
MySQL
AI
模型:
GPT-4.1
Claude
通义千问
DeepSeek
向量数据库
选择:
Milvus
保存:
- 合同规则
- 风控政策
- 催收流程
- 产品说明
四、创建 Spring Boot Agent 项目
Maven:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>
五、定义 Agent 接口
核心:
@AiService
public interface LoanAgent {
String chat(String message);
}
看起来像普通接口。
但是:
调用:
loanAgent.chat(
"分析客户张三逾期原因"
);
背后:
实际上调用大模型。
六、接入大模型
application.yml
langchain4j:
open-ai:
chat-model:
api-key: sk-xxxx
model-name: gpt-4.1
temperature: 0.2
七、核心能力1:Function Calling
这是 Agent 最关键能力。
定义业务工具
例如:
查询贷款信息:
@Component
public class LoanTool {
@Tool("查询客户贷款信息")
public LoanInfo queryLoan(
String customerName
){
return loanService.queryByName(
customerName
);
}
}
数据库:
select *
from loan_order
where customer_name='张三';
返回:
{
"loanAmount":100000,
"status":"逾期",
"days":45
}
此时用户:
张三为什么逾期?
Agent:
自己判断:
需要贷款数据
调用:
queryLoan("张三")
这就是 Agent。
八、多个业务 Tool
真实企业一般不是一个工具。
例如:
还款查询
@Component
public class RepayTool {
@Tool("查询客户还款计划")
public List<RepayPlan> queryRepay(
String sn
){
return repayMapper.selectList(
sn
);
}
}
催收记录
@Component
public class CollectionTool {
@Tool("查询催收记录")
public List<Record> records(
String customerId
){
return mapper.list(customerId);
}
}
最终:
Agent拥有:
订单Tool
还款Tool
催收Tool
合同Tool
风控Tool
九、核心能力2:RAG知识库
为什么需要RAG?
因为:
大模型不知道你的公司规则。
例如:
用户:
什么情况可以拖车?
GPT不知道。
所以:
把公司制度放入知识库。
文档处理流程
PDF
|
文本解析
|
切片
|
Embedding
|
向量数据库
|
检索
|
LLM回答
文档切片
例如:
合同规则:
第1条...
第2条...
第3条...
切:
chunk1
chunk2
chunk3
查询
用户:
客户逾期60天可以拖车吗?
检索:
拖车规则
逾期规则
合同条款
组合:
问题 + 相关知识
↓
LLM
↓
回答
十、Memory记忆
没有Memory:
用户:
我的客户张三
AI:
不知道张三
加入:
Redis Memory
结构:
conversationId
|
|
Redis
{
user:"张三",
loan:"100000",
overdue:"45"
}
代码:
@Bean
ChatMemory chatMemory(){
return MessageWindowChatMemory
.withMaxMessages(20);
}
十一、完整业务流程
用户:
分析客户张三逾期原因
Agent:
第一步:
理解:
需要客户贷款信息
需要还款记录
需要催收记录
调用:
LoanTool
↓
RepayTool
↓
CollectionTool
得到:
{
loan:100000,
overdue:45,
history:"多次联系"
}
再推理:
输出:
客户逾期原因:
1.
资金周转困难
2.
近期收入下降
建议:
1.
电话沟通
2.
制定延期方案
十二、生产环境架构
Nginx
|
Spring Boot
|
Agent Service
|
-------------------------
| | |
LLM API Redis MySQL
|
Memory
|
Vector DB
Milvus
十三、生产必须考虑的问题
1. 权限控制
不能:
AI直接:
select *
from user;
必须:
Tool层控制。
例如:
@Tool
public Loan query(){
checkPermission();
}
2. Token成本控制
增加:
缓存
问题
|
Redis
|
命中直接返回
3. 幻觉控制
必须:
RAG + Tool
不要:
让模型自由回答。
4. Agent日志
记录:
用户问题
调用工具
参数
返回结果
最终回答
方便审计。
更多推荐



所有评论(0)