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 Schematools[{type:function,function:{name:get_weather,description:获取指定城市的天气信息,parameters:{type:object,properties:{city:{type:string,description:城市名称}},required:[city],},},}]骨架永远不变变的是name、description、properties。第一次请求responseclient.chat.completions.create(modelturing/gpt-4o-mini,messages[{role:user,content:北京天气怎么样}],toolstools,# ← 多了这个参数)msgresponse.choices[0].message如果 LLM 想调工具msg.tool_calls会有值否则msg.content直接有回答。执行工具 第二次请求ifmsg.tool_calls:tool_callmsg.tool_calls[0]argsjson.loads(tool_call.function.arguments)# {city: 北京}resultget_weather(args[city])# 晴天25°Cresponse2client.chat.completions.create(modelturing/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_callsLLM 的工具调用请求不然 LLM 不知道这是工具返回的结果tool消息工具执行结果今天的一句话总结Function Calling 的本质是一次请求→执行→再请求的两次调用过程。LLM 决定调什么工具你的代码执行工具结果还给 LLM 生成回答。这是 Agent 循环的雏形。下一篇预告第13天多工具编排——给 LLM 三个工具看它能不能自动选对。本系列记录一位Android开发者转行AI Agent的完整学习过程欢迎关注交流。