欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫

 更新時間:2023年09月24日 10:11:27   作者:莫大  
這篇文章主要為大家介紹了golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

  • 將數(shù)據(jù)集 通過 openai embedding 得到向量+組裝payload,存入 qdrant
  • 用戶進行問題搜索,通過 openai embedding 得到向量,從 qdrant 中搜索相似度大于0.8的數(shù)據(jù)
  • 從 qdrant 中取出數(shù)據(jù)得到參考答案

將問題標(biāo)題+參考答案,組裝成promot 向gpt進行提問,得到偏向于 已有知識庫設(shè)定的擴展知識回答

kbai 知識庫的導(dǎo)入和搜索

倉庫地址:https://github.com/webws/embedding-knowledge-base

kabi 是使用 golang 基于 openai chatgpt embedding + qdrant 實現(xiàn)知識庫的導(dǎo)入和問答

? kabi -h
a local knowledge base, based on chatgpt and qdrant
usage:
  kbai [flags]
  kbai [command]
available commands:
  completion  generate the autocompletion script for the specified shell
  help        help about any command
  import      import data to vector database
  search      ask the knowledge base example: kbai ask --msg 'first, the chicken or the egg'
flags:
      --apikey string       openai apikey:default from env apikey
      --collection string   qdrant collection name default: kubernetes (default "kubernetes")
  -h, --help                help for kbai
      --proxy string        http client proxy default:socks5://127.0.0.1:1080  (default "socks5://127.0.0.1:1080")
      --qdrant string       qdrant address default: 127.0.0.1:6334 (default "127.0.0.1:6334")
      --vectorsize uint     qdrant vector size default: 1536 (default 1536)
use "kbai [command] --help" for more information about a command.

啟動向量數(shù)據(jù)庫

qdrant 是一個開源的向量搜索引擎,支持多種向量距離計算方式

docker 運行 qdrant

docker run --rm -p 6334:6334 qdrant/qdrant

kbai庫導(dǎo)入數(shù)據(jù)到知識庫

clone 源碼運行(后續(xù)提供二進制文件)

git clone https://github.com/webws/embedding-knowledge-base.git
cd ./embedding-knowledge-base

這里使用的測試數(shù)據(jù)是k8s相關(guān)的知識庫,真實數(shù)據(jù)需自己準(zhǔn)備

1.設(shè)置 openai apikey

export apikey=xxx

2.導(dǎo)入知識庫(源碼運行)

go run ./ import --datafile ./example/data.json

data.json 數(shù)據(jù)格式如下,為 真實數(shù)據(jù)需自己準(zhǔn)備

[
    {
        "questions": "這是問題",
        "answers": "這是答案"
    },
]

說明:

默認的 代理 是 "socks5://127.0.0.1:1080" 自定義 可使用 --proxy 指定

kbai 搜索數(shù)據(jù)

搜索問題(源碼執(zhí)行)

go run ./ search --msg "網(wǎng)關(guān)是什么"

回答

the answer to the knowledge base:
在kubernetes中,網(wǎng)關(guān)通常指的是ingress(入 口)資源對象。ingress是一種kubernetes api對象,用于配置和管理集群中的http和https流量入口。它充當(dāng)了從集群外部訪問集群內(nèi)部服務(wù)的入口點

results of chatgpt answers  with reference answers:
,同時提供負載均衡、ssl/tls終止和基于域名的路由等功能。ingress資源對象定義了一組規(guī)則,這些規(guī)則指定了通過特定http路徑或主機名將請求路由到后端服務(wù)的方式??梢允褂貌煌膇ngress控制器實現(xiàn)這些規(guī)則,如nginx、traefik等。這樣就可以在集群中創(chuàng)建多個ingress資源對象來管理不同的流量入口。

only chatgpt answers:
網(wǎng)關(guān)是一種網(wǎng)絡(luò)設(shè)備,用于連接兩個或多個不同類型的網(wǎng)絡(luò),以便實現(xiàn)數(shù)據(jù)以不同協(xié)議進行傳遞和轉(zhuǎn)換。網(wǎng)關(guān)起到了連接不同網(wǎng)絡(luò)之間的橋梁作用,將兩個或多個網(wǎng)絡(luò)互相連接起來,并負責(zé)數(shù)據(jù)的路由和轉(zhuǎn)發(fā)。網(wǎng)關(guān)可以是硬件設(shè)備,如路由器,也可以是軟件程序,如互聯(lián)網(wǎng)網(wǎng)關(guān)。網(wǎng)關(guān)通常用于連接本地網(wǎng)絡(luò)與互聯(lián)網(wǎng),使得局域網(wǎng)中的計算機能夠訪問互聯(lián)網(wǎng)上的資源。除了連接不同網(wǎng)絡(luò)的功能,網(wǎng)關(guān)還可以實現(xiàn)安全性、負載均衡、數(shù)據(jù)過濾等功能。

  • 第一個是知識庫的回答(the answer to the knowledge base):
  • 第二個 是結(jié)合知識庫 chatgpt 的回答(results of chatgpt answers with reference answers)
  • 第三個 僅chatgpt 回答

可以看出 直接問chatgpt,得到的答案可能跟k8s無關(guān),結(jié)合k8s本地知識庫,可以讓回答偏向 數(shù)據(jù)集設(shè)定的主題

如果直接搜索 與知識庫無關(guān)或違規(guī)問題,將搜索不到任務(wù)數(shù)據(jù)

go run ./ search --msg "蘋果不洗能吃嗎"
rearch term violation or exceeding category

kabi golang 實現(xiàn) ai知識庫導(dǎo)入原理

導(dǎo)入

  • 接入 qdrant 和 openai cleint
  • 解釋原始知識庫數(shù)據(jù) 為 q(問) a(答)
  • 將 問題 經(jīng)過 openai embedding 得到向量+答案存入 qdrant

以下是 kbai go 導(dǎo)入邏輯代碼

qdrantclient := qdrant.newqdrantclient(configflags.qdrant, configflags.collection, configflags.vectorsize)
            defer qdrantclient.close()
            aiclient, err := ai.newaiclient(configflags.proxy, configflags.apikey)
            if err != nil {
                return err
            }
            if err = qdrantclient.createcollection(configflags.collection, configflags.vectorsize); err != nil {
                return err
            }
            qas, err := converttoqas(datafile)
            if err != nil {
                return err
            }
            points := []*pb.pointstruct{}
            logger.infow("import", "data", qas)
            qpslenth := len(qas)
            for i, qa := range qas {
                embedding, err := aiclient.simplegetvec(qa.questions)
                if err != nil {
                    logger.errorw("simplegetvec", "err", err, "question", qa.questions, "index", i, "total", qpslenth)
                    return err
                }
                point := buildpoint(qa.questions, qa.answers, embedding)
                points = append(points, point)
            }

搜索

  • 問題搜索,通過 openai embedding 得到向量
  • 根據(jù)向量 從 qdrant 中搜索相似度大于0.8的數(shù)據(jù)
  • 根據(jù) qdrant 里的知識庫答案(參考答案) + 從 chatgpt 提問 得到擴展知識

以下是 kbai go 搜索代碼邏輯

qdrantclient := qdrant.newqdrantclient(configflags.qdrant, configflags.collection, configflags.vectorsize)
            defer qdrantclient.close()
            aiclient, err := ai.newaiclient(configflags.proxy, configflags.apikey)
            if err != nil {
                return err
            }
            vector, err := aiclient.simplegetvec(msg)
            if err != nil {
                return err
            }
            points, err := qdrantclient.search(vector)
            if err != nil {
                logger.errorw("qdrant search fail", "err", err)
                return err
            }
            if len(points) == 0 {
                fmt.println("rearch term violation or exceeding category")
                return nil
                // return errors.new("rearch term violation or exceeding category")
            }
            // score less than 0.8, rearch term violation or exceeding category
            if points[0].score < 0.8 {
                fmt.println("rearch term violation or exceeding category")
                return nil
                // return errors.new("rearch term violation or exceeding category")
            }

以上就是golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫的詳細內(nèi)容,更多關(guān)于golang cobra ai知識庫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go?結(jié)構(gòu)體序列化的實現(xiàn)

    Go?結(jié)構(gòu)體序列化的實現(xiàn)

    本文主要介紹了Go?結(jié)構(gòu)體序列化的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解Golang如何優(yōu)雅判斷interface是否為nil

    詳解Golang如何優(yōu)雅判斷interface是否為nil

    這篇文章主要為大家詳細介紹了Golang如何優(yōu)雅判斷interface是否為nil的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解下
    2024-01-01
  • golang defer執(zhí)行順序全面詳解

    golang defer執(zhí)行順序全面詳解

    這篇文章主要為大家介紹了golang defer執(zhí)行順序全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Go語言標(biāo)準(zhǔn)錯誤error全面解析

    Go語言標(biāo)準(zhǔn)錯誤error全面解析

    Go語言中的錯誤處理是通過內(nèi)置的error接口來實現(xiàn)的,其中errorString和wrapError是兩種常見的錯誤類型實現(xiàn)方式,errorString通過errors.New()方法實現(xiàn),而wrapError則通過fmt.Errorf()方法實現(xiàn),支持錯誤的嵌套和解析
    2024-10-10
  • GoLang context包的使用方法介紹

    GoLang context包的使用方法介紹

    日常Go開發(fā)中,Context包是用的最多的一個了,幾乎所有函數(shù)的第一個參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實現(xiàn)是如何呢?相信你也一定會有探索的欲望,那么就跟著本篇文章,一起來學(xué)習(xí)吧
    2023-03-03
  • 解決go獲取文件md5值不正確的問題

    解決go獲取文件md5值不正確的問題

    本文主要介紹了解決go獲取文件md5值不正確的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Golang底層原理解析String使用實例

    Golang底層原理解析String使用實例

    這篇文章主要為大家介紹了Golang底層原理解析String使用實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • go語言中iota和左移右移的使用說明

    go語言中iota和左移右移的使用說明

    這篇文章主要介紹了go語言中iota和左移右移的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 6行代碼快速解決golang TCP粘包問題

    6行代碼快速解決golang TCP粘包問題

    在用golang開發(fā)人工客服系統(tǒng)的時候碰到了粘包問題,那么什么是粘包呢?下面這篇文章主要給大家介紹了關(guān)于如何通過6行代碼快速解決golang TCP粘包問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • golang進程在docker中OOM后hang住問題解析

    golang進程在docker中OOM后hang住問題解析

    這篇文章主要介紹了golang進程在docker中OOM后hang住問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論