【必藏】让AI从“被动回答“到“主动行动“:Agent智能体工具调用实战指南
本文介绍了如何构建Agent智能体,使AI从被动回答升级为主动执行任务。通过ReAct框架和@Tool注解定义工具,AI可调用外部API、精确计算和访问数据库。文章包含代码示例,展示如何创建天气查询助手,并强调工具描述优化和参数语义化的重要性。最后演示了整合多种工具的全能助手实现方法,让AI具备实际执行能力。
本文详细介绍Agent智能体的概念与实现方法,讲解如何让AI从被动回答转变为主动行动。通过ReAct框架和@Tool注解定义工具,使AI能够调用外部API、执行精确计算、访问数据库等。文章提供完整代码示例和高级技巧,包括工具描述优化、参数描述和错误处理等,帮助开发者构建能主动调用工具的智能AI助手。
前几篇我们讲了模型调用、对话记忆、提示词工程、RAG 检索。
但到目前为止,AI 还只是个"被动回答者":
你: 今天天气怎么样?
AI: 抱歉,我无法获取实时天气信息。
你: 帮我算一下 125 * 37
AI: 让我算算…大概是 4625(实际是 4625,但可能算错)
你: 查一下用户 ID 12345 的订单
AI: 我无法访问数据库…
问题在哪?
AI 只是个语言模型,它:
- 无法获取实时信息
- 不擅长精确计算
- 不能访问外部系统
怎么解决?
这就是今天要讲的Agent 智能体——让 AI 能调用工具,从"被动回答"变成"主动行动"。
什么是 Agent?
简单来说
Agent 就是能调用工具的 AI。
它不仅能"说",还能"做":
你: 今天北京天气怎么样?
AI: [调用天气API] 今天北京晴天,温度 15-25°C。
你: 帮我算 125 * 37
AI: [调用计算器工具] 125 * 37 = 4625
你: 查用户 12345 的订单
AI: [调用数据库API] 用户 12345 有 3 个订单…
Agent vs 普通 AI
| 能力 | 普通 AI | Agent |
|------|---------|-------|
| 回答问题 | ✅ | ✅ |
| 获取实时信息 | ❌ | ✅ |
| 精确计算 | ❌ | ✅ |
| 调用 API | ❌ | ✅ |
| 访问数据库 | ❌ | ✅ |
| 执行任务 | ❌ | ✅ |
核心价值:让 AI 成为能"干事"的助手,而不只是"聊天"的伙伴。
Agent 工作原理:ReAct 框架
Agent 使用ReAct(Reasoning + Acting)框架:
用户提问
↓
思考(Reasoning):需要用什么工具?
↓
行动(Act):调用工具
↓
观察(Observation):工具返回什么结果?
↓
循环:还需要其他工具吗?
↓
最终回答:综合所有结果给出答案
示例流程
用户问题:“今天北京天气怎么样?适合出游吗?”
第1轮 - 思考:
需要获取天气信息 → 调用天气工具
第1轮 - 行动:
工具返回:北京今天晴天,15-25°C,微风
第2轮 - 思考:
有了天气信息,判断是否适合出游 → 调用出游建议工具
第2轮 - 行动:
工具返回:晴朗温暖,适合出游
第3轮 - 思考:
信息足够了 → 给出最终回答
最终回答:
根据天气信息,北京今天晴天,温度 15-25°C,
非常适合出游。建议穿着轻便,注意防晒。
定义工具:@Tool 注解
LangChain4j 使用@Tool注解定义工具。
基础示例
import dev.langchain4j.agent.tool.Tool;
public class CalculatorTools {
@Tool("计算两个数的和")
public double add(double a,double b) {
return a + b;
}
@Tool("计算两个数的乘积")
public double multiply(double a,double b) {
return a * b;
}
@Tool("计算一个数的平方根")
public double sqrt(double x) {
return Math.sqrt(x);
}
}
工具定义要点
1.工具描述要清晰
// ❌ 差:描述不清楚
@Tool("计算")
public double calc(double a,double b) { ... }
// ✅ 好:描述清晰
@Tool("计算两个数的和")
public double add(double a,double b) { ... }
2.参数名要语义化
// ❌ 差:参数名无意义
public double calc(double x1,double x2) { ... }
// ✅ 好:参数名清晰
public double add(double number1,double number2) { ... }
3.支持复杂类型
@Tool("创建用户")
public String createUser(User user) {
// User 可以是自定义 POJO
return"用户创建成功: "+user.getName();
}
完整工具类示例
import dev.langchain4j.agent.tool.Tool;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
public class WeatherTools {
// 模拟天气数据库
private static final Map<String,String> WEATHER_DB=newHashMap<>();
static{
WEATHER_DB.put("北京","晴天,15-25°C,微风");
WEATHER_DB.put("上海","多云,18-26°C,东风3级");
WEATHER_DB.put("深圳","阴天,22-29°C,南风2级");
}
@Tool("获取指定城市的实时天气信息")
public String getWeather(String city) {
String weather=WEATHER_DB.get(city);
if(weather ==null) {
return"抱歉,暂无"+ city +"的天气信息";
}
return city +"今天"+ weather;
}
@Tool("根据天气判断是否适合出游")
public String isSuitableForOuting(String city,String weather) {
// 简单逻辑:包含"晴"或温度适中就适合
if(weather.contains("晴")) {
return"天气晴朗,非常适合出游!";
}else if(weather.contains("雨") ||weather.contains("雪")) {
return"天气不佳,不建议出游。";
}else{
return"天气一般,可以考虑出游。";
}
}
@Tool("获取当前时间")
public String getCurrentTime() {
return"现在时间:"+LocalDateTime.now();
}
}
创建 Agent
第1步:定义 Agent 接口
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.system.SystemMessage;
import dev.langchain4j.agent.tool.Tool;
public interface WeatherAssistant {
@SystemMessage("""
你是一个智能助手,能够查询天气信息并给出出游建议。
你可以使用以下工具:
- 查询城市天气
- 判断是否适合出游
- 获取当前时间
请根据用户问题,主动调用相关工具,然后给出友好的回答。
""")
String chat(String userMessage);
}
第2步:创建 Agent 实例
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.qianfan.QianfanChatModel;
import dev.langchain4j.service.AiServices;
public class AgentDemo{
public static void main(String[]args) {
// 1. 创建模型
ChatLanguageModelmodel=QianfanChatModel.builder()
.apiKey(System.getenv("QIANFAN_API_KEY"))
.modelName("qwen-turbo")
.build();
// 2. 创建工具实例
WeatherToolstools=newWeatherTools();
// 3. 创建 Agent
WeatherAssistant assistant=AiServices.builder(WeatherAssistant.class)
.chatLanguageModel(model)
.tools(tools)// 注册工具
.build();
// 4. 测试
String[] questions= {
"今天北京天气怎么样?",
"北京适合出游吗?",
"现在几点了?"
};
for(String question:questions) {
System.out.println("问: "+ question);
System.out.println("答: "+assistant.chat(question));
System.out.println("---");
}
}
}
运行效果:
问: 今天北京天气怎么样?
答: [调用getWeather工具]
根据查询结果,北京今天晴天,15-25°C,微风,天气不错!
问: 北京适合出游吗?
答: [调用getWeather和isSuitableForOuting工具]
北京今天晴天,温度15-25度,非常适合出游!
建议穿着轻便,注意防晒。
问: 现在几点了?
答: [调用getCurrentTime工具]
现在时间:2026-01-25T14:30:15
实战案例:全能助手
让我们创建一个更复杂的 Agent,整合多种工具。
工具类集合
// 1. 计算工具
class CalculatorTools {
@Tool("加法运算")
public double add(double a,double b) {
return a + b;
}
@Tool("乘法运算")
public double multiply(double a,double b) {
return a * b;
}
}
// 2. 时间工具
class TimeTools {
@Tool("获取当前日期和时间")
public String getCurrentDateTime() {
return LocalDateTime.now().toString();
}
@Tool("获取当前日期")
public String getCurrentDate() {
return LocalDateTime.now().toLocalDate().toString();
}
}
// 3. 数据库查询工具(模拟)
class DatabaseTools {
private Map<String,User> userDB=new HashMap<>();
public DatabaseTools() {
// 模拟数据
userDB.put("001",newUser("001","张三","zhangsan@example.com"));
userDB.put("002",newUser("002","李四","lisi@example.com"));
}
@Tool("根据用户ID查询用户信息")
public String getUserById(String userId) {
User user=userDB.get(userId);
if(user ==null) {
return"用户不存在: "+ userId;
}
return String.format("用户信息 - ID:%s, 姓名:%s, 邮箱:%s",
user.getId(),user.getName(),user.getEmail());
}
}
// 用户类
class User {
private String id;
private String name;
private String email;
// 构造器、getter/setter 省略
}
全能 Agent
public interface SuperAssistant {
@SystemMessage("""
你是一个全能助手,可以使用多种工具:
1. 数学计算工具(加减乘除)
2. 时间查询工具
3. 数据库查询工具
请根据用户问题,主动调用合适的工具。
如果需要多个工具,可以依次调用。
""")
String assist(String userMessage);
}
// 创建 Agent
public class SuperAgentDemo{
public static void main(String[]args) {
ChatLanguageModelmodel=QianfanChatModel.builder()
.apiKey(System.getenv("QIANFAN_API_KEY"))
.modelName("qwen-plus")// 用能力更强的模型
.temperature(0.3)
.build();
// 注册所有工具
SuperAssistant assistant=AiServices.builder(SuperAssistant.class)
.chatLanguageModel(model)
.tools(newCalculatorTools())
.tools(newTimeTools())
.tools(newDatabaseTools())
.build();
// 测试复杂问题
String question="帮我算 125 * 37,然后查一下用户 001 的信息,最后告诉我现在几点了";
String answer=assistant.assist(question);
System.out.println(answer);
}
}
运行效果:
AI: 好的,我来依次处理您的问题:
- 计算 125 * 37
[调用 multiply 工具]
结果:4625
- 查询用户 001
[调用 getUserById 工具]
用户信息 - ID:001, 姓名:张三, 邮箱:zhangsan@example.com
- 当前时间
[调用 getCurrentDateTime 工具]
2026-01-25T14:30:15
总结:125 * 37 = 4625,用户001是张三,现在时间是2026年1月25日14:30。
高级技巧
1. 工具描述优化
// ❌ 差:描述太简单
@Tool("查询用户")
public String getUser(String id) { ... }
// ✅ 好:详细说明
@Tool("根据用户ID查询用户信息,返回ID、姓名和邮箱")
public String getUserById(String userId) { ... }
经验:描述越详细,AI 越能准确选择工具。
2. 参数描述
@Tool("发送邮件")
public String sendEmail(
@Description("收件人邮箱地址")String to,
@Description("邮件主题")String subject,
@Description("邮件正文内容")String body
) {
// 发送邮件逻辑
return "邮件发送成功";
}
3. 工具组合策略
// 有些任务需要多个工具协作
@Tool("计算订单总价")
public double calculateOrderTotal(
@Description("商品单价")doubleunitPrice,
@Description("商品数量")intquantity,
@Description("折扣率(0-1之间,0.9表示9折)")doublediscount
) {
double subtotal= unitPrice * quantity;
return subtotal * discount;
}
@Tool("应用优惠券")
public double applyCoupon(
@Description("订单原价")doubletotalPrice,
@Description("优惠券金额")doublecouponAmount
) {
return Math.max(0, totalPrice - couponAmount);
}
4. 错误处理
@Tool("查询银行账户余额")
public String getBalance(@Description("账户ID")String accountId) {
try{
// 模拟查询
if(accountId.startsWith("test")) {
throw new Exception("测试账户无法查询余额");
}
return "账户余额:¥10,000.00";
}catch(Exception e) {
// 返回友好的错误信息
return"查询失败:"+e.getMessage();
}
}
踩坑经验
坑 1:工具描述不清楚
// ❌ 工具描述模糊
@Tool("处理数据")
public String processData(String data) { ... }
// 结果:AI 不知道这个工具是做什么的,很少调用
// ✅ 工具描述具体
@Tool("将文本数据转换为大写格式")
public String convertToUpperCase(String text) { ... }
// 结果:AI 知道何时调用这个工具
坑 2:参数类型不匹配
// ❌ 参数类型过于严格
@Tool("搜索用户")
public User searchUser(int userId) { ... }// AI 可能传字符串
// ✅ 参数类型灵活
@Tool("根据ID搜索用户")
public User searchUser(String userId) {
// 内部转换类型
return userDB.get(userId.trim());
}
坑 3:缺少系统提示
// ❌ 没有 system message
public interface Assistant{
String chat(String message);
}
// 结果:AI 不知道自己有工具可用
// ✅ 添加 system message
@SystemMessage("你可以使用工具查询天气和计算数据...")
public interface SmartAssistant{
String chat(String message);
}
// 结果:AI 主动使用工具
坑 4:工具执行时间过长
// ❌ 同步阻塞调用
@Tool("导出大数据")
public String exportBigData() {
// 可能耗时很久
return heavyOperation();// 阻塞整个流程
}
// ✅ 异步或设置超时
@Tool("导出数据(异步)")
public String exportDataAsync(String requestId) {
// 返回任务ID,后台处理
asyncService.export(requestId);
return"导出任务已创建,ID: "+ requestId;
}
Agent vs 传统编程
传统方式
// 硬编码逻辑
if(userQuestion.contains("天气")) {
return getWeather(city);
}else if(userQuestion.contains("计算")) {
return calculate(expression);
}else if(userQuestion.contains("时间")) {
return getCurrentTime();
}else{
return "我不明白";
}
Agent 方式
// AI 自己决定调用哪个工具
String answer=assistant.chat(userQuestion);
优势:
-无需手动解析用户意图
-自动选择合适工具
-支持复杂的多步骤任务
-代码更简洁
作业时间
今天的作业很有趣:
1.创建一个天气查询 Agent
-实现天气查询工具
-实现穿衣建议工具
-让 AI 主动调用工具给出建议
2.创建一个计算 Agent
-实现基本运算工具
-实现单位转换工具
-测试复杂计算问题
3.创建一个数据库查询 Agent
-实现用户查询工具
-实现订单查询工具
-让 AI 理解自然语言查询
AI时代,未来的就业机会在哪里?
答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。

掌握大模型技能,就是把握高薪未来。
那么,普通人如何抓住大模型风口?
AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。
因此,这里给大家整理了一份《2026最新大模型全套学习资源》,包括2026最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题、AI产品经理入门到精通等,带你从零基础入门到精通,快速掌握大模型技术!
由于篇幅有限,有需要的小伙伴可以扫码获取!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。

2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

5. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

为什么大家都在学AI大模型?
随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。
同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!

这些资料有用吗?
这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


大模型全套学习资料已整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】

更多推荐



所有评论(0)