之前介绍了LangChain调用外部工具的基本流程,但是在我们真实使用中,如果按照chains的方法做编排时,会发现整个流程是人为创建好的,不够灵活;如果我问的问题不需要使用工具,或者使用多次等情况,自定义的chain就不能解决,或者说,如果要解决就会变得很复杂,所以今天我们来探讨一种更加方便的调用方式。
一、Function calling基本原理
Function calling 作为现代大模型应用中的核心机制之一,是大模型能够与外部世界交互的关键。没有这个功能,大模型的能力将仅限于自然语言处理,无法与外部数据或工具进行交互,甚至无法完成如查询天气这类基本任务。事实上,大模型本身并不具备直接调用外部工具的能力,因此 Function calling 机制应运而生,它通过设计外部函数作为桥梁,允许大模型间接地与外部工具进行通信。
1.1 Function calling 过程
Function calling 的基本流程涉及到创建一个外部函数(function),该函数作为大模型与外部工具之间的中介。大模型发送请求,函数接收并转发请求至外部工具,最后将外部工具的响应返回给大模型。
例子:查询天气
在查询天气的场景中,大模型会调用一个外部工具函数(如天气 API),通过 function calling 机制将天气查询请求发送给该工具,工具再返回天气数据,模型将这些数据用来生成最终的响应。

在这里插入图片描述
1.2 Function calling 执行流程
完整的 Function calling 执行流程如下图所示。该流程展示了从用户输入查询、模型调用外部函数、到返回结果的整个过程。首先,用户输入查询,模型识别到需要使用外部工具(如天气查询),然后通过 Function calling 机制向外部工具发送请求,最终返回所需的结果。
1.3 Function calling 的重要性
Function calling 是大模型能否成为智能体的决定性因素。通过它,模型不仅能完成对话任务,还可以利用外部资源,如天气查询、股市数据、API 调用等,从而提升自身能力和实用性。
而完整的一次Function calling执行流程如下:

在这里插入图片描述
1.4 快速构建工具调用代理
在 LangChain 中,构建与执行 Function calling 任务非常简便,以下是具体实现过程。
我们可以使用 LangChain 提供的 create_tool_calling_agent 方法快速构建工具调用代理。通过代理,模型可以轻松访问和调用外部工具。下面是如何使用 AgentExecutor 来执行代理的示例代码。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.agents import create_tool_calling_agent, tool
from langchain_core.prompts import ChatPromptTemplate
#定义工具
tools = [get_weather]
# 构建提示模版
prompt = ChatPromptTemplate.from_messages(
[
("system", "你是天气助手,请根据用户的问题,给出相应的天气信息"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)
# 初始化模型
model = init_chat_model("deepseek-chat", model_provider="deepseek")
# 直接使用`create_tool_calling_agent`创建代理
agent = create_tool_calling_agent(model, tools, prompt)
1.5 使用代理执行工具调用
通过 AgentExecutor,我们可以轻松地执行工具调用代理,并获取工具的响应。
- 在 LangChain 中,AgentExecutor 是一个关键组件,负责执行代理(Agent)所规划的操作,并协调与外部工具的交互。它通过封装复杂的执行逻辑,使得开发者能够专注于业务逻辑的实现,而无需关注底层的执行流程管理细节。
- AgentExecutor 的核心功能是管理代理的执行流程。它通过以下步骤实现这一目标:
- 接收输入:从用户或系统接收初始输入。
- 调用代理:将输入传递给代理,代理根据其内部逻辑生成行动计划。
- 执行操作:根据代理的指示,调用相应的工具执行操作。
- 观察结果:获取工具的输出,并将其反馈给代理。
- 决策下一步:代理根据新的信息决定是否继续执行操作,直到满足终止条件。
这种流程使得 AgentExecutor 能够实现复杂的任务处理,如多步骤操作、条件判断和循环执行等。
以下是调用代理的代码:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
response = agent_executor.invoke({"input": "请问今天北京的天气怎么样?"})
print(response)
在此过程中,AgentExecutor 会自动处理工具调用,并将返回的数据格式化为可读响应。以下是查询天气后的响应示例:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
[1m> Entering new AgentExecutor chain...[0m
[32;1m[1;3m
Invoking: `get_weather` with `{'loc': 'Beijing'}`
responded: 我来帮您查询今天北京的天气情况。
[0m[36;1m[1;3m{"coord": {"lon": 116.3972, "lat": 39.9075}, "weather": [{"id": 800, "main": "Clear", "description": "\u6674", "icon": "01n"}], "base": "stations", "main": {"temp": 1.94, "feels_like": -2.32, "temp_min": 1.94, "temp_max": 1.94, "pressure": 1028, "humidity": 10, "sea_level": 1028, "grnd_level": 1023}, "visibility": 10000, "wind": {"speed": 4.7, "deg": 326, "gust": 11.38}, "clouds": {"all": 0}, "dt": 1761489105, "sys": {"type": 1, "id": 9609, "country": "CN", "sunrise": 1761431767, "sunset": 1761470426}, "timezone": 28800, "id": 1816670, "name": "Beijing", "cod": 200}[0m[32;1m[1;3m根据查询结果,今天北京的天气情况如下:
**天气状况**:晴朗 ☀️
**当前温度**:1.94°C
**体感温度**:-2.32°C(感觉比实际温度更冷)
**湿度**:10%(非常干燥)
**气压**:1028 hPa
**风速**:4.7 m/s,西北风
**能见度**:10000米(非常好)
**温馨提示**:
- 今天北京天气晴朗,但温度较低,体感温度在零下
- 建议穿着保暖衣物,注意防寒
- 由于湿度较低,请注意保湿和补水
- 风速较大,外出时注意防风保暖
总体来说,今天北京是个晴朗但寒冷的天气,适合外出但要做好保暖措施。[0m
[1m> Finished chain.[0m
{'input': '请问今天北京的天气怎么样?', 'output': '根据查询结果,今天北京的天气情况如下:\n\n**天气状况**:晴朗 ☀️\n**当前温度**:1.94°C\n**体感温度**:-2.32°C(感觉比实际温度更冷)\n**湿度**:10%(非常干燥)\n**气压**:1028 hPa\n**风速**:4.7 m/s,西北风\n**能见度**:10000米(非常好)\n\n**温馨提示**:\n- 今天北京天气晴朗,但温度较低,体感温度在零下\n- 建议穿着保暖衣物,注意防寒\n- 由于湿度较低,请注意保湿和补水\n- 风速较大,外出时注意防风保暖\n\n总体来说,今天北京是个晴朗但寒冷的天气,适合外出但要做好保暖措施。'}
在您提供的日志中,AgentExecutor 执行了一个查询北京天气的任务,并返回了结构化的天气信息。以下是对该执行过程的详细解析:
1.5.1 执行流程
开始执行:
ounter(line
> Entering new AgentExecutor chain...
这表示 AgentExecutor 开始执行新的任务链,准备处理用户输入。
调用工具:
ounter(line
Invoking: `get_weather` with `{'loc': 'Beijing'}`
AgentExecutor 调用名为 get_weather 的工具,并传递参数 {'loc': 'Beijing'},即查询北京的天气。
工具响应:
ounter(line
responded: 我来帮您查询今天北京的天气情况。
工具返回了一个初步的响应,表示正在查询天气信息。
1.5.2 工具返回的天气数据(JSON 格式)
工具返回了一个包含详细天气信息的 JSON 对象:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
{
"coord": {"lon": 116.3972, "lat": 39.9075},
"weather": [{"id": 800, "main": "Clear", "description": "晴", "icon": "01n"}],
"main": {
"temp": 1.94,
"feels_like": -2.32,
"temp_min": 1.94,
"temp_max": 1.94,
"pressure": 1028,
"humidity": 10,
"sea_level": 1028,
"grnd_level": 1023
},
"visibility": 10000,
"wind": {"speed": 4.7, "deg": 326, "gust": 11.38},
"clouds": {"all": 0},
"dt": 1761489105,
"sys": {
"type": 1,
"id": 9609,
"country": "CN",
"sunrise": 1761431767,
"sunset": 1761470426
},
"timezone": 28800,
"id": 1816670,
"name": "Beijing",
"cod": 200
}
该 JSON 数据包含了以下关键信息:
- 坐标信息:
coord字段提供了北京的经纬度。 - 天气状况:
weather字段描述了天气状况(晴)。 - 温度信息:
main字段提供了当前温度、体感温度、最低和最高温度等数据。 - 湿度和气压: 同样在
main字段中,提供了湿度和气压信息。 - 风速和风向:
wind字段描述了风速、风向和阵风信息。 - 能见度:
visibility字段提供了能见度数据。 - 云量:
clouds字段描述了云量。 - 日出和日落时间:
sys字段提供了日出和日落的时间戳。
1.5.3 格式化的天气响应
基于上述 JSON 数据,系统生成了以下格式化的天气响应:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
根据查询结果,今天北京的天气情况如下:
**天气状况**:晴朗 ☀️
**当前温度**:1.94°C
**体感温度**:-2.32°C(感觉比实际温度更冷)
**湿度**:10%(非常干燥)
**气压**:1028 hPa
**风速**:4.7 m/s,西北风
**能见度**:10000米(非常好)
**温馨提示**:
- 今天北京天气晴朗,但温度较低,体感温度在零下
- 建议穿着保暖衣物,注意防寒
- 由于湿度较低,请注意保湿和补水
- 风速较大,外出时注意防风保暖
总体来说,今天北京是个晴朗但寒冷的天气,适合外出但要做好保暖措施。
该响应将原始的天气数据转化为用户友好的格式,便于理解和使用。
1.5.4 完整的执行日志
ounter(lineounter(line
> Finished chain.
{'input': '请问今天北京的天气怎么样?', 'output': '根据查询结果,今天北京的天气情况如下:\n\n**天气状况**:晴朗 ☀️\n**当前温度**:1.94°C\n**体感温度**:-2.32°C(感觉比实际温度更冷)\n**湿度**:10%(非常干燥)\n**气压**:1028 hPa\n**风速**:4.7 m/s,西北风\n**能见度**:10000米(非常好)\n\n**温馨提示**:\n- 今天北京天气晴朗,但温度较低,体感温度在零下\n- 建议穿着保暖衣物,注意防寒\n- 由于湿度较低,请注意保湿和补水\n- 风速较大,外出时注意防风保暖\n\n总体来说,今天北京是个晴朗但寒冷的天气,适合外出但要做好保暖措施。'}
该日志记录了整个执行过程,包括输入、工具调用、工具响应和最终输出。
1.5.5 结论
通过 AgentExecutor 的执行,我们能够实现以下目标:
- 自动化工具调用: 系统自动调用外部工具获取所需信息。
- 数据处理与格式化: 将原始数据转化为结构化和用户友好的格式。
- 完整的执行跟踪: 记录整个执行过程,便于调试和优化。
这种方式使得构建复杂的智能体应用变得更加高效和可靠。
二、多agent编排
2.1 LangChain 中Agents模块的整体架构设计
在LangChain 中Agents模块的整体架构设计。如下所示:
在Agents的内部结构。每个Agent组件一般会由语言模型 + 提示 + 输出解析器构成,它会作为Agents的大脑去处理用户的输入。Agent能够处理的输入主要来源于三个方面:input代表用户的原始输入,Model Response指的是模型对某一个子任务的响应输出,而History则能携带上下文的信息。其输出部分,则链接到实际的工具库,需要调用哪些工具,将由经过Agent模块后拆分的子任务来决定。 而我们知道,大模型调用外部函数会分为两个过程:识别工具和实际执行。在Message -> Agent -> Toolkits 这个流程中,负责的是将子任务拆解,然后根据这些子任务在工具库中找到相应的工具,提取工具名称及所需参数,这个过程可以视作一种“静态”的执行流程。而将这些决策转化为实际行动的工作,则会交给AgentExecutor。 所以综上需要理解的是:在LangChain的Agents实际架构中,Agent的角色是接收输入并决定采取的操作,但它本身并不直接执行这些操作。这一任务是由AgentExecutor来完成的。将Agent(决策大脑)与AgentExecutor(执行操作的Runtime)结合使用,才构成了完整的Agents(智能体),其中AgentExecutor负责调用代理并执行指定的工具,以此来实现整个智能体的功能。 这也就是为什么create_tool_calling_agent需要通过AgentExecutor才能够实际运行的原因。当然,在这种模式下,AgentExecutor的内部已经自动处理好了关于我们工具调用的所有逻辑,其中包含串行和并行工具调用的两种常用模式。
2.2 Function Calling 中的三种响应模
DeepSeek Function Calling 中的三种响应模式,如下
-
Function calling 串联模式(Serial Mode)
在这种模式下,外部工具的调用是顺序进行的。模型会依次调用多个工具,每个工具的输入和输出会影响下一个工具的调用。具体流程如下:
- 步骤:大模型依次调用 tool_1、tool_2,最后返回最终结果。
- 适用场景:适用于需要一步步处理的任务,每个工具的输出作为下一个工具的输入。
-
Function calling 并联模式(Parallel Mode)
这种模式下,模型会并行调用多个工具。不同工具的调用是相互独立的,模型最终将收集所有工具的输出并进行合并。具体流程如下:
- 步骤:模型同时调用 tool_1 和 tool_3,然后整合所有结果,返回最终的响应。
- 适用场景:适用于需要同时从多个工具获取信息并整合的任务,例如并行查询不同数据源
-
Function calling 自动 Debug 模式(Auto Debug Mode)
在这种模式下,模型不仅调用工具,还能自动检测并修复问题。如果工具调用发生错误,系统会自动触发调试过程并返回解决方案。具体流程如下:
- 步骤:当模型调用 tool_1 发生错误时,系统会自动检测并返回问题(Bug)和解决方案(Solution),然后模型重新进行处理。
- 适用场景:适用于需要自动化故障排除和调试的场景,尤其是在调用外部工具时可能发生错误的情况下。
2.3 多工具并联调用
在大模型中,并行工具调用指的是在大模型调用外部工具时,可以在单次交互过程中可以同时调用多个工具,并行执行以解决用户的问题。如下图所示:
而在create_tool_calling_agent中,已经自动处理了并行工具调用的处理逻辑,并不需要我们在手动处理,比如接下来测试一些复杂的问题:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.agents import create_tool_calling_agent, tool
from langchain_core.prompts import ChatPromptTemplate
#定义工具
tools = [get_weather]
# 构建提示模版
prompt = ChatPromptTemplate.from_messages(
[
("system", "你是天气助手,请根据用户的问题,给出相应的天气信息"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)
# 初始化模型
model = init_chat_model("deepseek-chat", model_provider="deepseek")
# 直接使用`create_tool_calling_agent`创建代理
agent = create_tool_calling_agent(model, tools, prompt)
这里我们在提出的问题中,尝试让大模型同时查询北京和上海两个城市的天气并汇总结果。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
response = agent_executor.invoke({"input": "请问今天北京和杭州的天气怎么样,哪个城市更热?"})
print(response)
[1m> Entering new AgentExecutor chain...[0m
[32;1m[1;3m
Invoking: `get_weather` with `{'loc': 'Beijing'}`
responded: 我来帮您查询北京和杭州的天气情况,然后比较哪个城市更热。
[0m[36;1m[1;3m{"coord": {"lon": 116.3972, "lat": 39.9075}, "weather": [{"id": 800, "main": "Clear", "description": "\u6674", "icon": "01n"}], "base": "stations", "main": {"temp": 1.94, "feels_like": -2.32, "temp_min": 1.94, "temp_max": 1.94, "pressure": 1028, "humidity": 10, "sea_level": 1028, "grnd_level": 1023}, "visibility": 10000, "wind": {"speed": 4.7, "deg": 326, "gust": 11.38}, "clouds": {"all": 0}, "dt": 1761489105, "sys": {"type": 1, "id": 9609, "country": "CN", "sunrise": 1761431767, "sunset": 1761470426}, "timezone": 28800, "id": 1816670, "name": "Beijing", "cod": 200}[0m[32;1m[1;3m
Invoking: `get_weather` with `{'loc': 'Hangzhou'}`
responded: 我来帮您查询北京和杭州的天气情况,然后比较哪个城市更热。
[0m[36;1m[1;3m{"coord": {"lon": 120.1614, "lat": 30.2937}, "weather": [{"id": 804, "main": "Clouds", "description": "\u9634\uff0c\u591a\u4e91", "icon": "04n"}], "base": "stations", "main": {"temp": 15.95, "feels_like": 15.72, "temp_min": 15.95, "temp_max": 15.95, "pressure": 1025, "humidity": 81, "sea_level": 1025, "grnd_level": 1023}, "visibility": 10000, "wind": {"speed": 1.74, "deg": 322, "gust": 4.06}, "clouds": {"all": 99}, "dt": 1761489242, "sys": {"type": 1, "id": 9651, "country": "CN", "sunrise": 1761430124, "sunset": 1761470262}, "timezone": 28800, "id": 1808926, "name": "Hangzhou", "cod": 200}[0m[32;1m[1;3m根据查询结果,我来为您分析两个城市的天气情况:
**北京天气:**
- 天气状况:晴朗
- 温度:1.94°C
- 体感温度:-2.32°C
- 湿度:10%
- 风速:4.7 m/s
**杭州天气:**
- 天气状况:阴天,多云
- 温度:15.95°C
- 体感温度:15.72°C
- 湿度:81%
- 风速:1.74 m/s
**温度比较:**
杭州的温度(15.95°C)明显高于北京的温度(1.94°C),**杭州比北京更热**,温差达到14°C左右。
从体感温度来看,杭州的15.72°C也比北京的-2.32°C要暖和很多。杭州的湿度较高,天气多云,而北京则是晴朗但寒冷的天气。[0m
[1m> Finished chain.[0m
{'input': '请问今天北京和杭州的天气怎么样,哪个城市更热?', 'output': '根据查询结果,我来为您分析两个城市的天气情况:\n\n**北京天气:**\n- 天气状况:晴朗\n- 温度:1.94°C\n- 体感温度:-2.32°C\n- 湿度:10%\n- 风速:4.7 m/s\n\n**杭州天气:**\n- 天气状况:阴天,多云\n- 温度:15.95°C\n- 体感温度:15.72°C\n- 湿度:81%\n- 风速:1.74 m/s\n\n**温度比较:**\n杭州的温度(15.95°C)明显高于北京的温度(1.94°C),**杭州比北京更热**,温差达到14°C左右。\n\n从体感温度来看,杭州的15.72°C也比北京的-2.32°C要暖和很多。杭州的湿度较高,天气多云,而北京则是晴朗但寒冷的天气。'}
从这个过程中可以明显的看出,一次性发起了同一个外部函数的两次调用请求,并依次获得了北京和杭州两个城市的天气。这就是一次标准的parallel_function_call。
2.4 多工具串联调用
接下来继续尝试进行多工具串联调用测试:
此时我们再定义一个write_file函数,用于将“文本写入本地”:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
import os
@tool
def write_to_markdown(content: str) -> str:
"""
将指定内容保存为 Markdown 格式的文件。
:param content: 要保存的文本内容。
:param filename: 保存的文件名,默认为 'output.md'。
:return: 返回保存结果的消息。
"""
filename = "./output.md"
try:
# 确保文件名以 .md 结尾
if not filename.endswith(".md"):
filename += ".md"
# 写入文件
with open(filename, 'w', encoding='utf-8') as file:
file.write(content)
return f"内容已成功保存为 {filename} 文件。"
except Exception as e:
return f"保存文件时发生错误:{e}"
然后在tools列表中直接添加write_file工具,并修改提示模版,添加write_file工具的使用场景。代码如下所示:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from langchain.agents import AgentExecutor, create_tool_calling_agent, tool
from langchain_core.prompts import ChatPromptTemplate
tools = [get_weather, write_to_markdown]
prompt = ChatPromptTemplate.from_messages(
[
("system", "你是天气助手,请根据用户的问题,给出相应的天气信息,如果用户需要将查询结果写入文件,请使用write_file工具"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)
# 初始化模型
model = init_chat_model("deepseek-chat", model_provider="deepseek")
agent = create_tool_calling_agent(model, tools, prompt)
接下来尝试运行:
ounter(lineounter(lineounter(lineounter(lineounter(line
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "查一下北京和杭州现在的温度,并将结果写入本地的文件中。"})
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
[1m> Entering new AgentExecutor chain...[0m
[32;1m[1;3m
Invoking: `get_weather` with `{'loc': 'Beijing'}`
responded: 我来帮您查询北京和杭州的温度,并将结果写入文件。
[0m[36;1m[1;3m{"coord": {"lon": 116.3972, "lat": 39.9075}, "weather": [{"id": 800, "main": "Clear", "description": "\u6674", "icon": "01n"}], "base": "stations", "main": {"temp": 1.94, "feels_like": -2.32, "temp_min": 1.94, "temp_max": 1.94, "pressure": 1028, "humidity": 10, "sea_level": 1028, "grnd_level": 1023}, "visibility": 10000, "wind": {"speed": 4.7, "deg": 326, "gust": 11.38}, "clouds": {"all": 0}, "dt": 1761489105, "sys": {"type": 1, "id": 9609, "country": "CN", "sunrise": 1761431767, "sunset": 1761470426}, "timezone": 28800, "id": 1816670, "name": "Beijing", "cod": 200}[0m[32;1m[1;3m
Invoking: `get_weather` with `{'loc': 'Hangzhou'}`
responded: 我来帮您查询北京和杭州的温度,并将结果写入文件。
[0m[36;1m[1;3m{"coord": {"lon": 120.1614, "lat": 30.2937}, "weather": [{"id": 804, "main": "Clouds", "description": "\u9634\uff0c\u591a\u4e91", "icon": "04n"}], "base": "stations", "main": {"temp": 15.95, "feels_like": 15.72, "temp_min": 15.95, "temp_max": 15.95, "pressure": 1025, "humidity": 81, "sea_level": 1025, "grnd_level": 1023}, "visibility": 10000, "wind": {"speed": 1.74, "deg": 322, "gust": 4.06}, "clouds": {"all": 99}, "dt": 1761489242, "sys": {"type": 1, "id": 9651, "country": "CN", "sunrise": 1761430124, "sunset": 1761470262}, "timezone": 28800, "id": 1808926, "name": "Hangzhou", "cod": 200}[0m[32;1m[1;3m
Invoking: `write_to_markdown` with `{'content': '# 北京和杭州当前温度查询结果\n\n## 北京当前天气\n- **城市:** 北京 (Beijing)\n- **当前温度:** 1.94°C\n- **体感温度:** -2.32°C\n- **天气状况:** 晴朗\n- **最低温度:** 1.94°C\n- **最高温度:** 1.94°C\n- **湿度:** 10%\n- **气压:** 1028 hPa\n- **风速:** 4.7 m/s\n- **能见度:** 10000米\n\n## 杭州当前天气\n- **城市:** 杭州 (Hangzhou)\n- **当前温度:** 15.95°C\n- **体感温度:** 15.72°C\n- **天气状况:** 阴,多云\n- **最低温度:** 15.95°C\n- **最高温度:** 15.95°C\n- **湿度:** 81%\n- **气压:** 1025 hPa\n- **风速:** 1.74 m/s\n- **能见度:** 10000米\n\n## 总结\n北京当前温度较低,仅为1.94°C,天气晴朗,体感比实际温度更冷。\n杭州当前温度较高,为15.95°C,天气多云,湿度较高。\n\n*查询时间:2025年1月31日*'}`
responded: 现在我将查询结果写入文件中:
[0m[33;1m[1;3m内容已成功保存为 ./output.md 文件。[0m[32;1m[1;3m我已经成功查询了北京和杭州的当前温度,并将详细结果写入到本地文件中。
**查询结果摘要:**
- **北京:** 1.94°C,晴朗,体感温度-2.32°C
- **杭州:** 15.95°C,阴天多云,体感温度15.72°C
详细天气信息已保存到 `output.md` 文件中,包含了温度、湿度、气压、风速等完整的天气数据。您可以在本地查看该文件获取更详细的信息。[0m
[1m> Finished chain.[0m
通过中间过程信息的打印,我们能够看到在一次交互过程中依次调用的get_weather查询到北京和杭州的天气,然后又将结果写入到本地的output.md文件中。这就是一个非常典型的串行工具调用的流程,如下图所示:
想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享!
👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势
想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI:
1. 100+本大模型方向电子书

2. 26 份行业研究报告:覆盖多领域实践与趋势
报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

- 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
- 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
- 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
- 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。
3. 600+套技术大会 PPT:听行业大咖讲实战
PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

- 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
- 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
- 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
- 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。
二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走
想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位
面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析:

2. 102 道 AI 大模型真题:直击大模型核心考点
针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题
专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:

三、路线必明: AI 大模型学习路线图,1 张图理清核心内容
刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代
L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊
L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计
L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

L5阶段:专题集丨特训篇 【录播课】

四、资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!
422

被折叠的 条评论
为什么被折叠?



