跳转到内容

让模型开始使用工具

如果说前面的对话模型是在回答“模型能不能说话”,那么 Agent 这页解决的是下一步问题:

当模型需要去读网页、调工具、分步完成任务时,该怎么组织它?

Feat AI 的 Agent 是建立在 ReAct 思路上的:
模型先做判断,再调用工具,再根据工具结果继续推进。

  • 问题本身不是一句提示词就能回答
  • 模型需要读取外部信息
  • 模型需要调用一个或多个工具才能完成任务

如果你当前只是普通问答、摘要、翻译或单次生成,先停在 配置对话模型并处理流式输出 即可。

AgentDemo.java
import tech.smartboot.feat.ai.FeatAI;
import tech.smartboot.feat.ai.agent.FeatAgent;
import tech.smartboot.feat.ai.chat.ChatModelVendor;
public class AgentDemo {
public static void main(String[] args) throws Exception {
FeatAgent agent = FeatAI.agent(opts -> {
opts.chatOptions().model(ChatModelVendor.GiteeAI.Qwen2_5_72B_Instruct);
opts.tool(new tech.smartboot.feat.ai.agent.tools.WebPageReaderTool());
});
String result = agent.execute(
"从 https://smartboot.tech/smart-mqtt/ 中给我看看这款产品的定价是多少"
).get();
System.out.println(result);
System.out.println(agent.getState());
}
}

这段代码的重点只有两件事:

  • 先给 Agent 一个对话模型
  • 再给它至少一个它能调用的工具

没有工具时,Agent 只是“会多想一点”的模型;
有了工具之后,它才真正开始具备完成复杂任务的能力。

适合:

  • 单次问答
  • 提示词生成
  • 普通对话

适合:

  • 需要外部信息的任务
  • 多步骤任务
  • 要把“推理”和“执行”串起来的场景

所以不要把 Agent 理解成“更强的对话模型”,它更像是“对话模型 + 工具调度层”。

这是 Agent 是否真正有用的分界点。

常见工具包括:

  • 网页读取
  • 搜索
  • 文件操作

在 Feat AI 里,你可以把工具注册到 AgentOptions 上:

opts.tool(new SearchTool());
opts.tool(new WebPageReaderTool());
opts.tool(new FileOperationTool());

仓库里的示例更偏向使用内置工具去完成实际任务,所以你完全可以先从现成工具开始,而不是立刻写自定义工具。

做 Agent 时,不要一开始就追求“大而全工具箱”。
更稳的方式通常是:

  1. 先让一个 Agent 只接一两个工具
  2. 确认它真的能稳定完成任务
  3. 再继续加工具和更复杂的提示策略

否则你最后很可能不知道到底是模型问题、工具问题,还是调度策略问题。

优先检查:

  1. 你是否真的注册了工具
  2. 任务本身是否明确暗示需要外部信息
  3. 模型能力是否足以理解当前工具描述

Agent 能调用工具,但结果质量一般

Section titled “Agent 能调用工具,但结果质量一般”

这通常不是一个单点问题。
可能涉及:

  • 模型本身
  • 工具描述是否清楚
  • 工具返回内容是否可消费
  • 提示策略是否过弱或过乱

我是不是应该先学 Agent 再学 Chat

Section titled “我是不是应该先学 Agent 再学 Chat”

不建议。
如果你还没把普通模型调用用熟,Agent 的排错成本会高很多。