【基于 LangChain 的異步天氣查詢1】異步調用 Open-Meteo API 查詢該城市當前氣溫

目錄

一、功能概述

二、文件結構

三、城市天氣實時查詢(運行代碼)

weather_runnable.py

main.py

運行結果

四、技術亮點

五、使用場景


一、功能概述

它實現了以下主要功能:

  1. 用戶輸入地點(城市名)

  2. 構造提示詞(Prompt)生成自然語言問題

  3. 異步調用 Open-Meteo API 查詢該城市當前氣溫

  4. 調用 OpenAI GPT-4o 模型,讓它基于氣溫給出外出建議


二、文件結構

your_project/
├── weather_runnable.py     ? 自定義異步 Runnable 類
├── main.py                 ? 主程序,構建異步鏈并執行

三、城市天氣實時查詢(運行代碼)

weather_runnable.py

這是一個符合 LangChain LCEL 規范的異步組件,繼承自 Runnable

  • 實現了 ainvoke 方法,用于異步調用天氣 API。

  • 使用 aiohttp 獲取 Open-Meteo 提供的天氣數據。

  • 支持城市:Beijing、Shanghai、New York(可擴展)。

# weather_runnable.py
import aiohttp
from typing import Any, Optional
from langchain_core.runnables import Runnableclass WeatherLookupAsyncRunnable(Runnable):"""異步版:調用 Open-Meteo API 獲取城市天氣"""def get_coordinates(self, city: str):city_map = {"Beijing": (39.9042, 116.4074),"Shanghai": (31.2304, 121.4737),"New York": (40.7128, -74.0060),}return city_map.get(city)def invoke(self, input: Any, config: Optional[dict] = None) -> str:raise NotImplementedError("這是一個異步組件,請使用 ainvoke() 調用。")async def ainvoke(self, input: Any, config: Optional[dict] = None) -> str:if not isinstance(input, str):raise ValueError("輸入必須是字符串(城市名)")coords = self.get_coordinates(input)if coords is None:return f"暫不支持城市:{input}"lat, lon = coordsurl = (f"https://api.open-meteo.com/v1/forecast?"f"latitude={lat}&longitude={lon}&current_weather=true")try:async with aiohttp.ClientSession() as session:async with session.get(url) as response:if response.status != 200:return "天氣 API 請求失敗"data = await response.json()temp = data.get("current_weather", {}).get("temperature")return f"當前{input}的氣溫是 {temp}°C" if temp is not None else "未獲取到氣溫"except Exception as e:return f"請求過程中出錯: {str(e)}"

main.py

這是主程序,執行以下流程:

  1. 構造提示詞: 使用 ChatPromptTemplate 創建一個天氣查詢句子。

  2. 調用天氣服務: 執行自定義異步 Runnable,獲取當前氣溫。

  3. 調用 GPT-4o: 讓 LLM 根據天氣數據生成建議,比如“適合出門”或“建議帶傘”。

# main.py
import asyncio
from weather_runnable import WeatherLookupAsyncRunnable
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI  # ? 用 langchain_openai,不要再用老接口prompt = ChatPromptTemplate.from_template("請問{location}的天氣如何?")
llm = ChatOpenAI(model="gpt-4o")weather = WeatherLookupAsyncRunnable()async def run():# 1. 生成用戶問題question = prompt.invoke({"location": "Beijing"}).to_string()print("Prompt output:", question)# 2. 實際調用天氣 API(最關鍵)weather_result = await weather.ainvoke("Beijing")print("天氣查詢結果:", weather_result)    # 3. 由 LLM 生成回復llm_output = llm.invoke(f"根據{weather_result},簡短描述一下今天是否適合出門,需要注意什么")print("LLM output:", llm_output.content)asyncio.run(run())

運行結果

Prompt output: Human: 請問Beijing的天氣如何?
天氣查詢結果: 當前Beijing的氣溫是 23.9°C
LLM output: 今天北京的氣溫是23.9°C,天氣較為宜人,非常適合出門活動。不過建議根據具體的天氣情況查看是否有降水或其它天氣變化,出門時根據個人體感選擇適合的衣物。此
外,可以適當攜帶水杯保持水分補充,同時注意防曬措施,以確保舒適的戶外體驗。


四、技術亮點

技術用途
LangChain Core / LCEL構建可組合的數據流
Runnable Async實現異步接口邏輯,非阻塞式
aiohttp高效異步 HTTP 請求庫
OpenAI GPT-4o生成智能出行建議
ChatPromptTemplate動態構造人類語言輸入

五、使用場景

  • AI 助理天氣模塊

  • 旅游或日程規劃建議工具

  • 多輪對話集成的一個工具鏈組件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82481.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spark的三種部署模式及其特點與區別

Spark支持多種集群部署模式,主要分為以下三類: 部署模式特點適用場景資源管理依賴Local模式單機運行,所有進程(Driver、Executor)在同一個JVM中開發調試、小規模數據測試無集群資源管理,僅本地線程模擬無需…

再度深入理解PLC的輸入輸出接線

本文再次重新梳理: 兩線式/三線式傳感器的原理及接線、PLC的輸入和輸出接線,深入其內部原理,按照自己熟悉的方式去理解該知識 在此之前,需要先統一幾個基礎知識點: 在看任何電路的時候,需要有高低電壓差&…

dockerfile編寫入門

dockerfile 入門 前提已經知道常用的docker和linux命令 如容器的創建,運行, linux的文件命令,會上傳文件到linux等等 dockerfile簡介 之前我們所使用的鏡像都是別人構建好的,但是別人構建好的鏡像不一定能滿足我們的需求。為了滿足我們自己的某一些需求&#xff…

jenkins 啟動報錯

java.lang.UnsatisfiedLinkError: /opt/application/jdk-17.0.11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory。 解決方案: yum install freetype-devel 安裝完成之后重啟jenkins。

Harness: 全流程 DevOps 解決方案,讓持續集成如吃飯般簡單

引言 在當今快速發展的軟件開發世界中,高效的 DevOps 工具變得越來越重要。Harness 作為一個開源的運維平臺,為開發和運維團隊提供了從代碼托管到 CI/CD 的全流程解決方案,同時實現自動化的開發環境和制品管理。這種集中化的工具可以顯著減少運維難度,提高團隊效率,真正解…

Kubernetes生產實戰(十七):負載均衡流量分發管理實戰指南

在Kubernetes集群中,負載均衡是保障應用高可用、高性能的核心機制。本文將從生產環境視角,深入解析Kubernetes負載均衡的實現方式、最佳實踐及常見問題解決方案。 一、Kubernetes負載均衡的三大核心組件 1)Service資源:集群內流…

單脈沖前視成像多目標分辨算法——論文閱讀

單脈沖前視成像多目標分辨算法 1. 論文的研究目標及實際意義1.1 研究目標1.2 實際問題與產業意義2. 論文的創新方法及公式解析2.1 核心思路2.2 關鍵公式與模型2.2.1 單脈沖雷達信號模型2.2.2 匹配濾波輸出模型2.2.3 多目標聯合觀測模型2.2.4 對數似然函數與優化2.2.5 MDL準則目…

Java后端程序員學習前端之JavaScript

1.什么是JavaScript 1.1.概述 JavaScript是一門世界上最流行的腳本語言javaScript 一個合格的后端人員&#xff0c;必須要精通JavaScript 1.2.歷史 JavaScript的起源故事-CSDN博客 2.快速入門 2.1.引入JavaScript 1.內部標簽 <script>//.......</script> --…

AI編程: 使用Trae1小時做成的音視頻工具,提取音頻并識別文本

背景 在上個月&#xff0c;有網頁咨詢我怎么才能獲取視頻中的音頻并識別成文本&#xff0c;我當時給他的回答是去問一下AI&#xff0c;讓AI來給你答案。 他覺得我在敷衍他&#xff0c;大罵了我一頓&#xff0c;大家覺得我的回答對嗎&#xff1f; 小編心里委屈&#xff0c;我…

AI日報 · 2025年5月10日|OpenAI“Stargate”超級數據中心項目掀起美國各州爭奪戰

1、OpenAI“Stargate”超級數據中心項目掀起美國各州爭奪戰 《華盛頓郵報》披露&#xff0c;OpenAI 與 Oracle、SoftBank 合作推進的“Stargate”項目&#xff08;首期投資 1000?億美元&#xff0c;四年內總投資 5000?億美元&#xff09;已收到超過 250 份選址提案&#xff…

Windows系統Jenkins企業級實戰

目標 在Windows操作系統上使用Jenkins完成代碼的自動拉取、編譯、打包、發布工作。 實施 1.安裝Java開發工具包&#xff08;JDK&#xff09; Jenkins是基于Java的應用程序&#xff0c;因此需要先安裝JDK。可以從Oracle官網或OpenJDK下載適合的JDK版本。推薦java17版本&#x…

MySQL 索引和事務

目錄 一、MySQL 索引介紹 1、索引概述 2、索引作用 3、索引的分類 &#xff08;1&#xff09;普通索引 &#xff08;2&#xff09;唯一索引 &#xff08;3&#xff09;主鍵索引 &#xff08;4&#xff09;組合索引&#xff08;最左前綴&#xff09; &#xff08;5&…

Block Styler——字符串控件

字符串控件的應用 參考官方幫助案例&#xff1a;&#xff08;這個方式感覺更好&#xff0c;第二種方式也可以&#xff09;E:\NX1980\UGOPEN\SampleNXOpenApplications\C\BlockStyler\ColoredBlock 普通格式&#xff1a; 讀取&#xff1a; //方法一 string0->GetProperti…

P2572 [SCOI2010] 序列操作 Solution

Description 給定 01 01 01 序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?)&#xff0c;并定義 f ( l , r ) [ ( ∑ i l r a i ) r ? l 1 ] f(l,r)[(\sum\limits_{il}^r a_i)r-l1] f(l,r)[(il∑r?ai?)r?l1]. 執行 m m m 個操作&am…

RAG 2.0 深入解讀

作者&#xff1a;阿里云開發者 原文&#xff1a;https://zhuanlan.zhihu.com/p/1903437079603545114? 一、Introduction 過去一年可謂是RAG元年&#xff0c;檢索增強生成技術迅速發展與深刻變革&#xff0c;其創新與應用已深刻重塑了大模型落地的技術范式。站在2025年&#x…

代碼隨想錄第41天:圖論2(島嶼系列)

一、島嶼數量&#xff08;Kamacoder 99&#xff09; 深度優先搜索&#xff1a; # 定義四個方向&#xff1a;右、下、左、上&#xff0c;用于 DFS 中四向遍歷 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""對一塊陸地進行深度…

基于CNN的貓狗圖像分類系統

一、系統概述 本系統是基于PyTorch框架構建的智能圖像分類系統&#xff0c;專門針對CIFAR-10數據集中的貓&#xff08;類別3&#xff09;和狗&#xff08;類別5&#xff09;進行分類任務。系統采用卷積神經網絡&#xff08;CNN&#xff09;作為核心算法&#xff0c;結合圖形用…

linux搭建hadoop學習

linux搭建hadoop學習 下載安裝包: 海外資源可能需要翻墻或者找國內資源 cd /opt wget https://dlcdn.apache.org/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz tar -zxvf hadoop-2.10.2.tar.gz mv hadoop-2.10.2 hadoop配置環境變量 # 在/etc/profile文件中添加下面內…

Kubernetes生產實戰(十六):集群安全加固全攻略

Kubernetes集群安全加固全攻略&#xff1a;生產環境必備的12個關鍵策略 在容器化時代&#xff0c;Kubernetes已成為企業應用部署的核心基礎設施。但根據CNCF 2023年云原生安全報告顯示&#xff0c;75%的安全事件源于K8s配置錯誤。本文將基于生產環境實踐&#xff0c;系統講解集…

類加載機制詳解:雙親委派模型與打破它的方式

在復雜的 Java 系統中&#xff0c;類加載是最基礎卻常被忽略的一環。理解 JVM 的類加載機制&#xff0c;特別是 雙親委派模型&#xff08;Parent Delegation Model&#xff09;&#xff0c;是我們深入掌握熱部署、插件機制、ClassLoader 隔離、ClassNotFound 錯誤等問題的關鍵。…