LLM Function Calling2023 年 6 月OpenAI 推出 Function Calling API 功能至今为止 Function Calling 已经是 LLM Provider 的标配。可以调用外部工具成为了智能体的关键特征。Function Calling 是 ReAct Tools Routing 的具体实现。使得 LLM App 可以定义自己的 Tools list然后让 LLM 认识这些 Tools list继而 LLM 可以根据 User Query 找到合适的 Tool 用于后续执行。但 ReAct 和 Function Calling 有着本质的区别如下图所示。执行流程Function Calling API 的执行流程如下所示app 维护 Message Context 发出 User Query 以及 app 所提供的 Tools。LLM 返回处理 Query 所需要用到的 Tools 和 Arguments。app 执行 Tools 或获得 Results。app 将 Tool Results 注入到 Message Context 中再次发送给 LLM。LLM 根据 User Query 和 Tool Results 最终返回 Response 给 app。代码示例这里使用的是 DeepSeek Function Calling API文档见https://api-docs.deepseek.com/zh-cn/guides/function_callingimport os from dotenv import load_dotenv load_dotenv(overrideTrue) import json from openai import OpenAI # 定义 tools 工具列表。 # 每个 tool 中都具有 function 类型的字典。 # 每个 function 中都有函数具体的 name、description 和 parmameters。 # name 和 description 非常重要是 LLM 理解 function 作用的关键。 # parameters 定义了 function 能够接收的参数列表包括 type 类型、properties 属性和 required 必选参数列表。 tools [ { type: function, function: { name: get_weather, description: Get weather of a location, the user should supply a location first., parameters: { type: object, properties: { location: { type: string, description: The city and state, e.g. San Francisco, CA, } }, required: [location] }, } }, { type: function, function: { name: get_pizza_info, description: Get name and price of a pizza of the restaurant, parameters: { type: object, properties: { pizza_name: { type: string, description: The name of the pizza, e.g. Salami, } }, required: [pizza_name] }, } }, ] DEEPSEEK_API_KEY os.getenv(DEEPSEEK_API_KEY) client OpenAI(api_keyDEEPSEEK_API_KEY, base_urlhttps://api.deepseek.com) def send_messages(messages): response client.chat.completions.create( modeldeepseek-reasoner, # function calling 场景中建议使用推理型 LLM。 messagesmessages, toolstools # 传递 tools 列表表示使用 function calling API。 ) return response.choices[0].message def get_pizza_info(pizza_name: str): pizza_info { name: pizza_name, price: 10.99, } return json.dumps(pizza_info) # 一、使用天气查询 tool。 # 1. app 询问问题 messages [{role: user, content: Whats the weather in Beijing, China?}] message1 send_messages(messages) print(fUser\t {message1.content}) # 2. LLM 返回解答问题所需要使用的 tool tool message1.tool_calls[0] # 3. app 调用 LLM 返回的 tool 并获得 result 结果 tool_result 24℃ # mock get_weather function # 4. 将 tool result 注入 context并且要求与 tool id 关联起来 messages.append(message1) messages.append({role: tool, tool_call_id: tool.id, content: tool_result}) # 5. 由 LLM 最终生成 resp message2 send_messages(messages) print(fModel\t {message2.content}) # 二、使用价格查询 tool。 # 1. app 询问问题 messages [{role: user, content: How much does pizza salami cost?}] message3 send_messages(messages) print(fUser\t {message3.content}) # 2. LLM 返回解答问题所需要使用的 tool包括 function name、arguments 等信息 tool message3.tool_calls[0] pizza_name json.loads(tool.function.arguments).get(pizza_name) # 3. app 调用 LLM 返回的 tool 并获得 result 结果 function_response get_pizza_info(pizza_namepizza_name) # 4. 将 tool result 注入 context并且要求与 tool id 关联起来 messages.append(message3) messages.append({role: tool, tool_call_id: tool.id, content: function_response}) # 5. 由 LLM 最终生成 resp message4 send_messages(messages) print(fModel\t {message4.content})tool_choice 参数更细节的还可以在调用 Function Calling API 的时候设置 tool_choice 参数它指示了 LLM 选择 Tools 的策略。具有以下 3 中策略。auto 自动模式默认模型会根据用户的输入内容自行判断是否需要调用函数。这是最灵活的设置方式适合通用型助手应用。const response await openai.chat.completions.create({ model: gpt-4-turbo, messages: [ { role: user, content: 今天北京的天气怎么样 } ], tools: [], tool_choice: auto });强制指定函数模式将tool_choice设置为一个包含函数名称的对象。这种模式会强制模型调用指定的函数无论用户输入内容是什么。适用于特定功能的工作流程。const response await openai.chat.completions.create({ model: gpt-4-turbo, messages: [ { role: user, content: 我想了解天气情况 } ], tools: [], tool_choice: { type: function, function: { name: get_weather } } });none 禁用模式模型会被禁止调用任何函数只生成文本回复。即使您在请求中定义了函数模型也不会调用它们。适用于纯知识问答。const response await openai.chat.completions.create({ model: gpt-4-turbo, messages: [ { role: user, content: 今天北京的天气怎么样 } ], tools: [], tool_choice: none });应用建议函数设计原则明确的 func_name使用描述性强的函数名如 get_weather 比 get_data 更清晰。详细的 description为每个函数提供准确的描述帮助模型理解何时应该调用它。结构化的参数使用J SON Schema 定义清晰的参数结构和类型。合理的必填项只将真正必要的参数标记为 required。错误处理机制参数验证在实际函数中验证参数处理缺失或不符合要求的情况。优雅降级当函数执行失败时提供有意义的错误信息。重试机制对于网络请求等不稳定操作实现适当的重试逻辑。多轮对话优化设计保存函数结果将函数结果作为消息保存在对话历史中。tool_id 关联让 LLM 理解 Tools 的请求和执行结果。上下文管理有效管理对话历史长度保留关键信息。状态跟踪跟踪对话状态避免重复函数调用。LangChain Function Calling使用 bulid-in toolsLangChain 几乎是最早支持 OpenAI Function Calling 的框架并内置了非常多的实用工具开发者可以快速调用这些工具完成更加复杂工作流的开发。https://python.langchain.com/docs/integrations/tools/在这里插入图片描述使用 build-in tools 非常简单只需要安装包并引用即可。安装$ uv pip install langchain-experimentaltools 的具体示例可以查看官方文档以 Python REPL Tool 为例https://python.langchain.com/docs/integrations/tools/python/import os import time from dotenv import load_dotenv load_dotenv() openai_api_key os.getenv(DEEPSEEK_API_KEY) from langchain.chat_models import init_chat_model from langchain_core.tools import Tool from langchain_experimental.utilities import PythonREPL python_repl PythonREPL() tool Tool( namepython_repl, descriptionA Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with print(...)., funcpython_repl.run, ) model init_chat_model(modeldeepseek-chat, model_providerdeepseek) llm_with_tools model.bind_tools([tool]) response llm_with_tools.invoke(帮我用 python 计算 11 等于几) print(response)执行结果 response.content 我来帮你用Python计算11等于几。 response.additional_kwargs {tool_calls: [{id: call_00_4cLmKlfjSAPljlGwS5Rp5Hm2, function: {arguments: {__arg1: print(1 1)}, name: python_repl}, type: function, index: 0}], refusal: None}可见 LLM 返回的 AIMessage response 中的 additional_kwargs 记录了 LLM 返回的需要执行的 fun_name 和 arguments。后续 app 只需要执行即可。使用自定义 tools更多的场景中我们需要自定义大量的 Tools。LangChain 也提供了简洁的 tool 语法糖来定义一个 Tools极大地简化开发的复杂度。下面以自定义的从 OpenWeather API 获取实时天气数据工具为例。https://home.openweathermap.org/api_keys首先测试自定义 tool 是可用的例如import os import requests import json from dotenv import load_dotenv load_dotenv() def get_weather(local): 查询即时天气函数 :param local: 必要参数字符串类型用于表示查询天气的具体城市名称\ 注意中国的城市需要用对应城市的英文名称代替例如如果需要查询北京市天气则local参数需要输入Beijing :returnOpenWeather API查询即时天气的结果具体URL请求地址为https://api.openweathermap.org/data/2.5/weather\ 返回结果对象类型为解析之后的JSON格式对象并用字符串形式进行表示其中包含了全部重要的天气信息。 # Step1. 构建请求 url https://api.openweathermap.org/data/2.5/weather # Step2. 设置查询参数 params { q: local, appid: os.getenv(OPENWEATHER_API_KEY), # 输入API key units: metric, # 使用摄氏度而不是华氏度 lang:zh_cn # 输出语言为简体中文 } # Step3. 发送 GET 请求 response requests.get(url, paramsparams) # Step4. 解析响应 data response.json() return json.dumps(data) get_weather(Beijing)执行输出{coord: {lon: 116.3972, lat: 39.9075}, weather: [{id: 501, main: Rain, description: \\u4e2d\\u96e8, icon: 10d}], base: stations, main: {temp: 11.95, feels_like: 11.42, temp_min: 11.95, temp_max: 11.95, pressure: 1019, humidity: 85, sea_level: 1019, grnd_level: 1014}, visibility: 10000, wind: {speed: 1.58, deg: 172, gust: 1.57}, rain: {1h: 1.15}, clouds: {all: 100}, dt: 1760086305, sys: {country: CN, sunrise: 1760048346, sunset: 1760089412}, timezone: 28800, id: 1816670, name: Beijing, cod: 200}然后将自定义 tool 集成到 LangChain 中。import os import requests import json from dotenv import load_dotenv load_dotenv() openai_api_key os.getenv(DEEPSEEK_API_KEY) from langchain.chat_models import init_chat_model from langchain_core.tools import tool from langchain.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.output_parsers.openai_tools import JsonOutputKeyToolsParser # 自定义工具 tool def get_weather(local): 查询即时天气函数 :param local: 必要参数字符串类型用于表示查询天气的具体城市名称\ 注意中国的城市需要用对应城市的英文名称代替例如如果需要查询北京市天气则local参数需要输入Beijing :returnOpenWeather API查询即时天气的结果具体URL请求地址为https://api.openweathermap.org/data/2.5/weather\ 返回结果对象类型为解析之后的JSON格式对象并用字符串形式进行表示其中包含了全部重要的天气信息。 # Step1. 构建请求 url https://api.openweathermap.org/data/2.5/weather # Step2. 设置查询参数 params { q: local, appid: os.getenv(OPENWEATHER_API_KEY), # 输入API key units: metric, # 使用摄氏度而不是华氏度 lang:zh_cn # 输出语言为简体中文 } # Step3. 发送 GET 请求 response requests.get(url, paramsparams) # Step4. 解析响应 data response.json() return json.dumps(data) # 将自定义 tools 和 llm 进行绑定 model init_chat_model(modeldeepseek-chat, model_providerdeepseek) tools [get_weather] llm_with_tools model.bind_tools(tools) # 创建第一条 chain用于从 OpenWeather API 获取 local 的事实天气数据最终以 JSON 格式输出 parser JsonOutputKeyToolsParser(key_nameget_weather.name, first_tool_onlyTrue) get_weather_chain llm_with_tools | parser | get_weather # 创建第二条 chain用于将 JSON 输出转换为自然语言输出。 output_prompt PromptTemplate.from_template( 你将收到一段 JSON 格式的天气数据请用简洁自然的方式将其转述给用户。 以下是天气 JSON 数据 json {weather_json} 请将其转换为中文天气描述例如 “北京当前天气晴气温为 23°C湿度 58%风速 2.1 米/秒。” 只返回一句话描述不要其他说明或解释。 ) output_chain output_prompt | model | StrOutputParser() # 将 chain1 和 chain2 连接起来最终完成 tools 执行和输出。 full_chain get_weather_chain | output_chain response full_chain.invoke(请问北京今天的天气如何) print(response)执行输出北京当前有中雨气温约12°C体感温度11°C湿度85%风速1.58米/秒。Agent Tooling ToolCalling Agent AgentExecutor上文中我们采用了将 tools 和 model 进行 binding 的方式来实现 Function Calling但从代码可以看出之间需要开发者处理非常复杂 Tool Calling 和 Message Updating 逻辑显然不便于开发者快速构建一个高效的智能体应用。尤其在 LLM Provider 支持了越来越多种类的 Function Calling 特性的情况下下图以 DeepSeek 为例其支持 3 种典型的 Function Calling 推理模式。Function Calling 串联Function Calling 并联Function Calling 自动 debug对此LangChain 抽象了高级别的 Agent Tooling 概念由 ToolCalling Agent 和 Agent Executor 组成ToolCalling Agent通过 create_tool_calling_agent 接口创建一个专用于 ToolCalling 工具调用的 Agent 对象工具调用代理。AgentExecutor用于自动化地完成 Agent 的负责个 ToolCalling 执行流程并返回最终结果。Agent Tooling 使得开发者无需再编写繁杂的 Tool Calling 和 Message Updating 逻辑这些工作都被包装到几行代码中。如下代码示例import os import requests import json from dotenv import load_dotenv load_dotenv() openai_api_key os.getenv(DEEPSEEK_API_KEY) from langchain.chat_models import init_chat_model from langchain_core.tools import tool from langchain.agents import create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate from langchain.agents import AgentExecutor # 自定义工具 tool def get_weather(local): 查询即时天气函数 :param local: 必要参数字符串类型用于表示查询天气的具体城市名称\ 注意中国的城市需要用对应城市的英文名称代替例如如果需要查询北京市天气则local参数需要输入Beijing :returnOpenWeather API查询即时天气的结果具体URL请求地址为https://api.openweathermap.org/data/2.5/weather\ 返回结果对象类型为解析之后的JSON格式对象并用字符串形式进行表示其中包含了全部重要的天气信息。 # Step1. 构建请求 url https://api.openweathermap.org/data/2.5/weather # Step2. 设置查询参数 params { q: local, appid: os.getenv(OPENWEATHER_API_KEY), # 输入API key units: metric, # 使用摄氏度而不是华氏度 lang:zh_cn # 输出语言为简体中文 } # Step3. 发送 GET 请求 response requests.get(url, paramsparams) # Step4. 解析响应 data response.json() return json.dumps(data) # 创建 ToolCalling Agent 对象 prompt ChatPromptTemplate.from_messages([ (system, 你是天气助手请根据用户的问题给出相应的天气信息), (human, {input}), (placeholder, {agent_scratchpad}), # prompt template 要注意添加 placeholder 占位符AgentExecutor 会自动完成 Message Updating。 ]) model init_chat_model(modeldeepseek-chat, model_providerdeepseek) tools [get_weather] agent create_tool_calling_agent(model, tools, prompt) # 使用 AgentExecutor 执行这个 Agent # Tool Callig 和 Message Updating 由 AgentExecutor 自动完成。 agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) response agent_executor.invoke({input: 请问今天北京的天气怎么样}) # 直接返回最终 Response无需编写 OutParser 代码 print(response)执行输出 Entering new AgentExecutor chain... Invoking: get_weather with {local: Beijing} responded: 我来帮您查询今天北京的天气情况。 {coord: {lon: 116.3972, lat: 39.9075}, weather: [{id: 502, main: Rain, description: \u5927\u96e8, icon: 10n}], base: stations, main: {temp: 11.25, feels_like: 10.81, temp_min: 11.25, temp_max: 11.25, pressure: 1020, humidity: 91, sea_level: 1020, grnd_level: 1015}, visibility: 7591, wind: {speed: 0.57, deg: 105, gust: 0.87}, rain: {1h: 5.91}, clouds: {all: 100}, dt: 1760099556, sys: {country: CN, sunrise: 1760048346, sunset: 1760089412}, timezone: 28800, id: 1816670, name: Beijing, cod: 200}根据查询结果今天北京的天气情况如下 **天气状况**大雨 **当前温度**11.25°C **体感温度**10.81°C **湿度**91%非常潮湿 **气压**1020 hPa **风速**0.57 m/s微风 **能见度**7591米 **降雨量**过去1小时降雨量5.91毫米 **温馨提示** - 今天北京有大雨建议您外出时携带雨具 - 温度较低且湿度很高体感温度只有10.81°C请注意保暖 - 能见度一般雨天出行请注意交通安全 Finished chain. {input: 请问今天北京的天气怎么样, output: 根据查询结果今天北京的天气情况如下\n\n**天气状况**大雨\n**当前温度**11.25°C\n**体感温度**10.81°C\n**湿度**91%非常潮湿\n**气压**1020 hPa\n**风速**0.57 m/s微风\n**能见度**7591米\n**降雨量**过去1小时降雨量5.91毫米\n\n**温馨提示**\n- 今天北京有大雨建议您外出时携带雨具\n- 温度较低且湿度很高体感温度只有10.81°C请注意保暖\n- 能见度一般雨天出行请注意交通安全}AgentExecutor 是 Agent Tooling 的 “大脑”支持自动化地完成 Message - Agent - Toolkits 这 3 方面的内容。更详细的其会自动化完成包括拆解子任务然后根据这些子任务在工具库中找到相应的工具提取工具名称及所需参数然后自动执行这些工具得到执行结果将执行结果更新到 Message再请求 LLM 并最终返回。自动化处理 Message Updating包括User input、Model Response、Conversation History。自动化处理 Tool Calling包括拆解子任务、调用 Tools、处理 Tool Results 并处理最终输出结果。Workflow 基本范式除了简化代码编写LangChain Agent Tooling 还实现了一些 Workflow 范式。常见的 Workflow 范式包括以下几类指导开发者根据不同的应用场景编写合理的代码逻辑。提示链Prompt chaining提示链Prompt chaining范式将任务分解为一系列子任务并顺序执行前一个 LLM call 的 output 作为后一个 LLM call 的 input。可以在中间任意 step 添加 Checkpoint 检查点如图中的 Gate。检查以确保处理过程仍在正轨上。将一个大任务拆解为多个子任务每个子任务分别与 LLM 交互具有准确率更高、延迟更低的优势。应用场景适用于能干净地将任务分解为固定子任务的场景。 应用案例生成营销文案。首先编写文档大纲确保大纲符合某些标准然后根据大纲编写文档最后将其翻译成不同的语言。路由Routing路由Routing范式通过 LLM Call Router 对 Input 进行分类并将其转发到专门的后续任务specialized followup task。还可以将不同的问题转发给不同的 LLM 进行处理例如将简单问题路由到小模型处理将复杂问题路由到更强大的模型处理。以优化成本和速度。应用场景适用于具有不同类别的复杂任务前提是能够准确分类。同理讲一个负责的任务这些类别分开处理时都能得到更好的效果。 应用案例智能客服。将不同类型的用户问题一般问题、请求退款、技术支持转发到不同的下游任务处理具有更专注和模块化的 Model、Prompts 和 Tools。并行化Parallelization在这里插入图片描述并行化Parallelization范式多个任务同时进行然后对输出进行聚合处理。应用场景性能场景类似 MapReduce将任务分解为独立的子任务并行运行最后对输出进行聚合提升效率。输出验证场景同时生成多个相同问题的输出然后进行 Voting投票或 Validate验证交叉验证输出的可靠性。评估者-优化者Evaluator-optimizer在这里插入图片描述评估者-优化者Evaluator-optimizer范式一个 LLM call 负责生成响应而另一个 LLM call 负责评估和反馈形成一个闭环。应用场景适用于有明确的评估标准并且迭代式改进确实有效的场景。 应用案例文学翻译。承担翻译任务的 LLM 可能没有捕捉到细微差别但承担评估任务的 LLM 可以提供有用的批评。深度研究。需要多轮搜索和分析以收集全面信息评估者决定是否需要进一步搜索。并行化调用代码示例修改上述例子的 User Query要求查询 2 个城市的天气。response agent_executor.invoke({input: 请问今天北京和杭州的天气怎么样哪个城市更热}) print(response)此时 AgentExecutor 会自动启用并行化 Workflow 范式。执行结果 Entering new AgentExecutor chain... Invoking: get_weather with {local: Beijing} responded: 我来帮您查询北京和杭州的天气情况然后比较哪个城市更热。 {coord: {lon: 116.3972, lat: 39.9075}, weather: [{id: 501, main: Rain, description: \u4e2d\u96e8, icon: 10n}], base: stations, main: {temp: 11.26, feels_like: 10.77, temp_min: 11.26, temp_max: 11.26, pressure: 1019, humidity: 89, sea_level: 1019, grnd_level: 1014}, visibility: 10000, wind: {speed: 0.75, deg: 155, gust: 0.61}, rain: {1h: 1.41}, clouds: {all: 100}, dt: 1760112094, sys: {country: CN, sunrise: 1760134807, sunset: 1760175719}, timezone: 28800, id: 1816670, name: Beijing, cod: 200} Invoking: get_weather with {local: Hangzhou} responded: 我来帮您查询北京和杭州的天气情况然后比较哪个城市更热。 {coord: {lon: 120.1614, lat: 30.2937}, weather: [{id: 800, main: Clear, description: \u6674, icon: 01n}], base: stations, main: {temp: 25.73, feels_like: 26.6, temp_min: 25.73, temp_max: 25.73, pressure: 1013, humidity: 86, sea_level: 1013, grnd_level: 1011}, visibility: 10000, wind: {speed: 1.31, deg: 357, gust: 1.77}, clouds: {all: 0}, dt: 1760111956, sys: {country: CN, sunrise: 1760133508, sunset: 1760175212}, timezone: 28800, id: 1808926, name: Hangzhou, cod: 200}根据查询结果我来为您对比两个城市的天气情况 **北京天气** - 温度11.26°C - 体感温度10.77°C - 天气状况中雨 - 湿度89% - 气压1019 hPa **杭州天气** - 温度25.73°C - 体感温度26.60°C - 天气状况晴天 - 湿度86% - 气压1013 hPa **温度对比** 杭州25.73°C明显比北京11.26°C更热温差达到14.47°C。杭州的温度更温暖舒适而北京则相对较冷且有降雨。 **结论** 杭州比北京更热。 Finished chain. {input: 请问今天北京和杭州的天气怎么样哪个城市更热, output: 根据查询结果我来为您对比两个城市的天气情况\n\n**北京天气**\n- 温度11.26°C\n- 体感温度10.77°C\n- 天气状况中雨\n- 湿度89%\n- 气压1019 hPa\n\n**杭州天气**\n- 温度25.73°C\n- 体感温度26.60°C\n- 天气状况晴天\n- 湿度86%\n- 气压1013 hPa\n\n**温度对比**\n杭州25.73°C明显比北京11.26°C更热温差达到14.47°C。杭州的温度更温暖舒适而北京则相对较冷且有降雨。\n\n**结论** 杭州比北京更热。}提示链条串行化调用代码示例在上述示例的基础上再添加一个任务要求把查询的结果写入文件。tool def write_file(content): 将指定内容写入本地文件。 :param content: 必要参数字符串类型用于表示需要写入文档的具体内容。 :return是否成功写入 return 已成功写入本地文件。 tools [get_weather, write_file] prompt ChatPromptTemplate.from_messages( [ (system, 你是天气助手请根据用户的问题给出相应的天气信息如果用户需要将查询结果写入文件请使用 write_file 工具。), (human, {input}), (placeholder, {agent_scratchpad}), ] ) response agent_executor.invoke({input: 查一下北京和杭州现在的温度并将结果写入本地的文件中。}) print(response)AgentExecutor 会自动添加一个 Tool Calling 到串行的任务链中。执行结果 Entering new AgentExecutor chain... Invoking: get_weather with {local: Beijing} {coord: {lon: 116.3972, lat: 39.9075}, weather: [{id: 500, main: Rain, description: \u5c0f\u96e8, icon: 10n}], base: stations, main: {temp: 11.26, feels_like: 10.77, temp_min: 11.26, temp_max: 11.26, pressure: 1019, humidity: 89, sea_level: 1019, grnd_level: 1014}, visibility: 10000, wind: {speed: 0.75, deg: 155, gust: 0.61}, rain: {1h: 0.34}, clouds: {all: 100}, dt: 1760112418, sys: {country: CN, sunrise: 1760134807, sunset: 1760175719}, timezone: 28800, id: 1816670, name: Beijing, cod: 200} Invoking: get_weather with {local: Hangzhou} {coord: {lon: 120.1614, lat: 30.2937}, weather: [{id: 800, main: Clear, description: \u6674, icon: 01n}], base: stations, main: {temp: 25.75, feels_like: 26.6, temp_min: 25.75, temp_max: 25.75, pressure: 1013, humidity: 85, sea_level: 1013, grnd_level: 1011}, visibility: 10000, wind: {speed: 1.31, deg: 357, gust: 1.77}, clouds: {all: 0}, dt: 1760112307, sys: {country: CN, sunrise: 1760133508, sunset: 1760175212}, timezone: 28800, id: 1808926, name: Hangzhou, cod: 200} Invoking: write_file with {content: 北京和杭州当前温度查询结果\n\n北京天气情况\n- 城市北京\n- 温度11.26°C\n- 体感温度10.77°C\n- 天气状况小雨\n- 湿度89%\n- 气压1019 hPa\n- 风速0.75 m/s\n- 可见度10000米\n\n杭州天气情况\n- 城市杭州\n- 温度25.75°C\n- 体感温度26.60°C\n- 天气状况晴\n- 湿度85%\n- 气压1013 hPa\n- 风速1.31 m/s\n- 可见度10000米\n\n查询时间2025年10月10日} responded: 现在我将查询到的天气信息整理并写入本地文件 已成功写入本地文件。我已经为您查询了北京和杭州的当前温度并将结果写入本地文件。 查询结果如下 - **北京**当前温度11.26°C天气状况为小雨 - **杭州**当前温度25.75°C天气状况为晴 两地温差较大北京较冷11.26°C而杭州相对温暖25.75°C。详细的天气信息已成功保存到本地文件中。 Finished chain. {input: 查一下北京和杭州现在的温度并将结果写入本地的文件中。, output: 我已经为您查询了北京和杭州的当前温度并将结果写入本地文件。\n\n查询结果如下\n- **北京**当前温度11.26°C天气状况为小雨\n- **杭州**当前温度25.75°C天气状况为晴\n\n两地温差较大北京较冷11.26°C而杭州相对温暖25.75°C。详细的天气信息已成功保存到本地文件中。}普通人如何抓住AI大模型的风口领取方式在文末为什么要学习大模型目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 大模型作为其中的重要组成部分 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 为各行各业带来了革命性的改变和机遇 。目前开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景其中应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。随着AI大模型技术的迅速发展相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业人工智能大潮已来不加入就可能被淘汰。如果你是技术人尤其是互联网从业者现在就开始学习AI大模型技术真的是给你的人生一个重要建议最后只要你真心想学习AI大模型技术这份精心整理的学习资料我愿意无偿分享给你但是想学技术去乱搞的人别来找我在当前这个人工智能高速发展的时代AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料能够帮助更多有志于AI领域的朋友入门并深入学习。真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】大模型全套学习资料展示自我们与MoPaaS魔泊云合作以来我们不断打磨课程体系与技术内容在细节上精益求精同时在技术层面也新增了许多前沿且实用的内容力求为大家带来更系统、更实战、更落地的大模型学习体验。希望这份系统、实用的大模型学习路径能够帮助你从零入门进阶到实战真正掌握AI时代的核心技能01教学内容从零到精通完整闭环【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块内容比传统教材更贴近企业实战大量真实项目案例带你亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事02适学人群应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。业务赋能突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。vx扫描下方二维码即可【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】本教程比较珍贵仅限大家自行学习不要传播更严禁商用03入门到进阶学习路线图大模型学习路线图整体分为5个大的阶段04视频和书籍PDF合集从0到掌握主流大模型技术视频教程涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向新手必备的大模型学习PDF书单来了全是硬核知识帮你少走弯路不吹牛真有用05行业报告白皮书合集收集70报告与白皮书了解行业最新动态0690份面试题/经验AI大模型岗位面试经验总结谁学技术不是为了赚$呢找个好的岗位很重要07 deepseek部署包技巧大全由于篇幅有限只展示部分资料并且还在持续更新中…真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】