LangChain开发框架(五)-- LangChain agent调用,大模型入门到精通,收藏这篇就足够了!

部署运行你感兴趣的模型镜像

之前介绍了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 的核心功能是管理代理的执行流程。它通过以下步骤实现这一目标:
  1. 接收输入:从用户或系统接收初始输入。
  2. 调用代理:将输入传递给代理,代理根据其内部逻辑生成行动计划。
  3. 执行操作:根据代理的指示,调用相应的工具执行操作。
  4. 观察结果:获取工具的输出,并将其反馈给代理。
  5. 决策下一步:代理根据新的信息决定是否继续执行操作,直到满足终止条件。

这种流程使得 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 中的三种响应模式,如下

  1. Function calling 串联模式(Serial Mode)

    在这种模式下,外部工具的调用是顺序进行的。模型会依次调用多个工具,每个工具的输入和输出会影响下一个工具的调用。具体流程如下:

  • 步骤:大模型依次调用 tool_1、tool_2,最后返回最终结果。
  • 适用场景:适用于需要一步步处理的任务,每个工具的输出作为下一个工具的输入。
  1. Function calling 并联模式(Parallel Mode)

    这种模式下,模型会并行调用多个工具。不同工具的调用是相互独立的,模型最终将收集所有工具的输出并进行合并。具体流程如下:

  • 步骤:模型同时调用 tool_1 和 tool_3,然后整合所有结果,返回最终的响应。
  • 适用场景:适用于需要同时从多个工具获取信息并整合的任务,例如并行查询不同数据源
  1. 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 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

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

img

L3阶段:跃迁篇丨Agent智能体架构设计

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

img

L4阶段:精进篇丨模型微调与私有化部署

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

img

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

img
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

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

您可能感兴趣的与本文相关的镜像

LangFlow

LangFlow

AI应用
Agent编排

LangFlow 是一款低代码、可视化的 AI 应用构建工具,用于快速搭建和实验 LangChain 流水线

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值