

智能体(Agent)是一种能够感知环境、制定决策并采取行动以实现特定目标的AI系统,具有意图理解、长短期记忆、决策规划、采取行动、工具调用等基本能力。
简单地说,智能体通过工具调用将大语言模型的“思考”能力与外部系统、工具、API的“行动”能力结合,实现从需求理解到任务执行的闭环。这一机制使智能体能突破自身知识局限,为用户提供更多复杂的智能服务。智能体系统与大模型的区别是:一般情况下,大模型只说不做,而智能体系统不只说,还会做,帮助用户完成更加复杂的任务。
本文对智能体系统背后的核心技术之一进行简述—— Function Calling,通过引入外部工具,使得大模型能与外部世界进行交互,从而完成更加复杂的任务。

PART 01

如上图所示,在基于大语言模型(也可以是多模态大模型)的智能体系统中,大模型的充当着智能体的“大脑”的角色,同时还有三个关键部分:
-
规划(Planning) : 智能体会把大型任务分解为若干个子任务,并规划执行任务的流程;智能体会对任务执行的过程进行思考和反思,从而决定是继续执行任务,或判断任务完结并终止运行。 -
记忆(Memory): 具有长短期记忆能力。短期记忆,是指在执行任务的过程中的上下文,会在子任务的执行过程产生和暂存,在任务完结后被清空。长期记忆是长时间保留的信息,一般是指外部知识库,如用向量数据库来存储和检索。 -
工具使用(Tool use):为智能体配备本地工具、API或者MCP服务,比如:计算器、搜索工具、代码执行器、数据库查询工具、地图服务等。有了这些工具和API服务,智能体就可以与外部的世界进行交互,解决更实际复杂的问题。
PART 02

使用 Agent + Function Call 机制的核心价值包括:





1、选择工具
由于问题是关于实时新闻的,先打开浏览器工具;
2、提取参数
用浏览器输入框输入:“上周通义大模型团队又新出了什么模型?”;
3、运行工具
浏览器返回了一些网页,如“Qwen3-Max-Preview 发布核心介绍: 相较于2.5系列,新版本在中英文理解、复杂指令遵循、工具调用等维度实现了显著增强,同时大幅减少了知识幻觉,让模型更智能、更可靠。”等;
4、将工具的输出提供给大模型
将网页内容输入到大模型中:“这是查询到的信息:Qwen3-Max-Preview 发布,相较于2.5系列,新模型在中英文理解、复杂指令遵循、工具调用等维度实现了显著增强,同时大幅减少了知识幻觉,让模型更智能、更可靠。请根据以上内容回答。


PART 03

Function Calling的代码示例:

from openai import OpenAIfrom datetime import datetimeimport jsonimport osimport random# 指向本地部署的vLLM服务client = OpenAI(api_key="EMPTY",base_url="http://localhost:8000/v1",)# 定义工具列表,模型在选择使用哪个工具时会参考工具的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"],},},},]# 模拟天气查询工具。返回结果示例:“成都今天是晴天。”def get_current_weather(arguments):# 定义备选的天气条件列表weather_conditions = ["晴天", "多云", "雨天"]# 随机选择一个天气条件random_weather = random.choice(weather_conditions)# 从JSON中提取位置信息location = arguments["location"]# 返回格式化的天气信息return f"{location}今天是{random_weather}。"# 查询当前时间的工具。返回结果示例:“当前时间:2025-09-07 17:15:18。“def get_current_time():# 获取当前日期和时间current_datetime = datetime.now()# 格式化当前日期和时间formatted_time = current_datetime.strftime("%Y-%m-%d %H:%M:%S")# 返回格式化后的当前时间return f"当前时间:{formatted_time}。"# 封装模型响应函数def get_response(messages):completion = client.chat.completions.create(model="qwen-max",messages=messages,tools=tools,)return completion# 主流程函数(多轮对话 + 工具调用)def call_with_messages():print("n")messages = [{"content": input("请输入:"), # 提问示例:"现在几点了?" "一个小时后几点" "成都天气如何?""role": "user",}]print("-" * 60)# 模型的第一轮调用i = 1first_response = get_response(messages)assistant_output = first_response.choices[0].messageprint(f"n第{i}轮大模型输出信息:{first_response}n")if assistant_output.content is None: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":# 提取位置参数信息arguments = json.loads(assistant_output.tool_calls[0].function.arguments)tool_info["content"] = get_current_weather(arguments)# 如果判断需要调用查询时间工具,则运行查询时间工具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].messageif assistant_output.content is None:assistant_output.content = ""messages.append(assistant_output)i += 1print(f"第{i}轮大模型输出信息:{assistant_output}n")print(f"最终答案:{assistant_output.content}")if __name__ == "__main__":call_with_messages()
PART 04
智谱清言,https://chatglm.cn
字节跳动,Coze,https://www.coze.cn/home
字节跳动,扣子空间,https://space.coze.cn
百度文心智能体平台,https://agents.baidu.com
天工智能体平台,https://www.tiangong.cn
问小白,https://www.wenxiaobai.com
dify,https://cloud.dify.ai
Link AI,https://link-ai.tech/portal
n8n,https://n8n.io
FastGPT,https://fastgpt.cn
PART 05
-
阿里云计算,阿里云百炼,https://bailian.console.aliyun.com
-
阿里云开发者,面向多工具任务调度的两种路径:MCP vs Agent + Function call -
阿里云开发者,为什么一定要做Agent智能体? -
阿里云开发者,如何构建和调优高可用性的Agent?浅谈阿里云服务领域Agent构建的方法论
-
机器之心,复旦NLP团队发布80页大模型Agent综述,一文纵览AI智能体的现状与未来 -
腾讯技术工程,一文带你了解大模型——智能体(Agent)


评论列表 (0条):
加载更多评论 Loading...