【GPT入門】第14課 openai調用高德地圖案例實現多輪會話與多輪接口調用

【GPT入門】第14課 openai調用高德地圖案例實現多輪會話與多輪接口調用

  • 1.使用openai調用高德地圖API概述
  • 2. 高德接口調用申請
  • 3.實現代碼(多個function調用,多輪對話)
  • 4.執行結果

1.使用openai調用高德地圖API概述

任務描述:使用openai調用高德地圖API,實現用戶問地理有關的信息時,調用高德API,并返回相關信息
例如:
問:我想在廣州珠江新城附近喝咖啡,給我推薦幾個
答:在廣州珠江新城附近,有幾個不錯的咖啡店推薦:

  1. 星巴克 - 經典的咖啡連鎖店,提供多種咖啡和輕食。
  2. 咖啡陪你 - 適合休閑放松的咖啡店,環境舒適。
  3. Maan Coffee - 以其獨特的韓式風格和美味的咖啡而聞名。
    你可以根據自己的喜好選擇去哪個咖啡店!

實現思路:

  1. 了解高德地圖API
  2. 定義OPENAI接口, 目的是準備好高德地圖API需要的參數
  3. 程序調用高德地圖API
  4. 調用結果使用多輪對話的方式實現
  5. 注意:用戶的prompt可能包含多個地點,需要直線多個地點的回答

2. 高德接口調用申請

申請高德地圖的AMAP_KEY,主要有以下步驟:

  1. 注冊登錄:訪問高德開放平臺官網,點擊“立即注冊”按鈕,填寫郵箱、密碼等相關信息完成注冊。如果已有賬號,直接登錄。
  2. 創建應用:登錄后,點擊頁面左側菜單欄中的“我的應用”,再點擊“創建應用”按鈕,輸入應用名稱、描述等信息,選擇合適的應用類別后點擊創建。
  3. 添加Key:進入“我的應用”,選擇需要創建Key的應用,點擊“添加Key”。表單中的服務平臺根據需求選擇,如用于Web開發選“Web服務”;用于安卓應用選“Android平臺SDK”;用于iOS應用選“iOS平臺SDK”等。
  4. 獲取Key:填寫必要信息后點擊提交,創建成功即可獲取AMAP_KEY和安全密鑰。

3.實現代碼(多個function調用,多輪對話)

from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
import json
from myjson import print_json
_ = load_dotenv(find_dotenv())client = OpenAI()def get_completion(messages, model="gpt-4o-mini"):response = client.chat.completions.create(model=model,messages=messages,temperature=0,seed=1024,      # 隨機種子保持不變,temperature 和 prompt 不變的情況下,輸出就會不變tool_choice="auto",  # 默認值,由 GPT 自主決定返回 function call 還是返回文字回復。也可以強制要求必須調用指定的函數,詳見官方文檔tools=[{"type": "function","function": {"name": "get_location_coordinate","description": "根據POI名稱,獲得POI的經緯度坐標","parameters": {"type": "object","properties": {"location": {"type": "string","description": "POI名稱,必須是中文",},"city": {"type": "string","description": "POI所在的城市名,必須是中文",}},"required": ["location", "city"],}}},{"type": "function","function": {"name": "search_nearby_pois","description": "搜索給定坐標附近的poi","parameters": {"type": "object","properties": {"longitude": {"type": "string","description": "中心點的經度",},"latitude": {"type": "string","description": "中心點的緯度",},"keyword": {"type": "string","description": "目標poi的關鍵字",}},"required": ["longitude", "latitude", "keyword"],}}}],)return response.choices[0].messageimport requests
import osamap_key = os.getenv("AMAP_KEY")
amap_base_url = os.getenv("AMAP_URL") # 默認是 https://restapi.amap.com/v5print(amap_base_url)def get_location_coordinate(location, city):url = f"{amap_base_url}/place/text?key={amap_key}&keywords={location}&region={city}"r = requests.get(url)result = r.json()print("get_location_coordinate接口返回:")print(result)if "pois" in result and result["pois"]:return result["pois"][0]return Nonedef search_nearby_pois(longitude, latitude, keyword):url = f"{amap_base_url}/place/around?key={amap_key}&keywords={keyword}&location={longitude},{latitude}"r = requests.get(url)result = r.json()print("search_nearby_pois 結構返回:")print(result)ans = ""if "pois" in result and result["pois"]:for i in range(min(3, len(result["pois"]))):name = result["pois"][i]["name"]address = result["pois"][i]["address"]distance = result["pois"][i]["distance"]ans += f"{name}\n{address}\n距離:{distance}米\n\n"return ans
def search_nearby_pois2(longitude, latitude, keyword):url = f"{amap_base_url}/place/around?key={amap_key}&keywords={keyword}&location={longitude},{latitude}"r = requests.get(url)result = r.json()ans = ""if "posi" in result and result['pois']:for i in range(min(3,result["pois"])):name = result["pois"][i]["name"]address = result["pois"][i]["address"]distance = result["pois"][i]["distance"]ans += f"{name}\n{address}\n距離:{distance}米\n\n"return ans#prompt = "我想在廣州珠江新城附近喝咖啡,給我推薦幾個"
prompt = "我到廣州出差,給我推薦電視塔附近的酒店,和珠江新城附近的咖啡" # 一次請求兩個調用messages = [{"role": "system", "content": "你是一個地理通,你可以找到任何地址"},{"role": "user", "content": prompt}
]response = get_completion(messages)
messages.append<

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

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

相關文章

每日一題-----面試

一、什么是孤兒進程&#xff1f;什么是僵尸進程&#xff1f; 1.孤兒進程是指父進程在子進程結束之前就已經退出&#xff0c;導致子進程失去了父進程的管理和控制&#xff0c;成為了 “孤兒”。此時&#xff0c;這些子進程會被系統的 init 進程&#xff08;在 Linux 系統中&…

Python深度學習算法介紹

一、引言 深度學習是機器學習的一個重要分支&#xff0c;它通過構建多層神經網絡結構&#xff0c;自動從數據中學習特征表示&#xff0c;從而實現對復雜模式的識別和預測。Python作為一門強大的編程語言&#xff0c;憑借其簡潔易讀的語法和豐富的庫支持&#xff0c;成為深度學…

【Python】Django 中的算法應用與實現

Django 中的算法應用與實現 在 Django 開發中&#xff0c;算法的應用可以極大地擴展 Web 應用的功能和性能。從簡單的數據處理到復雜的機器學習模型&#xff0c;Django 都可以作為一個強大的后端框架來支持這些算法的實現。本文將介紹幾種常見的算法及其在 Django 中的使用方法…

旋轉編碼器原理與應用詳解:從結構到實戰 | 零基礎入門STM32第四十七步

主題內容教學目的/擴展視頻旋轉編碼器電路原理&#xff0c;跳線設置&#xff0c;結構分析。驅動程序與調用。熟悉電路和驅動程序。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、旋轉編碼器是什么&#xff1f;二、內部結構揭秘2.1 機械組件解剖2.2 核心部件說明…

如何禁止電腦中某個應用聯網

一、通過防火墻基礎設置&#xff08;快速操作&#xff09; 打開控制面板 在任務欄搜索框輸入“控制面板”并打開&#xff0c;將右上角“查看方式”切換為“大圖標”。 進入防火墻設置 點擊 Windows Defender防火墻 → 左側選擇 允許應用或功能通過Windows Defender防火墻。…

aws(學習筆記第三十二課) 深入使用cdk(API Gateway + event bridge)

文章目錄 aws(學習筆記第三十二課) 深入使用cdk學習內容&#xff1a;1. 使用aws API Gatewaylambda1.1. 以前的練習1.2. 使用cdk創建API Gateway lambda1.3. 確認cdk創建API Gateway lambda 2. 使用event bridge練習producer和consumer2.1. 代碼鏈接2.2. 開始練習2.3. 代碼部…

城市霓虹燈夜景拍照后期Lr調色教程,手機濾鏡PS+Lightroom預設下載!

調色教程 在城市霓虹燈夜景拍攝中&#xff0c;由于現場光線復雜等因素&#xff0c;照片可能無法完全呈現出當時的視覺感受。通過 Lr 調色&#xff0c;可以彌補拍攝時的不足。例如&#xff0c;運用基本調整面板中的曝光、對比度、陰影等工具&#xff0c;可以處理出畫面的整體明暗…

自然語言處理:文本分類

介紹 大家好&#xff0c;我這個熱衷于分享知識的博主又來啦&#xff01;之前我們一起深入探討了自然語言處理領域中非常重要的兩個方法&#xff1a;樸素貝葉斯和邏輯斯諦回歸。在探索的過程中&#xff0c;我們剖析了樸素貝葉斯如何基于概率原理和特征條件獨立假設&#xff0c;…

PDFMathTranslate安裝使用

PDF全文翻譯&#xff01;&#xff01;&#xff01;&#xff01; PDFMathTranslate安裝使用 它是個啥 PDFMathTranslate 可能是一個用于 PDF 文件的數學公式翻譯 工具。它可能包含以下功能&#xff1a; 提取 PDF 內的數學公式 將數學公式轉換成 LaTeX 代碼 翻譯數學公式的內…

【由技及道】量子構建交響曲:Jenkinsfile流水線的十一維編程藝術【人工智障AI2077的開發日志008】

摘要&#xff1a;當代碼提交觸發時空漣漪&#xff0c;當構建流水線穿越量子維度——歡迎來到自動化構建的終極形態。本文將揭示如何用Jenkinsfile編寫量子構建樂章&#xff0c;讓每次代碼提交都成為跨維度交響樂的音符。 動機&#xff1a;構建系統的量子哲學 “主人啊&#xff…

K8S高可用集群-小白學習之二進制部署(ansible+shell)

一.K8S高可用集群配置概述 序言:本文從一個小白的視角進行K8S的研究和部署,采用二進制的方式是為了更清楚了分解部署流程及了解這個集群是怎么運作的,加上ansible+shell是方便在這個過程中,遇到了問題,我們可以不斷的快速重復部署來測試和研究問題的所在點,本文的架構圖…

【自學筆記】R語言基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 R語言基礎知識點總覽1. R語言簡介2. R語言安裝與環境配置3. R語言基礎語法3.1 數據類型3.2 向量與矩陣3.3 數據框與列表 4. 控制結構4.1 條件語句4.2 循環結構 5. 函…

【編譯器】VSCODE搭建ESP32-C3

【編譯器】VSCODE搭建ESP32-C3 文章目錄 [TOC](文章目錄) 前言一、下載配置二、編譯三、燒錄四、參考資料總結 前言 使用工具&#xff1a; 1. 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、下載配置 安裝IDF&#xff0c;打開例程 二、編譯 三…

通義千問本地配置并實現微調

通義千問本地配置并實現微調 最小Qwen模型大小942mb from modelscope import snapshot_download model_dir = snapshot_download(“qwen/Qwen2.5-0.5B”, cache_dir=“./models2.5”) Qwen2.5-0.5B:942MB from modelscope import snapshot_download model_dir = snapshot_d…

Magento2根據圖片文件包導入產品圖片

圖片包給的圖片文件是子產品的圖片&#xff0c;如下圖&#xff1a;A104255是主產品的sku <?php/*** 根據圖片包導入產品圖片&#xff0c;包含子產品和主產品* 子產品是作為主圖&#xff0c;主產品是作為附加圖片*/use Magento\Framework\App\Bootstrap;include(../app/boot…

力扣146 - LRU緩存

視頻講解 哈希 雙向鏈表 為什么要用雙向鏈表&#xff1f; 快速刪除節點&#xff08;O(1&#xff09;&#xff09; 如果是單鏈表的話&#xff0c;刪除一個節點時&#xff0c;需要從頭遍歷&#xff0c;找到前驅節點&#xff0c;才能修改 prev->next&#xff0c;導致 O(n)…

考研408

是否需要考研&#xff1f; 考研前期準備 目標院校 每年9月10月才會公布 考試時長3小時 數據結構 1.時間復雜度選擇題計算 2.順序表鏈表特點;指針、結構體語法&#xff0c;鏈表結點定義&#xff0c;鏈表頭結點與頭指針,常見的五種鏈 表&#xff0c;鏈表的插入刪除操作;順…

nodejs使用WebSocket實現聊天效果

在nodejs中使用WebSocket實現聊天效果&#xff08;簡易實現&#xff09; 安裝 npm i ws 實現 創建 server.js /*** 創建一個 WebSocket 服務器&#xff0c;監聽指定端口&#xff0c;并處理客戶端連接和消息。** param {Object} WebSocket - 引入的 WebSocket 模塊&#xff0c…

Web網頁制作(靜態網頁):千年之戀

一、是用的PyCharm來寫的代碼 二、代碼中所用到的知識點&#xff08;無 js&#xff09; 這段HTML代碼展示了一個簡單的注冊頁面&#xff0c;包含了多個HTML元素和CSS樣式的應用。 這段HTML代碼展示了一個典型的注冊頁面&#xff0c;包含了常見的HTML元素和表單控件。通過CSS樣…

操作系統知識點23

1.實時操作系統的主要設計目標&#xff1a;在嚴格時間氛圍內對外部請求做出反應。 2.當用戶程序正在處理器上運行時&#xff0c;若此刻取到了一條特權指令&#xff0c;則處理器將停止執行該指令&#xff0c;并產生一個“非法操作”的事件 3.某網絡監控系統中。多個被授權的用…