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

Android开发转AI Agent:第12天——Function Calling,让LLM从“说话“变成“做事“

作者:一位Android开发工程师 | 2026年7月1日
系列:Agent 核心能力——让 LLM 调用你的函数


前言

之前所有调用都是"你问 LLM 答"——LLM 只能说,不能做。

Function Calling 改变了这一点:你告诉 LLM 有哪些工具可以用,LLM 决定要不要用、用哪个、传什么参数。你的代码执行工具,把结果还给 LLM。

这是 Agent 区别于普通 Chatbot 的核心能力。


完整流程(两次 API 调用)

第1次请求:用户问"北京天气?" → LLM 返回"我要调 get_weather(city=北京)" ↓ 你的代码执行 get_weather("北京") → 返回"晴天25°C" ↓ 第2次请求:把结果告诉 LLM → LLM 生成自然语言"北京今天晴天,25°C"

核心代码

定义工具(JSON Schema)

tools=[{"type":"function","function":{"name":"get_weather","description":"获取指定城市的天气信息","parameters":{"type":"object","properties":{"city":{"type":"string","description":"城市名称"}},"required":["city"],},},}]

骨架永远不变,变的是namedescriptionproperties

第一次请求

response=client.chat.completions.create(model="turing/gpt-4o-mini",messages=[{"role":"user","content":"北京天气怎么样"}],tools=tools,# ← 多了这个参数)msg=response.choices[0].message

如果 LLM 想调工具,msg.tool_calls会有值;否则msg.content直接有回答。

执行工具 + 第二次请求

ifmsg.tool_calls:tool_call=msg.tool_calls[0]args=json.loads(tool_call.function.arguments)# {"city": "北京"}result=get_weather(args["city"])# "晴天25°C"response2=client.chat.completions.create(model="turing/gpt-4o-mini",messages=[{"role":"user","content":"北京天气怎么样"},msg,# LLM 的工具调用请求{"role":"tool","tool_call_id":tool_call.id,"content":result},],)print(response2.choices[0].message.content)

为什么第二次请求要带上完整 messages

因为LLM 没有记忆(第4天学的)。每次 API 调用都是全新的,你必须把完整上下文打包发过去:

  • user消息:原始问题(不然 LLM 不知道在为谁回答)
  • assistant消息(tool_calls):LLM 的工具调用请求(不然 LLM 不知道这是工具返回的结果)
  • tool消息:工具执行结果

今天的一句话总结

Function Calling 的本质是一次"请求→执行→再请求"的两次调用过程。LLM 决定调什么工具,你的代码执行工具,结果还给 LLM 生成回答。这是 Agent 循环的雏形。


下一篇预告

第13天:多工具编排——给 LLM 三个工具,看它能不能自动选对。


本系列记录一位Android开发者转行AI Agent的完整学习过程,欢迎关注交流。

http://www.jsqmd.com/news/1106224/

相关文章:

  • Spring MVC开发实践教程
  • Python装饰器开发实践
  • step1. 调用摄像头
  • 给阿嬤一封来自云端的信(上)
  • NestJS框架教程
  • STM32与MAX9744实现高效音频放大系统设计
  • 量子计算中的基态制备与经典储层方法解析
  • 终极Win11系统优化指南:免费工具让你的Windows 11运行如飞
  • 游戏编程十年总结(下)
  • AI应用GEO排名优化指南:提升搜索可见性
  • 如何提取 Word 文档中的表格并导出为 Excel(Python 教程)
  • 第5章 Function Call 与工具调用框架《AI Agent 开发平台资深技术专家 AI Agent 应用架构师 CTO 面试题库详解》
  • 微架构安全:MDAV问题与防御机制集成挑战
  • JSON数据格式解析与应用
  • 【安全】Sql注入漏洞的危害和防御
  • Medisca在创始人Antonio Dos Santos的引领下开启发展新篇章
  • GPU监控与进程管理:科研必备的nvidia-smi详解
  • 6DoF运动跟踪技术:从IMU到姿态解算的实践指南
  • 【C++并发系列】第十二章:CPU cache line 和 false sharing
  • 打包带在高温环境下会变形吗?
  • Python代码重构最佳实践
  • Zephyr RTOS入门:设备树(DTS)与Kconfig配置体系——设备树、配置系统
  • 实测 Claude Sonnet 5 vs Claude Sonnet 4.6:别只看发布公告,API 跑起来才知道差距
  • Python集合使用技巧解析
  • 《代码随想录》刷题打卡day28:动态规划part01
  • 纯HTML离线项目零部署优化方案|单文件离线运行、无环境依赖 前言
  • 从0开始为Vue3+TS+Vite项目配置ESLint+Prettier
  • LTC6904与PIC18F86J11实现高精度时钟同步方案
  • 客服工单表怎么关联订单和玩家记录
  • 即时通信服务器架构的一些思考