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

AIGC: 關(guān)于ChatGPT中Function Call的調(diào)用

這篇具有很好參考價(jià)值的文章主要介紹了AIGC: 關(guān)于ChatGPT中Function Call的調(diào)用。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Function Call 概念

  • 關(guān)于 GPT 中API的function參數(shù),提供了一些能力
    • 這個(gè)函數(shù)調(diào)用是 Open AI 在2023年的6.13號發(fā)布的新能力
    • 根據(jù)它的官方描述, 函數(shù)調(diào)用能力可以讓模型輸出一個(gè)請求調(diào)用函數(shù)的消息
    • 其中包含所需調(diào)用函數(shù)的信息,以及調(diào)用函數(shù)時(shí)所需攜帶的參數(shù)的信息
  • 這種方式是一種將GPT的能力和外部的工具,外部的API連接起來的新的方式

函數(shù)調(diào)用的機(jī)制

  • 那么應(yīng)該如何去使用函數(shù)調(diào)用?
    • 首先我們需要去選擇函數(shù)調(diào)用的新模型
    • 用戶在構(gòu)造message參數(shù)時(shí)候,需要主動的告訴模型有哪些函數(shù)
    • GPT 知道我們有哪些函數(shù)之后,根據(jù)對于自然語言的理解,根據(jù)用戶的輸入
    • GPT會自行的判斷何時(shí)需要調(diào)用這些函數(shù),然后會根據(jù)目標(biāo)函數(shù)它的描述生成符合要求的請求的參數(shù)
    • 然后返回給我們,我們根據(jù)GPT的信息再去調(diào)用函數(shù)

函數(shù)的作用

  • 第一種,進(jìn)行自然語言交流時(shí),通過調(diào)用外部工具回答問題
    • 通過這種函數(shù)調(diào)用的能力,我們可以將GPT和第三方的工具去進(jìn)行一個(gè)集成,形成類似于GPT插件的這種模式
  • 第二種,如果我們有特殊的對于自然語言處理的邏輯
    • 我們可以利用GPT, 將自然語言轉(zhuǎn)換成調(diào)用API時(shí)使用的參數(shù), 或轉(zhuǎn)換成查詢數(shù)據(jù)庫時(shí)所使用的條件等等
  • 第三種,我們可以利用這種能力從文本當(dāng)中去提取一些結(jié)構(gòu)化的數(shù)據(jù),這是函數(shù)的一些基礎(chǔ)的作用。

函數(shù)調(diào)用的使用

  • 那么我們?nèi)绾稳ナ褂煤瘮?shù)調(diào)用呢?如何在它的聊天API的接口上去添加函數(shù)相關(guān)的這些參數(shù)呢?
  • 為了實(shí)現(xiàn)函數(shù)調(diào)用的能力, 在API里面有新的請求的參數(shù)就是function, function call等等, 在官方的API文檔上可以查詢
  • 在使用之前,我們先來了解一下函數(shù)調(diào)用的步驟
    • 第一步, 當(dāng)我們?nèi)フ{(diào)用函數(shù)的時(shí)候,首先我們需要在請求參數(shù)當(dāng)中向API也就是向GPT去傳遞信息, 我們要告訴GPT, 我們有哪些可以調(diào)用的函數(shù)
    • 第二步, 我們根據(jù)GPT的返回, 我們要去進(jìn)行解析, 判斷模型是不是需要調(diào)用函數(shù), 如果不需要,我們則不處理
      • 如果需要調(diào)用函數(shù),我們這里要根據(jù)需要調(diào)用的函數(shù),根據(jù)GPT輸入的參數(shù)去進(jìn)行調(diào)用
      • 調(diào)用完成之后,得到函數(shù)調(diào)用的結(jié)果
    • 最后, 我們再將函數(shù)調(diào)用的結(jié)果添加到GPT的消息列表來告訴GPT

代碼實(shí)現(xiàn)

  • 參考前文: https://blog.csdn.net/Tyro_java/article/details/134781021

1 )新增一些實(shí)現(xiàn)類,結(jié)構(gòu)如下

  • src
    • main
      • java
        • com.xxx.gpt.client
          • entity
            • ChatFunction.java
            • FunctionCallResult.java
    • test
      • java
        • com.xxx.gpt.client.test
          • FunctionCallTest.java

ChatFunction.java

package com.xxx.gpt.client.entity;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ChatFunction {
    String name;
    String description;
    ChatParameter parameters;

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ChatParameter {
        String type;
        List<String> required;
        Object properties;
    }
}
  • ChatFunction 類中包含:名稱,描述,參數(shù)等等字段

FunctionCallResult.java

package com.xxx.gpt.client.entity;

import lombok.Data;

@Data
public class FunctionCallResult {
    String name;
    String arguments;
}
  • FunctionCallResult 定義了名稱,參數(shù)的字段

FunctionCallTest.java文章來源地址http://www.zghlxwxcb.cn/news/detail-763616.html

package com.xxx.gpt.client.test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xxx.gpt.client.ChatGPTClient;
import com.xxx.gpt.client.entity.*;
import com.xxx.gpt.client.util.Proxys;
import org.junit.Before;
import org.junit.Test;

import java.net.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FunctionCallTest {
    private ChatGPTClient chatGPTClient;

    @Before
    public void before() {
        Proxy proxy = Proxys.http("127.0.0.1", 7890);
        chatGPTClient = ChatGPTClient.builder()
                .apiKey("sk-6kchn0DasdfqOJqkc3aI665ct") // 填入自己的 key
                .timeout(900)
                .proxy(proxy)
                .apiHost("https://api.openai.com/")
                .build()
                .init();
    }

    // 調(diào)用gpt的時(shí)候,帶上函數(shù)信息,讓GPT選擇是否調(diào)用
    @Test
    public void chat() {
        List<ChatFunction> functions = new ArrayList<>();
        ChatFunction function = new ChatFunction();
        function.setName("getCurrentWeather"); // 設(shè)置函數(shù)信息
        function.setDescription("獲取給定位置的當(dāng)前天氣");
        function.setParameters(ChatFunction.ChatParameter.builder()
                .type("object")
                .required(Arrays.asList("location"))
                .properties(JSON.parseObject("{\n" +
                        "          \"location\": {\n" +
                        "            \"type\": \"string\",\n" +
                        "            \"description\": \"The city and state, e.g. San Francisco, " +
                        "CA\"\n" +
                        "          },\n" +
                        "          \"unit\": {\n" +
                        "            \"type\": \"string\",\n" +
                        "            \"enum\": [\"celsius\", \"fahrenheit\"]\n" +
                        "          }\n" +
                        "        }"))
                .build());
        // 添加到列表中
        functions.add(function);
        // 構(gòu)造 message
        Message message = Message.of("上海的天氣怎么樣?");
        // 構(gòu)造調(diào)用 api 參數(shù)
        ChatCompletion chatCompletion = ChatCompletion.builder()
                .model(Model.GPT_3_5_TURBO_16K.getName())
                .messages(Arrays.asList(message))
                .functions(functions)
                .maxTokens(8000)
                .temperature(0.9)
                .build();
        // 調(diào)用
        ChatCompletionResponse response = chatGPTClient.chatCompletion(chatCompletion);
        ChatChoice choice = response.getChoices().get(0);
        Message res = choice.getMessage();
        System.out.println(res);
        // 基于 finish reason 判斷,如果是 function_call 就需要調(diào)用函數(shù)
        if ("function_call".equals(choice.getFinishReason())) {
            FunctionCallResult functionCall = res.getFunctionCall();
            String functionCallName = functionCall.getName();
            // 如果需要調(diào)用的是 getCurrentWeather
            if ("getCurrentWeather".equals(functionCallName)) {
                String arguments = functionCall.getArguments();
                JSONObject jsonObject = JSON.parseObject(arguments);
                String location = jsonObject.getString("location");
                String unit = jsonObject.getString("unit");
                // 得到最終的結(jié)果
                String weather = getCurrentWeather(location, unit);
                res.setContent("");
                // 將結(jié)果 weather 告訴GPT
                callWithWeather(weather, res, functions);
            }
        }
    }

    // 將結(jié)果傳送給GPT
    private void callWithWeather(String weather, Message res, List<ChatFunction> functions) {
        Message message = Message.of("上海的天氣怎么樣?");
        Message function1 = Message.ofFunction(weather);
        function1.setName("getCurrentWeather");
        ChatCompletion chatCompletion = ChatCompletion.builder()
                .model(Model.GPT_3_5_TURBO_16K.getName())
                .messages(Arrays.asList(message, res, function1))
                .functions(functions)
                .maxTokens(8000)
                .temperature(0.9)
                .build();
        ChatCompletionResponse response = chatGPTClient.chatCompletion(chatCompletion);
        ChatChoice choice = response.getChoices().get(0);
        Message res2 = choice.getMessage();
        //上海目前天氣晴朗,氣溫為 22 攝氏度。
        System.out.println(res2.getContent());
    }

    // 首先我們添加一個(gè)函數(shù),函數(shù)是獲取天氣的信息,這里需要傳入 location
    // return 我們這里的返回值是根據(jù)location構(gòu)造出來的一個(gè)JSON, 這里設(shè)置的固定的,就是模擬接口,或者對接天氣網(wǎng)站接口都可
    public String getCurrentWeather(String location, String unit) {
        return "{ \"temperature\": 22, \"unit\": \"celsius\", \"description\": \"晴朗\" }";
    }
}
// 本地有一個(gè)函數(shù),將函數(shù)信息告訴chatgpt,并告訴chatgpt什么情況需要調(diào)用這個(gè)函數(shù)。由chatgpt判斷是否需要調(diào)用該函數(shù),如果需要在交互中進(jìn)行調(diào)用。類似于委托機(jī)制
  • 第一步,需要告訴GPT我們有哪些函數(shù)?也就是這些函數(shù)是我們本地定義的
  • 第二步,是在調(diào)用GPT的時(shí)候帶上函數(shù)信息,然后讓GPT選擇是否調(diào)用函數(shù)
  • 第三步,解析GPT的返回,如果GPT需要調(diào)用函數(shù),我們在本地根據(jù)GPT返回的參數(shù),調(diào)用函數(shù)獲取結(jié)果,在獲取結(jié)果之后,將結(jié)果告訴GPT
  • 通過GPT的函數(shù)調(diào)用的一個(gè)簡單的示例
    • 看到通過 GPT函數(shù)調(diào)用的這種方式,可以將我們本地的一些函數(shù)
    • 可以和外部的一些第三方的工具做一個(gè)更好的集成
    • 整體的這個(gè)模式,就類似于委托的機(jī)制
  • GPT根據(jù)我們的自然語言,也就是我們的 Prompt 自行去判斷是不是需要調(diào)用函數(shù)
  • 如果需要調(diào)用的話,然后再告訴我們,由我們完成調(diào)用
  • 完成調(diào)用之后,再將調(diào)用的結(jié)果返回給它
  • 整個(gè)過程是我們和GPT的程序上的密切交互

到了這里,關(guān)于AIGC: 關(guān)于ChatGPT中Function Call的調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(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)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • 關(guān)于AI和ChatGPT的使用,AI編程(AIGC),AI繪畫(2)

    關(guān)于AI和ChatGPT的使用,AI編程(AIGC),AI繪畫(2)

    ????????AI繪畫技術(shù)是指利用人工智能技術(shù)來創(chuàng)作、生成或修改圖像、照片、插圖、漫畫等藝術(shù)品以及各種視覺效果。常見的AI繪畫技術(shù)包括機(jī)器學(xué)習(xí)、深度學(xué)習(xí)和計(jì)算機(jī)視覺等領(lǐng)域的技術(shù),通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型來實(shí)現(xiàn)自動化地生成圖像,其應(yīng)用范圍相當(dāng)廣泛,包括數(shù)字

    2024年02月08日
    瀏覽(22)
  • 關(guān)于AI和ChatGPT的使用,AI編程(AIGC),AI繪畫(3)

    關(guān)于AI和ChatGPT的使用,AI編程(AIGC),AI繪畫(3)

    1.版權(quán)和知識產(chǎn)權(quán):使用別人的AI模型進(jìn)行繪畫可能會侵犯其版權(quán)和知識產(chǎn)權(quán),需遵守相關(guān)法律法規(guī)。 2.數(shù)據(jù)隱私:在使用AI繪畫應(yīng)用時(shí),可能需要提供個(gè)人圖像或圖片等數(shù)據(jù),要謹(jǐn)慎保護(hù)數(shù)據(jù)隱私,防止被濫用。 3.算法可解釋性:需要考慮AI繪畫算法的可解釋性,確保結(jié)果符

    2024年02月11日
    瀏覽(23)
  • 【OpenAI】ChatGPT函數(shù)調(diào)用(Function Calling)實(shí)踐 | 京東云技術(shù)團(tuán)隊(duì)

    6月13日OpenAI在Chat Completions API中添加了新的函數(shù)調(diào)用(Function Calling)能力,幫助開發(fā)者通過API方式實(shí)現(xiàn)類似于ChatGPT插件的數(shù)據(jù)交互能力。 本文在作者上一篇文章《私有框架代碼生成實(shí)踐》的基礎(chǔ)上,依舊使用自然語言低代碼搭建場景作為案例,將嵌入向量搜索(Embedding)獲

    2024年02月12日
    瀏覽(19)
  • ChatGPT 教程——關(guān)于如何使用 OpenAI ChatGPT 的指南

    OpenAI 去年 11 月推出了他們的新產(chǎn)品 OpenAI ChatGPT,全世界都為之瘋狂。本文“? ChatGPT 教程 – 如何使用 OpenAI ChatGPT 指南” ?將涵蓋您需要了解的有關(guān) ChatGPT 的所有內(nèi)容。 OpenAI 開發(fā)了 ChatGPT 作為其 GPT-3 AI-NLP 模型的產(chǎn)品。這種生成式 AI 模型的開發(fā)方式可以對任何給定提示提供

    2024年02月09日
    瀏覽(24)
  • AIGC: 關(guān)于ChatGPT中對輸出文本進(jìn)行審核

    違禁詞 與 logit_bias 參數(shù) 前文,通過GPT的API實(shí)現(xiàn)了一個(gè)簡單的聊天機(jī)器人, 當(dāng)然也可以做一些內(nèi)容審核相關(guān)的應(yīng)用 這里有一個(gè)非常核心,需要重點(diǎn)關(guān)注的一個(gè)方向,就是對于文本的審核 對于一些違禁詞,我們需要準(zhǔn)確的識別出來,避免出現(xiàn) 對于我們構(gòu)建的 Prompt,其實(shí)還比較

    2024年02月04日
    瀏覽(17)
  • AIGC: 關(guān)于ChatGPT中進(jìn)行情感分析的功能

    概念 GPT是基于大模型去進(jìn)行的機(jī)器學(xué)習(xí)的訓(xùn)練,對于機(jī)器學(xué)習(xí)相關(guān)的概念它是比較了解的 比如: 文本的分類, 文本的情感分析等等 相關(guān)的機(jī)器學(xué)習(xí)的功能,GPT如何支持?是否有相關(guān)接口供我們調(diào)用? 有的,文檔地址: https://platform.openai.com/docs/api-reference/embeddings/create 基于這個(gè)接

    2024年02月04日
    瀏覽(18)
  • 關(guān)于ChatGPT等AIGC技術(shù)對人類社會的影響

    關(guān)于ChatGPT等AIGC技術(shù)對人類社會的影響

    梗概 橫空出世的ChatGPT作為新一代人工智能技術(shù),開啟了通用人工智能時(shí)代,標(biāo)志著人工智能具有廣泛的學(xué)習(xí)能力并在大多數(shù)領(lǐng)域達(dá)到或超過普通人類的水平,其社會影響將巨大而深遠(yuǎn)。面對這一新傳播范式,對其原理架構(gòu)與應(yīng)用創(chuàng)新解析、風(fēng)險(xiǎn)認(rèn)知、應(yīng)對策略的相關(guān)研究刻

    2024年02月08日
    瀏覽(26)
  • AIGC: 關(guān)于ChatGPT中實(shí)現(xiàn)一個(gè)聊天機(jī)器人

    規(guī)劃一個(gè)聊天機(jī)器人 智能化完全于依托于GPT, 而產(chǎn)品化是我們需要考慮的事情 比如,如何去構(gòu)建一個(gè)聊天機(jī)器人 聊天機(jī)器人它的處理邏輯其實(shí)非常的清晰 我們輸入問題調(diào)用 GPT 然后,GPT 給我們生成回答就可以了 需要注意的是,聊天機(jī)器人不同于調(diào)用API進(jìn)行一個(gè)簡單的測試

    2024年02月04日
    瀏覽(25)
  • AIGC: 關(guān)于ChatGPT抽象Prompt提問模板的設(shè)計(jì)

    為什么需要Prompt模板 基于前文我們具備了Prompt構(gòu)建的基礎(chǔ)能力,但是我們在實(shí)際編寫Prompt的過程當(dāng)中,可能還會存在一些的問題 比如對于背景和細(xì)節(jié)的描述還是不夠 或者為了描述的清楚堆砌了大量的文字, 導(dǎo)致整個(gè)Prompt的結(jié)構(gòu)化和可讀性是比較差的 從而GPT沒有正確理解需求

    2024年02月04日
    瀏覽(21)
  • AIGC: 關(guān)于ChatGPT這個(gè)智能工具帶來的幾點(diǎn)思考

    ChatGPT的出現(xiàn) 2022年11月底,ChatGPT 上線,引爆 AI 圈 和 科技圈,2023年春節(jié)后, 人人都開始關(guān)注并討論這項(xiàng)新技術(shù) 它是 OpenAI 研發(fā)的智能聊天工具, 基于GPT語言模型,模擬人類的對話方式 默認(rèn)只能用文字進(jìn)行交互,理解多種語言,有一些插件,可用語音,圖表等 截止現(xiàn)在,Chat

    2024年02月04日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包