AI Agent框架探秘:拆解 OpenHands(12)--- Function call

发布时间:2026/7/24 1:01:10

AI Agent框架探秘:拆解 OpenHands(12)--- Function call
AI Agent框架探秘拆解 OpenHands12— Function call一、从基础讲起什么是 Function Call在 AI Agent 的日常工作中模型常常需要调用外部工具或获取实时数据。比如当用户问“今天北京天气怎么样”大语言模型LLM自身无法直接访问天气API这就需要一种机制让模型发出一个“函数调用请求”然后由系统去执行并返回结果。Function Call函数调用就是这样一个桥梁它允许 LLM 生成结构化的调用指令而不是纯文本回复。在 OpenHands 框架中Function call 是 Agent 与外部世界交互的核心机制之一。我们可以把它理解为 Agent 的“手”和“脚”——模型负责思考函数调用负责执行。下面是一个最简单的 Python 示例模拟 LLM 发出函数调用请求python# 示例 1模拟一个简单的函数调用系统import json# 定义可用的工具函数def get_weather(city: str) - str: 获取天气信息模拟 weather_data { 北京: 晴朗25°C, 上海: 多云28°C } return weather_data.get(city, 未知城市)# 模拟 LLM 返回的函数调用请求通常由 LLM 输出的 JSON 表示llm_response { function: get_weather, arguments: {city: 北京}}# 执行函数调用if llm_response[function] get_weather: result get_weather(**llm_response[arguments]) print(f函数调用结果{result}) # 输出函数调用结果晴朗25°C这段代码展示了最核心的流程定义函数 → 解析调用请求 → 执行并返回结果。但在真实框架中这个过程要复杂得多。## 二、OpenHands 中的函数调用架构OpenHands 作为一个完整的 AI Agent 框架将 Function call 抽象为几层结构1.工具定义层声明每个函数的名称、参数类型、描述2.请求解析层解析 LLM 输出的函数调用 JSON3.执行引擎层安全地调用实际函数4.结果回传层将执行结果格式化后送回 LLM这种分层设计使得 Agent 可以灵活地扩展新工具。比如当我们需要让 Agent 可以操作文件系统只需添加一个文件操作函数而无需改动核心逻辑。## 三、实战构建一个带函数调用的 Agent 核心下面我们编写一个更完整的示例模拟 OpenHands 风格的函数调用系统。这个 Agent 会接收用户指令通过 LLM这里用模拟的决定调用哪个函数然后执行并返回结果。python# 示例 2完整的函数调用 Agent 模拟import jsonfrom datetime import datetimeclass OpenHandsAgent: 模拟 OpenHands 风格的 Agent支持函数调用 def __init__(self): # 注册所有可用的工具函数 self.tools { get_current_time: { function: self.get_current_time, description: 获取当前时间无参数 }, calculate: { function: self.calculate, description: 执行数学计算参数expression (str) 数学表达式 }, search_knowledge: { function: self.search_knowledge, description: 搜索知识库参数query (str) 搜索关键词 } } def get_current_time(self) - str: 工具1获取当前时间 return f当前时间是{datetime.now().strftime(%Y-%m-%d %H:%M:%S)} def calculate(self, expression: str) - str: 工具2安全执行数学计算 try: # 注意实际项目中应使用更安全的计算方式 result eval(expression) return f计算结果{result} except Exception as e: return f计算错误{str(e)} def search_knowledge(self, query: str) - str: 工具3模拟知识库搜索 knowledge_base { python: Python 是一种高级编程语言广泛用于 AI 开发, agent: AI Agent 是能自主执行任务的智能系统 } return knowledge_base.get(query.lower(), f未找到关于 {query} 的知识) def simulate_llm_decision(self, user_input: str) - dict: 模拟 LLM 根据用户输入决定调用哪个函数 # 实际项目中这里会调用真正的 LLM API if 时间 in user_input: return {function: get_current_time, arguments: {}} elif 计算 in user_input: # 提取表达式简单模拟 expr user_input.replace(计算, ).strip() return {function: calculate, arguments: {expression: expr}} elif 搜索 in user_input or 知识 in user_input: query user_input.replace(搜索, ).replace(知识, ).strip() return {function: search_knowledge, arguments: {query: query}} else: return None # 无法识别的指令 def process_user_input(self, user_input: str) - str: 处理用户输入的主流程 # 步骤1模拟 LLM 决策 decision self.simulate_llm_decision(user_input) if decision is None: return 抱歉我没有理解您的指令请尝试询问时间、计算或搜索知识。 # 步骤2查找并执行工具函数 tool_name decision[function] if tool_name not in self.tools: return f错误未知工具 {tool_name} tool_func self.tools[tool_name][function] args decision[arguments] # 步骤3执行函数调用 try: result tool_func(**args) return result except Exception as e: return f函数调用失败{str(e)}# 运行测试agent OpenHandsAgent()# 测试各种指令test_inputs [ 现在几点了, 计算 3 5 * 2, 搜索 Python 知识, 你好世界]for user_input in test_inputs: print(f用户{user_input}) response agent.process_user_input(user_input) print(fAgent{response}\n)运行这段代码你会看到 Agent 能根据不同的用户指令自动选择并调用对应的函数。这就是 Function call 在 AI Agent 中的核心价值——让模型突破文本生成限制具备执行实际动作的能力。## 四、深入 OpenHands 的高级用法OpenHands 在实际实现中对 Function call 做了许多增强### 1. 异步执行与错误重试真实场景中API 调用可能超时或失败。OpenHands 使用asyncio实现异步函数调用并内置重试机制。### 2. 参数校验与类型安全每个函数调用都会经过严格的 JSON Schema 校验确保 LLM 生成的参数格式正确。例如如果函数需要一个整数参数但 LLM 传了字符串系统会拒绝调用并要求 LLM 重新生成。### 3. 上下文注入函数调用可以访问 Agent 的当前状态如对话历史、环境变量。这让函数能做出更合理的决策比如文件操作函数知道当前工作目录。### 4. 链式调用OpenHands 支持在一次交互中多次调用函数。例如先“搜索用户信息”再“根据结果发送邮件”。框架会自动管理调用顺序和数据传递。## 五、最佳实践与注意事项| 实践要点 | 说明 ||---------|------|| 函数描述要详细 | LLM 依赖描述来决定何时调用应包含参数示例和边界条件 || 避免副作用 | 函数应该纯粹且可预测修改外部状态前要确认 || 安全性检查 | 对用户输入的参数进行白名单校验防止注入攻击 || 超时控制 | 每个函数调用设置合理的超时时间避免 Agent 卡死 |## 总结Function call 是 AI Agent 连接“思考”与“行动”的关键桥梁。从基础的函数注册与调用到 OpenHands 框架中的异步执行、参数校验和链式调用这一机制让 LLM 从一个“聊天机器人”进化为能够真正操作外部世界的智能体。通过本文的两个示例你应该已经掌握了 Function call 的核心原理并看到了它在实际 Agent 框架中的实现方式。随着 Agent 技术不断发展函数调用的能力边界也在持续扩展——从简单的 API 调用到复杂的多步骤工作流Function call 正在成为构建下一代智能系统的基石。

相关新闻

2026亚太EMBA优势|主流院校中立择校测评

2026亚太EMBA优势|主流院校中立择校测评

2026/7/24 1:01:10

民营企业家、企业创始人选EMBA,普遍纠结国际化适配、课程实用性、圈层质量与产业资源匹配度。本文从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大核心维度,横向测评主流EMBA项目,深度拆解亚太EMBA优势。全文纯客观数据分析…

2026亚太EMBA世界排名|主流院校中立择校测评

2026亚太EMBA世界排名|主流院校中立择校测评

2026/7/24 1:01:10

民营企业家、企业创始人择校EMBA,普遍面临排名真伪、课程适配、圈层匹配、资源落地四大难题。本文结合2026亚太EMBA世界排名权威数据,从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大客观维度,横向对比国内头部EMBA项目。全…

2026亚太EMBA排行榜:主流院校中立择校测评

2026亚太EMBA排行榜:主流院校中立择校测评

2026/7/24 1:01:10

民营企业家、企业创始人择校EMBA,普遍纠结排名真伪、课程适配性、圈层含金量与产业资源落地性。本文依托亚太EMBA排行榜核心参考标准,从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大客观维度,横向对比主流头部EMBA项目。全…

Qwen3.5轻量化AI模型:端侧部署与行业应用解析

Qwen3.5轻量化AI模型:端侧部署与行业应用解析

2026/7/24 1:51:12

1. Qwen3.5系列模型的技术突破与行业影响阿里云最新开源的Qwen3.5系列小模型在端侧AI领域引发了广泛关注,这组模型在保持高性能的同时实现了显著的轻量化突破。作为长期关注AI落地的从业者,我认为这次开源标志着端侧AI技术从实验室走向产业应用的临界点已…

智能代理系统Hermes Agent:从工作流自动化到AI模型编排实战

智能代理系统Hermes Agent:从工作流自动化到AI模型编排实战

2026/7/24 1:51:12

如果你正在寻找一个能够真正理解你的意图、自动执行复杂任务、还能随着使用不断进化的智能助手,那么 Hermes Agent 可能正是你需要的解决方案。与传统 AI 工具不同,Hermes Agent 不是简单的聊天机器人,而是一个完整的智能代理系统&#xff0c…

深入解析MSPM0 Flash架构:多Bank并发、Bank Swap与ECC保护实战

深入解析MSPM0 Flash架构:多Bank并发、Bank Swap与ECC保护实战

2026/7/24 1:51:12

1. 项目概述与核心价值在嵌入式系统开发中,非易失性存储器(NVM)是决定系统可靠性与功能上限的基石。它不仅仅是代码和数据的“仓库”,更是实现固件在线升级、参数掉电保存、安全启动等高级功能的核心硬件。我接触过不少项目&#…

速卖通图片批量翻译的Python实现方案

速卖通图片批量翻译的Python实现方案

2026/7/24 1:51:12

一、问题引入许多速卖通卖家在上架商品时,都面临一个共同的难题:如何高效地将商品图中的文字翻译成目标市场语言。传统做法是手动修图或用Photoshop逐一替换文字,一个熟练的美工每天最多处理30-50张图片,遇到需要同时上架200款新品…

AI日程规划实战手册(2024企业级落地版):从会议冲突预测到跨时区自动重排

AI日程规划实战手册(2024企业级落地版):从会议冲突预测到跨时区自动重排

2026/7/24 1:51:12

更多请点击: https://intelliparadigm.com 第一章:AI日程管理与规划 现代知识工作者每日面临多源任务涌入、优先级模糊、时间碎片化等挑战。AI日程管理不再仅是“提醒工具”,而是融合自然语言理解、上下文感知与主动推理的智能协作者——它能…

西门子 Eigen 落地中国带来行业启示:工业 AI 智能体腾飞,底层实时操作系统成关键基石

西门子 Eigen 落地中国带来行业启示:工业 AI 智能体腾飞,底层实时操作系统成关键基石

2026/7/24 1:41:11

2026 世界人工智能大会期间,西门子正式面向中国市场首发工业自动化工程 AI 智能体 Eigen,迅速成为工业智能化赛道焦点产品。作为全球为数不多可自主完成全链路自动化工程任务的工业 AI 系统,Eigen 跳出传统 AI 工具仅提供参考建议的局限&…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/23 3:40:08

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/23 4:40:05

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

Django毕设项目:基于 Django 的 智能化学生综合素质测评审核系统 校园学生评优评奖综合管理系统(源码+文档,讲解、调试运行,定制等)

Django毕设项目:基于 Django 的 智能化学生综合素质测评审核系统 校园学生评优评奖综合管理系统(源码+文档,讲解、调试运行,定制等)

2026/7/24 0:01:07

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

[具身智能-634]:Python 封装的地平线 VIO 多媒体库:libsrcampy库详解

[具身智能-634]:Python 封装的地平线 VIO 多媒体库:libsrcampy库详解

2026/7/24 0:01:07

srcampy /libsrcampy 名称释义先明确结论: 官方文档没有公布标准化英文全称,是地平线内部项目缩写;行业公认拆解如下:srcampy Source Amplifier Python bindingsrc Source(图像源:MIPI Sensor、视频源&am…

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

2026/7/24 0:01:07

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…