Prompt中的Tool Calling
·
🔍 大模型的训练数据不是实时的,它“不知道”今天北京是不是下雨。
所以,你这段代码:
String text = deepseekChatClient.prompt()
.user(city + "未来三天的天气如何")
.call()
.chatResponse()
.getResult()
.getOutput()
.getText();
如果直接靠大模型回答,它返回的只是一个“基于统计和常识的推测性回答”,而不是真实的天气。
🤔 那么,这段代码拿到的到底是什么数据?
我们来分两种情况讨论:
❌ 情况一:没有使用“工具调用”(Function Calling / Tool Calling)
如果你只是像上面这样直接问:
.user("北京未来三天天气如何")
那么:
🚫 大模型会“凭经验”编一段话,比如:
“北京未来三天可能晴转多云,气温在15-25℃之间,建议出门带伞……”
但这不是真实天气,只是模型根据训练数据中“北京+春季/秋季”的典型天气模式“猜”的。
✅ 这种方式的问题:
- 数据不准确
- 无法用于生产
- 可能误导用户(幻觉)
✅ 情况二:你正在使用“工具调用”(这才是正确的做法)
你之前的问题中提到了 ToolResponseMessage,说明你其实在走一个更高级的流程:
✅ 正确流程:AI + 工具调用(Function Calling)
- 用户问:“北京天气如何”
- AI 模型判断:这不是我能直接回答的 → 建议调用
getWeather(city)工具 - 系统调用真实天气 API(或模拟)
- 把结果包装成
ToolResponseMessage - 再把工具结果发回给 AI 模型,让它生成自然语言回复
💡 这才是
ToolResponseMessage的用途:把真实数据告诉 AI,让它“翻译”成人类语言。
📌 所以你的代码应该长这样(完整流程):
// 第一步:AI 判断要调用工具
AiResponse aiResponse = client.prompt()
.user("北京未来三天天气如何")
.call()
.chatResponse();
// 假设 AI 返回:需要调用 getWeather 工具,callId = "call_123"
String callId = aiResponse.getToolCalls().get(0).getId();
String city = extractCityFromToolCall(aiResponse); // 提取参数
// 第二步:系统调用真实天气服务
String realWeather = weatherService.getRealWeather(city); // 真实 API 查询
// 第三步:把真实结果包装成 ToolResponseMessage
ToolResponseMessage toolResponse = new ToolResponseMessage(
List.of(new ToolResponseMessage.ToolResponse(callId, realWeather, "getWeather"))
);
// 第四步:把工具结果再发回给 AI,让它生成最终回复
String finalAnswer = client.prompt()
.user("北京未来三天天气如何")
.toolResponse(toolResponse)
.call()
.chatResponse()
.getResult()
.getOutput()
.getText();
✅ 总结:你问的问题,答案是:
| 问题 | 回答 |
|---|---|
| 大模型能提供实时天气吗? | ❌ 不能,训练数据是静态的 |
.user("天气如何").call() 返回什么? |
🤖 模型“猜”的结果(可能错误) |
| 怎么拿到真实天气? | ✅ 必须通过“工具调用”(Tool Calling) 让系统调用真实 API,再把结果交给 AI 生成回复 |
ToolResponseMessage 是干嘛的? |
📦 就是用来把“真实结果”传给 AI 的桥梁 |
🎯 类比理解:
大模型就像一个知识渊博但不联网的教授。
你问他:“今天股市如何?”
他不知道,但他说:“你应该去查一下新浪财经。”
你查完回来告诉他结果,他才能说:“哦,今天股市上涨了2%。”
这个“你去查”的过程,就是 Tool Calling。
✅ 所以:
不要指望大模型返回真实数据,
要用 AI + 工具调用 + 真实服务 的组合,才能做出靠谱的应用。
更多推荐



所有评论(0)