php网站模板制作软件泾川网站建设

张小明 2026/1/3 10:01:24
php网站模板制作软件,泾川网站建设,怎么做网站登录界面,住房和城乡建设部文化中心网站初次上手如何快速开发基于大模型function call的agent应用#xff1f; 最近主导了一款ai agent系统的开发#xff0c;在定架构的时候选择了MCP协议#xff0c;在期间遇到不少坑点#xff0c;记录顺分享一下相关内容。此篇是系列的第四篇#xff1a;读完预计能对怎么快速搭…初次上手如何快速开发基于大模型function call的agent应用最近主导了一款ai agent系统的开发在定架构的时候选择了MCP协议在期间遇到不少坑点记录顺分享一下相关内容。此篇是系列的第四篇读完预计能对怎么快速搭建一个基于大模型和function call能力下的agent应用有初步的认知此前介绍过基于MCP协议的开发内容当时介绍中开发细节较少实则可以不基于MCP仅基于大模型function call能力就能开发一款agent应用。此篇重点记录下小白在开发过程中可能产生的一些问题和疑问的解答含代码部分内容如messages该如何组织适配agent应用因篇幅原因会在下一文联合上下文处理一起介绍。what——function call是什么这个问题在前一篇文章中有讲述过简单说Function Call就是让智能助手能调用外部工具的功能比如查天气、订外卖、算数学题让它从只会说话变成会办实事的全能帮手why——为什么需要function call大模型本身的一些缺陷例如1. 知识有时效性缺陷比如你问 “2025 年 NBA 总冠军是谁”假设现在是 2025 年模型如果没学过 2025 年的新数据就答不上来。但用 Function Call 调用体育新闻 API马上能拿到实时结果。2. 不会做专业操作模型懂医学知识但不能直接帮你查医院排班懂数学公式但不会用 Excel 算工资表。而 Function Call 能喊医院系统、办公软件来干活实现 “理论 实操” 结合。how——怎么做一个基于function call的应用整个系统框架可以如下图所示基于function call的应用图解1用户发起请求User→应用系统用户向应用系统提交自然语言问题如查询上海天气。2提示词编排应用系统→LLM应用系统将问题转化为结构化提示词调用大模型并请求决策。3工具调用判断LLM决策分支无需工具LLM直接生成文本回复如回答常识问题。需工具调用LLM输出工具名称及参数如WeatherAPI: {location: “上海”}。4安全审批应用系统→Host系统工具调用需经权限校验与风险审核通过后触发执行确认。5函数执行Host系统Host系统按参数调用目标工具如天气API获取原始结果如JSON数据。6-8结果整合逆向传递链工具结果经Host系统→应用系统→LLM逐层返回LLM将数据转化为自然语言如上海今日多云28°C。9最终响应应用系统→User应用系统将LLM生成的友好回复返回给用户流程终止。whyhow——小白开发中可能有的几个核心疑问怎么实现函数调度的功能整体其实就是提示词来激发模型选择工具的能力目前开发过程中主要有两种实现方式一种是直接使用大模型API提供方提供的利用tools和messages的组织方式其实背后他们自己也是通过prompt来组建的一套能力不过相比自己开发一套提示词工程而言他们更了解底层模型如何做的在通用化场景下的适配效果可能比自己研究要好很多。1使用官方提供的服务openai接口访问方式快速使用推荐简版代码如下但提前需准备好tools的定义见下文tools的样式小节和messages数组见下文messages该如何组织部分后续推文会有更详细的介绍。from openai import OpenAIimport osclient OpenAI( # 若没有配置环境变量请用提供商提供的api_keysk-xxx, api_keyos.getenv(API_KEY), base_urlBASE_URL,)deffunction_calling(): completion client.chat.completions.create( modelqwen-plus, # 此处以qwen-plus为例 messagesmessages, toolstools # 这里tools的结构体可以见下文tools的样式 ) print(返回对象) print(completion.choices[0].message.model_dump_json()) print(\n) return completionprint(正在发起function calling...)completion function_calling()2prompt系统自实现完全小白不建议用这个哈相对自适配能力更强但很考验对底层模型的理解。上图提供了函数调用流程的图解实际自己用prompt开发流程与上图一致。用户提问的时候将工具内容和问题组织为一定的提示词给到大模型然后写一段拆解函数拆解大模型返回内容里面携带的工具调用信息和其他文本内容。下面是一个简单的访问模型的例子注意拆解工具调用函数部分并没有给出。import osfrom openai import OpenAIimport jsonclient OpenAI( # 若没有配置环境变量请用提供商提供的api_keysk-xxx, api_keyos.getenv(API_KEY), base_urlBASE_URL,)# 自定义 System prompt可根据您的需求修改custom_prompt 你是一个智能助手专门负责调用各种工具来帮助用户解决问题。你可以根据用户的需求选择合适的工具并正确调用它们。tools [ # 工具1 获取当前时刻的时间 { type: function, function: { name: get_current_time, description: 当你想知道现在的时间时非常有用。, parameters: {} } }, # 工具2 获取指定城市的天气 { type: function, function: { name: get_current_weather, description: 当你想查询指定城市的天气时非常有用。, parameters: { type: object, properties: { location: { type: string, description: 城市或县区比如北京市、杭州市、余杭区等。 } }, required: [location] } } }]# 遍历tools列表为每个工具构建描述tools_descriptions []for tool in tools: tool_json json.dumps(tool, ensure_asciiFalse) tools_descriptions.append(tool_json)# 将所有工具描述组合成一个字符串tools_content \n.join(tools_descriptions)system_prompt f{custom_prompt}# ToolsYou may call one or more functions to assist with the user query.You are provided with function signatures within tools/tools XML tags:tools{tools_content}/toolsFor each function call, return a json object with function name and arguments within tool_call/tool_call XML tags:tool_call{{name: function-name, arguments: args-json-object}}/tool_callmessages [ {role: system, content: system_prompt}, {role: user, content: 几点了}]completion client.chat.completions.create( modelqwen-plus, messagesmessages,)print(completion.model_dump_json())tools的样式是什么样的怎么准备toolsOpenAI协议中tools目前通用格式如下tools [ { type: function, function: { name: get_current_time, description: 当你想知道现在的时间时非常有用。, } }, { type: function, function: { name: get_current_weather, description: 当你想查询指定城市的天气时非常有用。, parameters: { type: object, properties: { location: { type: string, description: 城市或县区比如北京市、杭州市、余杭区等。, } }, required: [location] } } }]tool_name [tool[function][name] for tool in tools]print(f创建了{len(tools)}个工具为{tool_name}\n)其中•type字段固定为function•function字段为 Object 类型•name字段为自定义的工具函数名称建议使用与函数相同的名称如get_current_weather或get_current_time•description字段是对工具函数功能的描述大模型会参考该字段来选择是否使用该工具函数。•parameters字段是对工具函数入参的描述类型是 Object 大模型会参考该字段来进行入参的提取。如果工具函数不需要输入参数则无需指定parameters参数。•type字段固定为object•properties字段描述了入参的名称、数据类型与描述为 Object 类型Key 值为入参的名称Value 值为入参的数据类型与描述•required字段指定哪些参数为必填项为 Array 类型。messages该如何组织message数组样例如下具体role有 system、user、tool、assistant。• system对话的全局导演设定模型的行为框架和初始规则。交互框架的 “设计者” 与 “规则制定者”。• user交互的 “需求发起者” 与 “信息输入方”。• tool交互中的 “功能执行者” 与 “数据提供者”。• assistant交互的 “问题解决者” 与 “内容整合者”。messages [ { role: system, content: 你是一个很有帮助的助手。如果用户提问关于天气的问题请调用 ‘get_current_weather’ 函数; 如果用户提问关于时间的问题请调用‘get_current_time’函数。 请以友好的语气回答问题。, }, { role: user, content: 深圳天气 }]print(messages 数组创建完成\n)怎么进行函数的并行调度部分问题可能需要同时调用多个工具比如问北京和上海的天气如何这个问题可能需要调用两次天气函数分别查询北京和上海的天气情况。def function_calling(): completion client.chat.completions.create( modelqwen-plus,# 此处以 qwen-plus 为例可按需更换模型名称 messagesmessages, toolstools,# 新增参数 parallel_tool_callsTrue ) print(返回对象) print(completion.choices[0].message.model_dump_json()) print(\n) return completionprint(正在发起function calling...)completion function_calling()怎么强制使用或者不使用工具tool_choice可以选择autononerequired必须调用至少一个工具或者指定要调用的函数# 强制使用某个工具deffunction_calling(): completion client.chat.completions.create( modelqwen-plus, messagesmessages, toolstools, tool_choice{type: function, function: {name: get_current_weather}} ) print(completion.model_dump_json())function_calling()# 强制不使用工具tool_choice设置为nonedeffunction_calling(): completion client.chat.completions.create( modelgpt-4, messagesmessages, toolstools, tool_choicenone ) print(completion.model_dump_json())function_calling()完整的代码参考from openai import OpenAIfrom datetime import datetimeimport jsonimport osimport randomclient OpenAI( # 若没有配置环境变量请用百炼API Key将下行替换为api_keysk-xxx, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, # 填写DashScope SDK的base_url)# 定义工具列表模型在选择使用哪个工具时会参考工具的name和descriptiontools [ # 工具1 获取当前时刻的时间 { type: function, function: { name: get_current_time, description: 当你想知道现在的时间时非常有用。, # 因为获取当前时间无需输入参数因此parameters为空字典 parameters: {}, }, }, # 工具2 获取指定城市的天气 { type: function, function: { name: get_current_weather, description: 当你想查询指定城市的天气时非常有用。, parameters: { type: object, properties: { # 查询天气时需要提供位置因此参数设置为location location: { type: string, description: 城市或县区比如北京市、杭州市、余杭区等。, } }, required: [location], }, }, },]# 模拟天气查询工具。返回结果示例“北京今天是雨天。”defget_current_weather(arguments): # 定义备选的天气条件列表 weather_conditions [晴天, 多云, 雨天] # 随机选择一个天气条件 random_weather random.choice(weather_conditions) # 从 JSON 中提取位置信息 location arguments[location] # 返回格式化的天气信息 returnf{location}今天是{random_weather}。# 查询当前时间的工具。返回结果示例“当前时间2024-04-15 17:15:18。“defget_current_time(): # 获取当前日期和时间 current_datetime datetime.now() # 格式化当前日期和时间 formatted_time current_datetime.strftime(%Y-%m-%d %H:%M:%S) # 返回格式化后的当前时间 returnf当前时间{formatted_time}。# 封装模型响应函数defget_response(messages): completion client.chat.completions.create( modelqwen-plus, # 模型列表https://help.aliyun.com/zh/model-studio/getting-started/models messagesmessages, toolstools, ) return completiondefcall_with_messages(): print(\n) messages [ { content: input( 请输入 ), # 提问示例现在几点了 一个小时后几点 北京天气如何 role: user, } ] print(- * 60) # 模型的第一轮调用 i 1 first_response get_response(messages) assistant_output first_response.choices[0].message print(f\n第{i}轮大模型输出信息{first_response}\n) if assistant_output.content isNone: assistant_output.content messages.append(assistant_output) # 如果不需要调用工具则直接返回最终答案 if ( assistant_output.tool_calls None ): # 如果模型判断无需调用工具则将assistant的回复直接打印出来无需进行模型的第二轮调用 print(f无需调用工具我可以直接回复{assistant_output.content}) return # 如果需要调用工具则进行模型的多轮调用直到模型判断无需调用工具 while assistant_output.tool_calls ! None: # 如果判断需要调用查询天气工具则运行查询天气工具 tool_info { content: , role: tool, tool_call_id: assistant_output.tool_calls[0].id, } if assistant_output.tool_calls[0].function.name get_current_weather: # 提取位置参数信息 argumens json.loads(assistant_output.tool_calls[0].function.arguments) tool_info[content] get_current_weather(argumens) # 如果判断需要调用查询时间工具则运行查询时间工具 elif assistant_output.tool_calls[0].function.name get_current_time: tool_info[content] get_current_time() tool_output tool_info[content] print(f工具输出信息{tool_output}\n) print(- * 60) messages.append(tool_info) assistant_output get_response(messages).choices[0].message if assistant_output.content isNone: assistant_output.content messages.append(assistant_output) i 1 print(f第{i}轮大模型输出信息{assistant_output}\n) print(f最终答案{assistant_output.content})if __name__ __main__: call_with_messages() **读者福利如果大家对大模型感兴趣这套大模型学习资料一定对你有用** **对于0基础小白入门** 如果你是零基础小白想快速入门大模型是可以考虑的。 一方面是学习时间相对较短学习内容更全面更集中。 二方面是可以根据这些资料规划好学习计划和方向。 作为一名老互联网人看着AI越来越火也总想为大家做点啥。干脆把我这几年整理的AI大模型干货全拿出来了。 包括入门指南、学习路径图、精选书籍、视频课还有我录的一些实战讲解。全部免费不搞虚的。 学习从来都是自己的事我能做的就是帮你把路铺平一点。资料都放在下面了有需要的直接拿能用到多少就看你自己了。 这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以点击文章最下方的VX名片免费领取【保真100%】 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d2632fea1ead4b9bb0d7f037fd48812f.jpeg) #####
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建设网站公司专业服务确定网站推广的阶段目标

第一章:物联网量子通信的信号强度在物联网(IoT)与量子通信融合的前沿领域,信号强度不再仅由传统电磁波功率决定,而是受到量子态保真度、纠缠分发效率以及信道退相干时间等多重因素影响。量子信号的“强度”更准确地体现…

张小明 2026/1/3 9:16:54 网站建设

购物网站设计方案常州建站服务

计算机毕业设计springboot流行病信息管理系统m2yyz9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展,信息管理的数字化和智能化已成为各行各…

张小明 2025/12/27 2:39:37 网站建设

php可以做视频网站免费网站建设就去186一6159一6345

第一章:VSCode中量子作业调试的核心挑战在使用 VSCode 进行量子计算作业开发时,开发者常面临与传统软件调试截然不同的技术难题。量子程序的非确定性行为、叠加态与纠缠态的不可观测性,使得传统的断点调试和变量检查手段难以直接应用。量子模…

张小明 2025/12/27 2:39:04 网站建设

企业网站建设国内外差异华蓥住房和城乡建设厅网站

还在为百度网盘资源下载时的提取码烦恼吗?每次遇到需要输入提取码的分享链接,都要在各种平台、评论区翻找,耗费宝贵时间?现在,BaiduPanKey为你带来革命性的解决方案,让提取码获取变得简单快捷! …

张小明 2025/12/27 2:38:30 网站建设

南昌大学作风建设网站哪些建材网站可以做宣传

深入探索fwknop:强化网络安全的利器 1. fwknop与iptables规则 fwknop在操作规则时,不会与iptables策略中的现有规则产生冲突。在30秒计时器到期前,可在fwknop服务器上执行以下命令查看授予对SSHD访问权限的iptables规则: [root@spaserver ~]# fwknopd --fw-list [+] Lis…

张小明 2025/12/27 2:37:57 网站建设

深圳住房和建设厅网站首页网站标签title

Flow3d 11.1 lpbf 熔池仿真模拟 slm 选区激光熔化 1.该模拟设包含颗粒床以及建立过程(有视频),运用Flow3D11.1、EDEM软件以及Gambit软件(含安装包),步骤清晰内容详细。 2.Flow3d 软件操作过程介绍详细&…

张小明 2025/12/27 2:37:24 网站建设