

智能体(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 OpenAI
from datetime import datetime
import json
import os
import random
# 指向本地部署的vLLM服务
client = OpenAI(
api_key="EMPTY",
base_url="http://localhost:8000/v1",
)
# 定义工具列表,模型在选择使用哪个工具时会参考工具的name和description
tools = [
# 工具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 = 1
first_response = get_response(messages)
assistant_output = first_response.choices[0].message
print(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].message
if assistant_output.content is None:
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()
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...