当前位置: 首页 > java >正文

第六章:Tool and LLM Integration

Chapter 6: Tool and LLM Integration


从执行流到工具集成:如何让AI“调用真实世界的技能”?

在上一章的执行流框架中,我们已经能让多个代理协作完成复杂任务。但你是否想过:如果用户要求“查询实时天气”或“打开网页搜索”,AI如何调用真实世界的工具(比如天气API、浏览器)?就像给指挥家配备更多乐器,让整个“交响乐团”能力更强!本章将介绍如何通过工具与LLM集成层,让AI无缝调用外部服务。


核心问题:如何让AI“听懂”不同服务商的语言?

想象你是一位需要跨国合作的翻译官:

  • 亚马逊Bedrock要求用“工具使用ID”格式说话
  • OpenAI要求用“函数调用”格式说话
  • 工具API需要特定参数格式

工具集成层就像这位翻译官,通过以下机制实现:
✅ 将不同LLM的格式统一转换
✅ 在调用失败时重试或降级
✅ 支持实时流式输出


核心概念分解

1. 协议转换器:像翻译官一样转换“语言”

就像把中文翻译成英文,协议转换器负责:

# 将OpenAI的函数调用格式转为Bedrock格式(简化示例)
def convert_openai_to_bedrock(tools):bedrock_tools = []for tool in tools:bedrock_tool = {"name": tool["name"],"description": tool["description"],"inputSchema": tool["parameters"]  # 统一参数格式}bedrock_tools.append(bedrock_tool)return bedrock_tools
2. 错误处理机制:像安全网一样兜底

当调用失败时自动:

  • 尝试其他服务商(如Bedrock→OpenAI)
  • 返回友好提示而非崩溃
# 简化版错误处理逻辑
try:response = call_external_api()
except APIError:return "当前服务繁忙,请稍后再试"
3. 流式与非流式API:像直播与录播两种模式
  • 流式模式:实时返回文字(适合聊天)
  • 非流式模式:一次性返回完整结果(适合计算任务)
# 流式调用示例
async def stream_api_call():for chunk in response_stream:yield chunk  # 逐块返回内容

如何用集成层解决问题?

场景:调用天气API获取实时数据

步骤1:定义工具配置
# config.toml中添加天气工具配置
[tools.weather_api]
name = "天气查询"
description = "获取实时天气数据"
parameters = {"location": "城市名称","unit": "返回温度单位(C/F)"
}
步骤2:创建工具调用类
class WeatherTool:async def call(self, location: str, unit: str = "C"):# 模拟调用外部APIreturn f"{location}当前温度25°C,天气晴朗"
步骤3:在代理中集成
# 在代理的run方法中调用
tool_response = await WeatherTool().call(user_query.location)
memory.add_message(Message.tool_message(content=tool_response,name="天气工具",tool_call_id="tool_001"
))

此时,用户就能在对话中看到类似这样的回答:

用户:上海今天天气如何?
AI:上海当前温度25°C,天气晴朗(数据来自天气工具)


内部实现揭秘:工具调用的“翻译过程”

流程分解(用简单序列图演示)
用户 工具集成层 外部服务 工具 请求"查询北京天气" 将OpenAI格式转为Bedrock格式 发送转换后的请求 返回Bedrock格式结果 转换结果为OpenAI格式 显示"北京今天25°C" 调用天气查询工具 返回天气数据 opt [调用工具时] 用户 工具集成层 外部服务 工具
关键代码解析(app/bedrock.py片段)
# 将Bedrock响应转为OpenAI格式的简化示例
def _convert_bedrock_response(self, bedrock_response):openai_response = {"choices": [{"message": {"content": bedrock_response["output"]["content"],"role": "assistant"}}]}return OpenAIResponse(openai_response)

深入理解工具集成层

通过本章,你已掌握:
✅ 如何将不同服务商的格式统一
✅ 在调用失败时如何优雅处理
✅ 流式与非流式调用的区别


小结与展望

通过工具与LLM集成,我们实现了:
✅ 跨服务商的协议兼容性
✅ 稳定可靠的外部工具调用
✅ 实时与非实时场景的灵活支持

下一章我们将探讨服务器/客户端通信,学习如何让AI系统通过网络协同工作——就像给交响乐团配备远程指挥系统!现在你可以尝试添加更多工具(比如翻译API)到你的项目中了!

http://www.xdnf.cn/news/2808.html

相关文章:

  • DDS(数据分发服务)原理详解
  • 第三章:Configuration Management
  • 测试用例设计的完整过程详解:从需求到覆盖的实战指南
  • Python 中调用方法内部定义的类详解(类在方法中的各种操作)
  • 3、CMake语法:制作和使用动态库和静态库
  • 现代c++获取linux所有的网络接口名称
  • Java大师成长计划之第6天:Java流式API(Stream API)
  • Kubernetes基础与部署实战
  • shell(3)
  • windows中无法关闭mysql57服务
  • 深度学习近十年的汇总
  • 复习Vue136~180
  • HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级
  • n 卡编码
  • 高级java每日一道面试题-2025年4月28日-基础篇[反射篇]-反射操作中,`invoke()`方法的作用是什么?
  • 基于【低代码+AI智能体】开发智能考试系统
  • Python-Part2-集合、字典与推导式
  • 基于docker部署mssqlserver : mcr.microsoft.com/mssqlserver:2022-latest
  • 第十八节:开放性问题-Vue生态未来趋势
  • kubernetes常用命令 k8s指令大全
  • 【205】Python3 实现整数和IP地址字符串互相转换
  • 【读书笔记】机器行为与具身智能
  • pywinauto操作Windows应用
  • VUE3:封装一个评论回复组件
  • 【环境配置】Mac电脑安装运行R语言教程 2025年
  • 如何评价 DeepSeek 的 DeepSeek-V3 模型?
  • 【优选算法 | 二分查找】二分查找算法解析:如何通过二段性优化搜索效率
  • Python项目-支持自然语言处理
  • Docker和K8s面试题
  • Nacos 3.0 上线 MCP Registry,支持 MCP 服务注册到发现全流程管理