天天看點

使用goframe架構,非常簡單就能實作chatgpt接口調用,文檔豐富

目錄

    • 1,關于goframe
    • 2,使用goframe客戶的方法
    • 3,總結

1,關于goframe

最近在使用goframe的架構,發現內建了很多新的方法,特别的好用。

元件也是十分的豐富了。

開源項目位址:

項目位址:https://goframe.org/

GoFrame是一款子產品化、低耦合設計的開發架構,包含了常用的基礎元件和開發工具,既可以作為完整的業務項目架構使用也可以作為獨立的元件庫使用。我們為大家提供的快速開始章節,主要以完整的業務項目介紹架構的基本入門和使用。關于獨立元件庫使用,可以檢視獨立的元件章節介紹。

https://blog.csdn.net/freewebsys/article/details/129698017

2,使用goframe客戶的方法

接口文檔:

https://goframe.org/pages/viewpage.action?pageId=59864757

使用類型轉換:

https://goframe.org/pages/viewpage.action?pageId=17203726

c := g.Client()

就可以通路了,使用的是流式處理方法。

可以直接獲得結果的内容。

// 傳回content為string類型

content := g.Client().GetContent(ctx, “https://goframe.org”)

以Bytes及Content字尾結尾的請求方法為直接擷取傳回内容的快捷方法,這些方法将會自動讀取服務端傳回内容并自動關閉請求連接配接。*Bytes方法用于擷取[]byte類型結果,*Content方法用于擷取string類型結果。需要注意的是,如果請求執行失敗,傳回内容将會為空。

其實很多看着很重複的工作需要封裝下,就像。

直接傳回字元串即可。

調用chatgpt 代碼就變得非常簡單了:

package main

import (
    "fmt"
    "github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
    "github.com/gogf/gf/v2/util/gconv"
)

// 接口文檔:
// https://goframe.org/pages/viewpage.action?pageId=59864757

// 使用類型轉換:
// https://goframe.org/pages/viewpage.action?pageId=17203726

type ChatChoiceMsg struct {
    Role string `json:"role"`
    Content string `json:"content"`
}
type ChatChoice struct {
    Message ChatChoiceMsg `json:"message"`
}
type ChatRes struct {
    Id string `json:"id"`
    Object string `json:"object"`
    Created int64 `json:"created"`
    Model string `json:"model"`
    Choices []ChatChoice `json:"choices"`
}

var ApiKey string = "xxxx"

func main() {

    c := g.Client()
    c.SetHeader("Accept", "text/event-stream")
    c.SetHeader("Content-Type", "application/json")
	c.SetHeader("Authorization", "Bearer " + ApiKey)
    
    question := "介紹大衆汽車"
    params := `{
		"model": "gpt-3.5-turbo",
		"messages": [{"role": "user", "content": "` + question + `"}]
	}`

    fmt.Println(params)
    // /v1/chat/completions
    url := "https://api.openai.com/v1/chat/completions"
    // 發送資料
    out := c.ContentJson().PostContent(gctx.New(), url, params)

    fmt.Println(out)
    var chatRes ChatRes
    if err := gconv.Structs(out, &chatRes); err == nil {
        fmt.Println(chatRes)
        if len(chatRes.Choices) > 0 {
            fmt.Println(chatRes.Choices[0].Message.Content)
        }
	}else{
		panic(err)
    }
}
           

同時還将結果反序列化了。gconv.Structs 方法可以把json 轉換成對象。

然後直接使用對象的屬性就可以了。代碼還是非常的少的。

3,總結

goframe裡面有很多非常實用的工具類,可以非常友善的解決開發中遇到的問題。

類似spring 庫和 apache 庫,都喲非常豐富的基礎類,同時文檔非常強大。

可以直接使用即可。

繼續閱讀