国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GPT應(yīng)用開發(fā):GPT插件開發(fā)指南

這篇具有很好參考價值的文章主要介紹了GPT應(yīng)用開發(fā):GPT插件開發(fā)指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

歡迎閱讀本系列文章!我將帶你一起探索如何利用OpenAI API開發(fā)GPT應(yīng)用。無論你是編程新手還是資深開發(fā)者,都能在這里獲得靈感和收獲。

本文,我們將繼續(xù)展示聊天API中插件的使用方法,讓你能夠輕松駕馭這個強(qiáng)大的工具。

插件運(yùn)行效果

首先給大家展示下插件的運(yùn)行效果,如下圖所示:

GPT應(yīng)用開發(fā):GPT插件開發(fā)指南

可以看到,每次詢問GPT,它都會返回指定城市的實(shí)時天氣信息,這個天氣是真實(shí)的,不是GPT瞎編的,是GPT通過一個實(shí)時天氣插件查詢到的。

插件運(yùn)行原理

知己知彼,百戰(zhàn)不殆!首先讓我們來了解下插件的運(yùn)行原理。如下圖所示:

GPT應(yīng)用開發(fā):GPT插件開發(fā)指南

首先我們在客戶端發(fā)起一個聊天會話,比如詢問GPT:“今天天氣怎么樣?”

為了使用我們自己的插件,我們還需要告訴GPT有哪些插件可用,目前這需要我們在發(fā)起聊天時傳遞一個支持的插件列表給GPT。

然后GPT收到我們的聊天后,它會根據(jù)用戶的聊天內(nèi)容去匹配插件,并在返回的消息中指示命中了哪些插件,這個匹配是根據(jù)GPT的語言理解能力做出的。

然后客戶端就可以檢查命中了哪些插件,并調(diào)用執(zhí)行本地相應(yīng)的插件方法。插件方法是在本地執(zhí)行的,這也比較合理,如果放到GPT服務(wù)端,GPT不僅要適配各種計算能力,還可能面臨巨大的安全風(fēng)險。

然后客戶端將插件的執(zhí)行結(jié)果附加到本次聊天會話中,再次發(fā)起聊天請求,GPT收到后,會根據(jù)首次聊天請求和插件生成的內(nèi)容組織本次聊天響應(yīng)結(jié)果,再返回給用戶。

這樣就完成了一次基于插件的GPT會話。

插件使用示例

基于上面的運(yùn)行原理,我們來編寫一個GPT插件的示例程序。

在這個示例程序中,我將提供一個天氣查詢的插件,當(dāng)用戶詢問GPT今天的天氣時,GPT就會命中這個插件,然后插件會調(diào)用外部API獲取實(shí)時的天氣情況,最后GPT會使用插件生成的結(jié)果組織一段文字回復(fù)返回給用戶。

編寫天氣插件

這里我們將使用“心知天氣”提供的免費(fèi)天氣查詢服務(wù),大家感興趣的可以去這里注冊個賬號:https://www.seniverse.com/,注冊成功后,需要復(fù)制賬號的私鑰,調(diào)用天氣接口時會用到。

GPT應(yīng)用開發(fā):GPT插件開發(fā)指南

然后我們就可以編寫天氣查詢插件了,這里直接給出我的代碼:

def get_city_weather(param):
    city = json.loads(param)["city"]
    params = {
        "key": "這里換成你的天氣產(chǎn)品私鑰",
        "location": city,
        "language": "zh-Hans",
        "unit": "c",
    }
    url = "https://api.seniverse.com/v3/weather/now.json"
    r = requests.get(url, params=params)
   
    data = r.json()["results"]
    address = data[0]["location"]['path']
    temperature = data[0]['now']["temperature"]
    text = data[0]['now']["text"]
    return address+",當(dāng)前天氣:"+text+",溫度:"+temperature+ "℃"

可以看到就是一個Python函數(shù),接收json格式的參數(shù),返回天氣描述信息。

注意這里的參數(shù)格式(包括有哪些參數(shù))是和GPT大模型匹配過的,下文會講到怎么定義參數(shù)。

接口的主要邏輯就是使用城市名稱,調(diào)用實(shí)時天氣接口獲取天氣信息,然后再拼接成一段話并返回。

我這里只使用了天氣的部分指標(biāo),詳細(xì)指標(biāo)大家可以看接口文檔:

https://seniverse.yuque.com/hyper_data/api_v3/nyiu3t?#%20%E3%80%8A%E5%A4%A9%E6%B0%94%E5%AE%9E%E5%86%B5%E3%80%8B

發(fā)起帶插件的聊天

話不多說,看代碼:

client = OpenAI(api_key='sk-xxx')

# 聊天消息上下文
messages=[{
    "role": "user",
    "content": "請問現(xiàn)在天氣怎么樣?",
}]

# 天氣插件
weather_tool = {
        "type": "function",
        "function": {
            "name": "get_city_weather",
            "description": "獲取某個城市的天氣",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名稱",
                    },
                },
                "required": ["city"],
            },
        }
    }

# 發(fā)起聊天請求
response = client.chat.completions.create(
    messages=messages,
    model='gpt-3.5-turbo-1106',
    stream=False,
    # 插件相關(guān)
    tool_choice="auto",
    tools=[weather_tool]
)

在上面這段代碼中,我們首先聲明了一個OpenAI客戶端,沒有API Key的同學(xué)可以看文章最后。

然后我們創(chuàng)建了一個很普通的聊天會話,就是以普通用戶的身份詢問GPT今天的天氣情況。

然后我們定義了一個天氣插件,其實(shí)就是一個Json對象。

  • type:目前只能傳 fucntion,也就是說目前插件就是外置函數(shù)。
  • function:函數(shù)的定義。
    • name:函數(shù)的名稱,這里就是我們上邊定義的 get_city_weather。
    • description:函數(shù)的描述,GPT將使用這個描述來決定什么時候以及如何調(diào)用函數(shù)。
    • parameters:函數(shù)的參數(shù)。
      • type:固定object
      • properties:定義函數(shù)的各個參數(shù),每個參數(shù)包含兩個屬性:type和description,description也很重要,讓GPT模型知道怎么來提供這個參數(shù)。
      • required:數(shù)組,定義必填的參數(shù)。

最后我們向GPT發(fā)起本次聊天請求,其中增加了關(guān)于插件的兩個參數(shù):

  • tool_choice:開啟插件,固定值 auto,設(shè)置為none則不使用插件。
  • tools:插件列表,包含我們上邊定義的 weather_tool 插件。

處理插件命中

如果GPT大模型命中了插件,它會在返回值中攜帶一些信息。根據(jù)這些信息,我們可以知道要調(diào)用哪個插件的函數(shù),然后再把函數(shù)的執(zhí)行結(jié)果附加到消息上下文中,再請求GPT大模型,GPT大模型會使用函數(shù)返回值組織文本內(nèi)容,最終返回給用戶。

相關(guān)代碼如下:

response_message = response.choices[0].message
if response_message.tool_calls is not None:
    tool_call = response_message.tool_calls[0]
    messages.append(response_message)
    messages.append({
        "role": "tool",
        "content": get_city_weather(tool_call.function.arguments),
        "tool_call_id": tool_call.id
    })

    response = client.chat.completions.create(
        messages=messages,
        model='gpt-3.5-turbo-1106',
        stream=False,
        tool_choice="auto",
        tools=[weather_tool]
	)

    print(response_message.choices[0].message.content)

判斷是否命中插件使用的是 response_message.tool_calls is not None,也就是返回值中的 tool_calls 不為空,因為這里只有一個插件,所以我們沒有做進(jìn)一步的判斷;如果有多個插件,可以遍歷tool_calls,根據(jù)插件關(guān)聯(lián)函數(shù)的 name,選擇執(zhí)行不同的方法。

注意這里我們把本次響應(yīng)的消息又追加到了上下文中:messages.append(response_message)。

然后我們又追加了插件生成的消息,就是下面這段:

messages.append({
        "role": "tool",
        "content": get_city_weather(tool_call.function.arguments),
        "tool_call_id": tool_call.id
    })

介紹下這幾個字段:

  • role:指定這個消息來自插件。
  • content:指定消息的內(nèi)容。get_city_weather 就是我們上邊定義的插件方法,而它的參數(shù) tool_call.function.arguments 則是大模型生成的 ,這個方法會在在本地執(zhí)行,并生成一段天氣信息描述。
  • tool_call_id:這段消息關(guān)聯(lián)的插件id,需要讓大模型了解這個數(shù)據(jù)關(guān)系。

然后我們又通過 client.chat.completions.create 向GPT大模型發(fā)起請求 ,并拿到最終的返回結(jié)果。

完整的代碼示例

因為上文中兩次請求GPT大模型的方法都是一樣的,所以我們這里把它抽象為一個方法。

另外為了充分展現(xiàn)插件的使用方法,這里會向GPT詢問三個城市的天氣信息,通過循環(huán)發(fā)起。

from openai import OpenAI
import json
import requests
import time

# 獲取天氣的方法
def get_city_weather(param):
    city = json.loads(param)["city"]
    params = {
        "key": "這里換成你的天氣產(chǎn)品私鑰",
        "location": city,
        "language": "zh-Hans",
        "unit": "c",
    }
    url = "https://api.seniverse.com/v3/weather/now.json"
    r = requests.get(url, params=params)
    
    data = r.json()["results"]
    #print(json.dumps(data))
    address = data[0]["location"]['path']
    temperature = data[0]['now']["temperature"]
    text = data[0]['now']["text"]
    return address+",當(dāng)前天氣:"+text+",溫度:"+temperature+ "℃"
          
# 天氣插件的定義
weather_tool = {
        "type": "function",
        "function": {
            "name": "get_city_weather",
            "description": "獲取某個城市的天氣",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名稱",
                    },
                },
                "required": ["city"],
            },
        }
    }

# 創(chuàng)建OpenAI客戶端,獲取API Key請看文章最后
client = OpenAI(api_key='sk-xxx')

# 定義請求GPT的通用方法
def create_completion():
    return client.chat.completions.create(
        messages=messages,
        model='gpt-3.5-turbo-1106',
        stream=False,
        tool_choice="auto",
        tools=[weather_tool]
    )


# 我的三個問題
questions = ["請問現(xiàn)在天氣怎么樣?","請問上海天氣怎么樣?","請問廣州天氣怎么樣?"]

# 聊天上下文,初始為空
messages=[]

print("---GPT天氣插件演示--- ")

# 遍歷詢問我的問題
for question in questions:  
   
    # 將問題添加到上下文中
    messages.append({
        "role": "user",
        "content": question,
    })
    print("路人甲: ",question)
    
    # 請求GPT,并拿到響應(yīng)
    response_message = create_completion().choices[0].message
    # 把響應(yīng)添加到聊天上下文中
    messages.append(response_message)
    #print(response_message)
    # 根據(jù)插件命中情況,執(zhí)行插件邏輯
    if response_message.tool_calls is not None:
        tool_call = response_message.tool_calls[0]
        #print("tool_call: ",tool_call.id)
        # 追加插件生成的天氣內(nèi)容到聊天上下文
        weather_info = get_city_weather(tool_call.function.arguments)
        #print(weather_info)
        messages.append({
            "role": "tool",
            "content": weather_info,
            "tool_call_id": tool_call.id
        })
        # 再次發(fā)起聊天
        second_chat_completion = create_completion()
        gpt_output = second_chat_completion.choices[0].message.content
        # 打印GPT合成的天氣內(nèi)容
        print("GPT: ",gpt_output)
        time.sleep(0.2)
        # 將GPT的回答也追加到上下文中
        messages.append({
            "role": "assistant",
            "content": gpt_output,
        })

以上就是本文的主要內(nèi)容,有沒有感受到插件的強(qiáng)大能力!

后續(xù)我還會繼續(xù)分享圖片、語音、文檔助手等API的使用方法。

如需GPT賬號、學(xué)習(xí)陪伴群、AI編程訓(xùn)練營,推薦關(guān)注小冊:大模型應(yīng)用開發(fā) | API 實(shí)操

關(guān)注螢火架構(gòu),加速技術(shù)提升!文章來源地址http://www.zghlxwxcb.cn/news/detail-804165.html

到了這里,關(guān)于GPT應(yīng)用開發(fā):GPT插件開發(fā)指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • CoreDX DDS應(yīng)用開發(fā)指南(1)簡介

    ????????Twin Oaks Computing,Inc.設(shè)計、開發(fā)和提供了CoreDX DDS中間件。CoreDX DDS,是OMG數(shù)據(jù)分發(fā)服務(wù)(DDS)標(biāo)準(zhǔn)的高性能、微小型體積的實(shí)現(xiàn)。CoreDX DDS以數(shù)據(jù)為中心的發(fā)布-訂閱(Data-Centric, Publish-Subscribe)消息傳遞基礎(chǔ)設(shè)施提供了高吞吐量、低延遲的數(shù)據(jù)通信。 ????????本章

    2024年02月07日
    瀏覽(19)
  • 全網(wǎng)最全Android compose開發(fā)應(yīng)用指南

    全網(wǎng)最全Android compose開發(fā)應(yīng)用指南

    Jetpack Compose 是一款基于Kotlin API,重新定義Android布局的一套框架。它可簡化并加快 Android 上的界面開發(fā)。使用更少的代碼、強(qiáng)大的工具和直觀的 Kotlin API,快速讓應(yīng)用生動而精彩。對于開發(fā)者而言最直觀的就是 節(jié)省開發(fā)時長,減少包體積,提高應(yīng)用性能 。 如果你是新項目 。

    2023年04月10日
    瀏覽(24)
  • Web 應(yīng)用項目開發(fā)的完整指南

    Web 應(yīng)用項目開發(fā)的完整指南

    目錄 一、web介紹: 二、使用IntelliJ IDEA 搭建 Web 開發(fā)環(huán)境:簡易指南 三、常用注解的使用 Web(World Wide Web)是指互聯(lián)網(wǎng)上的一個大規(guī)模信息系統(tǒng),通過超文本鏈接和互聯(lián)網(wǎng)協(xié)議進(jìn)行交互。它是一種基于客戶端-服務(wù)器模型的分布式系統(tǒng),由許多網(wǎng)絡(luò)服務(wù)器構(gòu)成,通過互聯(lián)網(wǎng)連

    2024年02月04日
    瀏覽(28)
  • 實(shí)戰(zhàn)指南 | Serverless 架構(gòu)下的應(yīng)用開發(fā)

    實(shí)戰(zhàn)指南 | Serverless 架構(gòu)下的應(yīng)用開發(fā)

    UC Berkeley認(rèn)為Serverless架構(gòu)的出現(xiàn)過程類似于40多年前從匯編語言轉(zhuǎn)向高級語言的過程,在未來Serverless架構(gòu)的使用會飆升,或許服務(wù)器式云計算并不會消失,但是將促進(jìn)BaaS發(fā)展,以更好地為Serverless架構(gòu)提供支持。 Serverless 架構(gòu)的應(yīng)用開發(fā)流程 基于 Serverless 架構(gòu)的應(yīng)用開發(fā)流程

    2024年02月12日
    瀏覽(20)
  • Android 車載應(yīng)用開發(fā)指南(3) - SystemUI 詳解

    Android 車載應(yīng)用開發(fā)指南(3) - SystemUI 詳解

    Android 車載應(yīng)用開發(fā)指南系列文章 Android 車載應(yīng)用開發(fā)指南(1)- 車載操作系統(tǒng)全解析 Android 車載應(yīng)用開發(fā)指南(2)- 應(yīng)用開發(fā)入門 Android 車載應(yīng)用開發(fā)指南(3)- SystemUI 詳解 SystemUI 全稱 System User Interface ,直譯過來就是 系統(tǒng)級用戶交互界面 ,在 Android 系統(tǒng)中由 SystemUI 負(fù)責(zé)

    2024年02月19日
    瀏覽(50)
  • 前端桌面應(yīng)用開發(fā)實(shí)踐:Electron入門指南

    隨著互聯(lián)網(wǎng)的快速發(fā)展,前端開發(fā)不再局限于網(wǎng)頁應(yīng)用,而是逐漸涉及到桌面應(yīng)用的開發(fā)。Electron作為一種流行的前端桌面應(yīng)用開發(fā)框架,為開發(fā)者提供了一種快速構(gòu)建跨平臺桌面應(yīng)用的方式。本文將介紹Electron的基本概念和使用方法,并通過一個簡單的示例來說明其開發(fā)實(shí)踐

    2024年02月11日
    瀏覽(30)
  • HarmonyOS應(yīng)用開發(fā)者高級認(rèn)證滿分指南

    聲明:由于HarmonyOS應(yīng)用開發(fā)者高級認(rèn)證的題庫一直在變,所以文章中的題目直做參考。 云函數(shù)打包完成后,需要到APPGallery Connect創(chuàng)建對應(yīng)函數(shù)的觸發(fā)器才可以在端側(cè)中調(diào)用。 【錯】 每一個自定義組件都有自己的生命周期。 【對】 基于端云一體化開發(fā),開發(fā)者需要精通前端

    2024年04月26日
    瀏覽(30)
  • HarmonyOS應(yīng)用開發(fā)者認(rèn)證題目滿分指南

    為了幫助大家快速的上手HarmonyOS應(yīng)用程序開發(fā),官方制作了一些免費(fèi)的課程:HarmonyOS第一課。每個課程后面都有一些練習(xí)題,下面就是這些題目的滿分答案。 判斷題 1.DevEco Studio是開發(fā)HarmonyOS應(yīng)用的一站式集成開發(fā)環(huán)境。 (正確) 2.main_pages.json存放頁面page路徑配置信息。(正

    2024年02月05日
    瀏覽(92)
  • CoreDX DDS應(yīng)用開發(fā)指南(15)故障排除Troubleshooting

    ????????網(wǎng)絡(luò)通信可能很難排除故障。建議開發(fā)人員熟悉開發(fā)網(wǎng)絡(luò)上可用的標(biāo)準(zhǔn)工具。例如,在UNIX下,ifconfig、netstat和route等工具對于了解網(wǎng)絡(luò)配置非常有用。此外,捕獲和解碼網(wǎng)絡(luò)流量的工具非常有用。wireshark工具具有廣泛的平臺支持,并包括用于RTPS(DDS有線協(xié)議)的

    2024年02月09日
    瀏覽(23)
  • CoreDX DDS應(yīng)用開發(fā)指南(9)服務(wù)質(zhì)量QoS

    CoreDX DDS應(yīng)用開發(fā)指南(9)服務(wù)質(zhì)量QoS

    ????????DDS的強(qiáng)大功能之一是支持各種服務(wù)質(zhì)量(QoS)設(shè)置。QoS設(shè)置允許應(yīng)用程序開發(fā)人員定制發(fā)布者、訂閱者的行為以及它們之間的通信。 ????????從DomainParticipantFactory到DataReader和DataWriter,大多數(shù)DDS實(shí)體都有一組適用的QoS設(shè)置。QoS設(shè)置包含在一個結(jié)構(gòu)中。 ?????

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包