LangChain:Tool工具调用
·
🌦️ Python天气查询实战:基于 OpenWeather API + LangChain Tool Calling 的完整实现
📌 一、项目简介
在实际开发中,经常需要对接外部 API 来获取实时数据,例如:
- 天气查询
- 搜索引擎结果
- 数据分析接口
- 自动化工具系统
本文实现一个完整的天气查询工具系统,核心能力包括:
✔ 调用 OpenWeather API
✔ 获取实时天气数据
✔ JSON 数据解析
✔ 转换为自然语言输出
✔ 支持 LangChain Tool Calling 机制
🧠 二、核心概念说明
在开始代码之前,需要先明确一个关键点:
⚙️ Tool Calling vs Function Calling
很多人会混用这两个概念,其实它们有层级关系:
🔹 1. Function Calling(模型能力)
这是大模型本身支持的一种能力:
👉 让模型以 JSON 结构输出“函数调用请求”
例如:
{
"name": "get_weather",
"arguments": {
"city": "Beijing"
}
}
✔ 本质:模型能力(底层能力)
🔹 2. Tool Calling(LangChain封装)
LangChain 在 Function Calling 基础上做了工程封装:
- 工具注册(@tool)
- 参数解析
- 自动调用函数
- 结果回填模型
- Agent调度能力
✔ 本质:工程框架能力
🔥 一句话总结:
Function Calling 是模型能力
Tool Calling 是 LangChain 对它的工程封装
🧩 三、系统整体流程
用户输入城市
↓
LLM 判断是否需要工具
↓
生成 Tool Call 请求
↓
执行 get_weather 函数
↓
调用 OpenWeather API
↓
返回 JSON 数据
↓
转换为自然语言
↓
输出天气结果
🧰 四、环境准备
1️⃣ 安装依赖
pip install langchain langchain-core httpx python-dotenv loguru
2️⃣ 获取 API Key
注册 OpenWeather:
👉 https://home.openweathermap.org/api_keys
并写入 .env:
OPENWEATHER_API_KEY=你的APIKEY
🌍 五、天气工具实现(核心代码)
📌 1. Tool定义(get_weather)
from langchain_core.tools import tool
import json
import os
import httpx
from dotenv import load_dotenv
load_dotenv(override=True)
openweather_api_key = os.getenv("OPENWEATHER_API_KEY")
@tool
def get_weather(loc: str):
"""
查询即时天气函数
"""
url = "https://api.openweathermap.org/data/2.5/weather"
params = {
"q": loc,
"appid": openweather_api_key,
"units": "metric",
"lang": "zh_cn"
}
response = httpx.get(url, params=params)
data = response.json()
return json.dumps(data)
📌 功能说明
该函数完成:
- 输入城市名称
- 请求 OpenWeather API
- 返回 JSON 天气数据
🤖 六、Tool Calling 调用机制
📌 绑定工具
llm_with_tools = llm.bind_tools([get_weather])
📌 工具解析链
from langchain_core.output_parsers import JsonOutputKeyToolsParser
parser = JsonOutputKeyToolsParser(
key_name=get_weather.name,
first_tool_only=True
)
get_weather_chain = llm_with_tools | parser | get_weather
📌 作用说明
这一层做了三件事:
- LLM 判断是否调用工具
- 解析 tool_call
- 执行 Python 函数
🧾 七、自然语言输出转换
📌 Prompt模板
from langchain_core.prompts import PromptTemplate
output_prompt = PromptTemplate.from_template(
"""
你将收到 JSON 格式天气数据:
{weather_json}
请将其转换为自然语言描述,例如:
北京天气:多云,气温 28℃,体感较热,湿度 75%,风力较弱。
"""
)
📌 输出解析器
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
📌 最终链路
output_chain = output_prompt | llm | output_parser
full_chain = get_weather_chain | (lambda x: {"weather_json": x}) | output_chain
🚀 八、运行效果(流式输出)
for chunk in full_chain.stream("请问上海今天的天气如何?"):
print(chunk, end="", flush=True)
📌 示例输出
上海天气:多云,气温 27℃,体感略热,湿度 60%,风力较弱,整体适合外出。
🔥 九、项目亮点总结
1️⃣ 标准 API 调用流程
- httpx 请求
- JSON解析
- 数据结构化处理
2️⃣ Tool Calling 机制理解
你现在实现的是:
👉 LLM → 生成函数调用 → 自动执行 Python 工具
3️⃣ LangChain 工程封装能力
相比原生 Function Calling:
| 能力 | Function Calling | Tool Calling |
|---|---|---|
| 函数调用 | ✔ | ✔ |
| 自动执行 | ❌ | ✔ |
| 工具管理 | ❌ | ✔ |
| Agent支持 | ❌ | ✔ |
4️⃣ 支持流式输出
提升用户体验,适合:
- Chatbot
- 实时问答系统
📈 十、适用场景
本项目适用于:
- Python API开发学习
- LangChain工具开发
- Agent系统入门
- 自动化数据处理
- AI工具系统构建
🧠 十一、总结
本文实现了一个完整的天气查询工具系统:
- 基于 OpenWeather API
- 使用 Python HTTP 请求
- 使用 LangChain Tool Calling
- 实现自然语言输出转换
🎯 一句话总结
Tool Calling 是让大模型具备“调用外部工具能力”的工程化实现,是构建 AI Agent 的基础能力之一。
更多推荐

所有评论(0)