一个详细的客户端通过插件实现调用组件过程实例。

📅 2026/7/2 2:40:13
一个详细的客户端通过插件实现调用组件过程实例。
通过一个具体的客户端示例来了解插件调用组件的过程。提供一个详细的实例。为了全面覆盖不同平台的插件调用机制将同时进行多项资料整理以获取ChatGPT插件、Semantic Kernel插件以及通用Agent插件等方面的实例。为了提供一个详细的实例参考一些包含示例的资料比如OpenAI函数调用和Semantic Kernel插件相关的资料。以OpenAI的Function Calling机制为例详细说明客户端通过插件调用组件的完整过程。回答将包含一个具体的天气查询示例展示从工具定义、请求发送、意图匹配到执行和返回结果的完整流程。下面将以OpenAI的Function Calling函数调用机制为核心提供一个完整的实例详细拆解客户端通过插件Plugin调用组件的全过程。场景定义构建一个AI天气助手用户询问“北京今天天气怎么样”AI通过调用外部天气API获取实时数据并回复。本实例采用OpenAI Function Calling机制来实现这一插件调用流程。这个选择是因为Function Calling是目前AI应用开发中最主流、最典型的插件调用范式并被Semantic Kernel、LangChain等框架广泛集成。它提供了一个清晰的标准流程展示了客户端如何通过定义、匹配、执行来完成对组件即API工具的调用。第一步工具注册与参数定义在程序启动时客户端需要向AI模型“注册”它可用的工具即插件并定义每个工具的函数签名。这是通过一个符合JSON Schema规范的tools定义完成的具体包括name工具的唯一标识。description工具的功能描述帮助AI模型理解何时调用该工具。parameters工具的参数定义包括参数类型、描述和必填项。# 工具定义核心是函数声明tools[{type:function,function:{name:get_weather,description:获取指定城市的实时天气信息,parameters:{type:object,properties:{city:{type:string,description:城市名称例如北京、上海、纽约}},required:[city]}}}]第二步客户端发起调用请求当用户输入“北京今天天气怎么样”后客户端将该消息连同已注册的工具列表一并发送给OpenAI API。importopenai clientopenai.OpenAI()# 用户消息messages[{role:user,content:北京今天天气怎么样}]# 发起请求传递工具列表responseclient.chat.completions.create(modelgpt-4o,messagesmessages,toolstools,tool_choiceauto# 由模型自动决定是否需要调用工具)这里的关键在于AI模型并不会直接去调用任何外部API而是通过分析用户意图判断是否有可用的工具能够满足需求然后返回一个结构化的工具调用指令。第三步AI模型的意图匹配与路由当AI模型判断用户的意图与某个工具描述高度匹配时API不会返回文本响应而是返回一个标准的工具调用指令。# AI返回的工具调用指令Python对象展示{role:assistant,content:null,tool_calls:[{id:call_abc123,type:function,function:{name:get_weather,arguments:{city: 北京}}}]}这一步骤正是之前提到过的统一路由机制它让AI能够在多种工具中自动选择最合适的一个。第四步工具服务端的调用接口提供标准的调用指令生成后客户端负责解析该指令并执行实际的函数调用。这个函数调用可能指向一个本地函数也可能指向一个远程API服务。假设我们有一个天气API客户端会这样执行调用importjsonimportrequests# 1. 获取模型返回的工具调用指令tool_callresponse.choices[0].message.tool_calls[0]function_nametool_call.function.name argumentsjson.loads(tool_call.function.arguments)# {city: 北京}# 2. 执行调用这里以API服务为例api_responserequests.get(https://api.weather.com/v1/current,params{city:arguments[city]})weather_resultapi_response.json()print(weather_result)# 例如{temperature: 25, condition: 晴}无论是调用本地函数还是远程API这个环节都遵循同样的标准解析指令 - 执行函数 - 返回结果。第五步工具服务端实现请求处理与结果返回这里需要明确一个关键点插件本身并不处理HTTP请求。插件的真正实现是客户端中的函数映射即Function Implementation它负责执行具体逻辑并生成标准化的返回值。# 工具服务端逻辑接收解析后的参数执行业务逻辑返回标准化结果defget_weather(city:str)-dict: 根据城市名称调用天气API并返回标准化的天气数据 api_responserequests.get(https://api.weather.com/v1/current,params{city:city})dataapi_response.json()# 返回标准化结果return{temperature:data[temperature],condition:data[condition],humidity:data.get(humidity,N/A)}这个标准化的返回值会被封装成消息再次发送给AI模型进行理解和润色。第六步结果返回与最终回复生成# 将工具执行结果返回给模型messages.append({role:tool,tool_call_id:call_abc123,content:json.dumps(weather_result,ensure_asciiFalse)})# 模型生成最终回复final_responseclient.chat.completions.create(modelgpt-4o,messagesmessages)print(final_response.choices[0].message.content)# 输出示例北京今天天气晴朗气温25°C湿度35%非常适合户外活动。总结整个过程可以清晰地看到插件调用的标准化协议本质阶段核心动作说明接口定义通过tools参数注册工具的name、description和parameters统一使用JSON Schema格式请求发送客户端将用户消息和工具列表一同发送给AI模型遵循OpenAI Function Calling规范意图匹配AI模型根据工具描述自动判断并返回tool_calls指令基于语义相似度进行路由调用执行客户端解析指令执行实际的函数或API调用将标准指令转换为具体操作结果返回将执行结果封装为标准消息格式返回给AI模型AI模型据此生成最终回复整个过程自始至终都在遵循一套标准化的协议Function Calling / JSON Schema确保了AI模型与各类工具之间能够无缝集成与调用。这也正与之前讨论的“统一接口暴露能力”这一核心思想一脉相承。