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

C#使用詞嵌入向量與向量數(shù)據(jù)庫為大語言模型(LLM)賦能長期記憶實現(xiàn)私域問答機(jī)器人落地

這篇具有很好參考價值的文章主要介紹了C#使用詞嵌入向量與向量數(shù)據(jù)庫為大語言模型(LLM)賦能長期記憶實現(xiàn)私域問答機(jī)器人落地。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?

本文將探討如何使用c#開發(fā)基于大語言模型的私域聊天機(jī)器人落地。大語言模型(Large Language Model,LLM 這里主要以chatgpt為代表的的文本生成式人工智能)是一種利用深度學(xué)習(xí)方法訓(xùn)練的能夠生成人類語言的模型。這種模型可以處理大量的文本數(shù)據(jù),并學(xué)習(xí)從中獲得的模式,以預(yù)測在給定的文本上下文中最可能出現(xiàn)的下一個詞。 在一般場景下LLM可以理解用戶提出的問題并生成相應(yīng)的回答。然而由于其訓(xùn)練時的數(shù)據(jù)限制LLM無法處理特定領(lǐng)域的問題。因此我們需要探索一種方法讓LLM能夠獲取并利用長期記憶來提高問答機(jī)器人的效果。

這里我們主要是用到了詞嵌入向量表示以及對應(yīng)的向量數(shù)據(jù)庫持久化存儲,并且通過相似度計算得到長期記憶用于模型對特定領(lǐng)域的特定問題進(jìn)行作答。詞嵌入是自然語言處理(NLP)中的一個重要概念,它是將文本數(shù)據(jù)轉(zhuǎn)換成數(shù)值型的向量,使得機(jī)器可以理解和處理。詞嵌入向量可以捕獲詞語的語義信息,如相似的詞語會有相似的詞嵌入向量。而向量數(shù)據(jù)庫則是一種專門用來存儲和檢索向量數(shù)據(jù)的數(shù)據(jù)庫,它可以高效地對大量的向量進(jìn)行相似性搜索。

?

?

目標(biāo):如何利用C#,詞嵌入技術(shù)和向量數(shù)據(jù)庫,使LLM實現(xiàn)長期記憶,以落地私域問答機(jī)器人?;谝陨夏康模覀冃枰瓿梢韵聨讉€步驟,從而實現(xiàn)將大語言模型與私域知識相結(jié)合來落地問答機(jī)器人。

?

一、私域知識的構(gòu)建與詞嵌入向量的轉(zhuǎn)換

?

首先我們應(yīng)該收集私域知識的文本語料,通過清洗處理得到高質(zhì)量的語意文本。接著我們將這些文本通過調(diào)用OpenAI的詞嵌入向量接口轉(zhuǎn)化為詞嵌入向量表示的數(shù)組

這里我們以ChatGLM為例,ChatGLM是清華大學(xué)開源的文本生成式模型,其模型開源于2023年。所以在ChatGPT的知識庫中并不會包含相關(guān)的領(lǐng)域知識。當(dāng)直接使用ChatGPT進(jìn)行提問時,它的回答是這樣的

C#使用詞嵌入向量與向量數(shù)據(jù)庫為大語言模型(LLM)賦能長期記憶實現(xiàn)私域問答機(jī)器人落地

?由于只是演示這里我們只準(zhǔn)備一條關(guān)于chatglm的知識。通過調(diào)用openai的接口,將它轉(zhuǎn)化成詞嵌入向量

原始語料:ChatGLM是一個開源的清華技術(shù)成果轉(zhuǎn)化的公司智譜AI研發(fā)的支持中英雙語的對話機(jī)器人它支持中英雙語問答的對話語言模型,基于 General Language Model (GLM) 架構(gòu),具有 62 億參數(shù)。結(jié)合模型量化技術(shù),用戶可以在消費級的顯卡上進(jìn)行本地部署(INT4 量化級別下最低只需 6GB 顯存)。ChatGLM-6B 使用了和 ChatGLM 相同的技術(shù),針對中文問答和對話進(jìn)行了優(yōu)化。經(jīng)過約 1T 標(biāo)識符的中英雙語訓(xùn)練,輔以監(jiān)督微調(diào)、反饋自助、人類反饋強(qiáng)化學(xué)習(xí)等技術(shù)的加持,62 億參數(shù)的 ChatGLM-6B 已經(jīng)能生成相當(dāng)符合人類偏好的回答。

  接著準(zhǔn)備好一個openai的開發(fā)者key,我們將這段文本轉(zhuǎn)化成詞嵌入,這里我使用Betalgo.OpenAI.GPT3這個Nuget包,具體代碼如下:

var embeddings = await new OpenAiOptions() { ApiKey = key }.Embeddings.CreateEmbedding(new EmbeddingCreateRequest()
            {
                InputAsList = inputs.ToList(),
                Model = OpenAI.GPT3.ObjectModels.Models.TextEmbeddingAdaV2
            });
return embeddings.Data.Select(x => x.Embedding).ToList();

  這里的inputs就是你的句子數(shù)組,由于這個接口可以一次處理多條句子,所以這里可以傳入句子數(shù)組來實現(xiàn)批處理。

接著這里會返回詞嵌入向量結(jié)果,類似如下的list<double>:

[-0.0020597207,-0.012355088,0.0037828966,-0.032127112,-0.04815184,0.016633095,-0.01277577,........]

  

二、對詞嵌入向量的理解和使用

接著我們需要使用一個向量數(shù)據(jù)庫,這里由于只是演示,我就是用elasticsearch這樣的支持向量存儲的搜索引擎來保存。這里我使用NEST作為操作ES的包

首先我們構(gòu)建一個對應(yīng)的實體用于讀寫ES,這里的向量維度1536是openai的詞嵌入向量接口的數(shù)組長度,如果是其他詞嵌入技術(shù),則需要按需定義維度

    public class ChatGlmVector
    {
        public ChatGlmVector()
        {
            Id = Id ?? Guid.NewGuid().ToString();
        }
        [Keyword]
        public string Id { get; set; }

        [Text]
        public string Text { get; set; }

        [DenseVector(Dimensions = 1536)]
        public IList<double> Vector { get; set; }
    }

    接著我們使用NEST創(chuàng)建一個索引名(IndexName)并存儲剛才得到的文本和向量表示,這里的item就是上文的ChatGlmVector實例。

if (!elasticClient.Indices.Exists(IndexName).Exists)
  elasticClient.Indices.Create(IndexName, c => c.Map<ChatGlmVector>(m => m.AutoMap()));
await elasticClient.IndexAsync(item, idx => idx.Index(IndexName));

三、用戶問題的處理與相似度計算

  用戶問題的處理和知識處理相似,將用戶問題轉(zhuǎn)化成詞嵌入向量。這里主要講一下如何基于ES做相似度搜索,以下是原始的請求es的json表示

POST /my_index/_search
{
  "size": 3,    // 返回前3個最相似的文檔
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": "def cosineSim = cosineSimilarity(params.queryVector, 'vector'); if (cosineSim > 0.8) return cosineSim; else return 0;",
              "params": {
                "queryVector": [1.0, 2.0, 3.0]   // 要查詢的向量
              }
            }
          }
        }
      ],
      "boost_mode": "replace"
    }
  }
}

  我們在c#中使用NEST的表示可以通過如下代碼來完成,這里我們以0.8作為一個閾值來判斷相似度最低必須高于這個數(shù)字,否則可以判斷用戶問題與知識沒有關(guān)聯(lián)性。當(dāng)然這個值可以根據(jù)實際情況調(diào)整。

var scriptParams = new Dictionary<string, object>
{
    {"queryVector", new double[]{1.0, 2.0, 3.0}}
};

var script = new InlineScript("def cosineSim = cosineSimilarity(params.queryVector, 'vector'); if (cosineSim > 0.8) return cosineSim; else return 0;")
{
    Params = scriptParams
};

var searchResponse = client.Search<object>(s => s
    .Size(3)
    .Query(q => q
        .FunctionScore(fs => fs
            .Query(qq => qq
                .MatchAll()
            )
            .Functions(fu => fu
                .ScriptScore(ss => ss
                    .Script(sc => script)
                )
            )
            .BoostMode(FunctionBoostMode.Replace)
        )
    )
);

四、構(gòu)建精巧的prompt與OpenAI的chat接口的使用

  這里我們就可以通過一些混合一些提示+長記憶+用戶問題作為完整的prompt喂給chatgpt得到回答

            return (await GetOpenAIService().ChatCompletion.CreateCompletion(new ChatCompletionCreateRequest()
            {
                Messages=new List<ChatMessage>() {
                ChatMessage.FromUser("你是一個智能助手,你需要根據(jù)下面的事實依據(jù)回答問題。如果用戶輸入不在事實依據(jù)范圍內(nèi),請說\"抱歉,這個問題我不知道。\""),
ChatMessage.FromUser($"事實依據(jù):{這里需要從ES查詢出相似度最高的文本作為LLM的長期記憶}"),
ChatMessage.FromUser($"用戶輸入:{這里是用戶的原始問題}")
                },
                Model = OpenAI.GPT3.ObjectModels.Models.ChatGpt3_5Turbo
            })).Choices.FirstOrDefault().Message;

  當(dāng)我們使用新的提示詞提問后,chatgpt就可以準(zhǔn)確的告訴你相關(guān)的回答:

C#使用詞嵌入向量與向量數(shù)據(jù)庫為大語言模型(LLM)賦能長期記憶實現(xiàn)私域問答機(jī)器人落地

?寫在最后

  ChatGPT的出現(xiàn)已經(jīng)徹底改變了這個世界,作為一個開發(fā)人員,我們能做的只能盡量跟上技術(shù)的腳步。在這個結(jié)合C#、詞嵌入技術(shù)和向量數(shù)據(jù)庫將大語言模型成功應(yīng)用到私域問答機(jī)器人的案例中只是大語言模型落地的冰山一角,這僅僅是開始,我們還有許多可能性等待探索........文章來源地址http://www.zghlxwxcb.cn/news/detail-437390.html

到了這里,關(guān)于C#使用詞嵌入向量與向量數(shù)據(jù)庫為大語言模型(LLM)賦能長期記憶實現(xiàn)私域問答機(jī)器人落地的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 向量數(shù)據(jù)庫:使用Elasticsearch實現(xiàn)向量數(shù)據(jù)存儲與搜索

    Here’s the table of contents: ??Elasticsearch在7.x的版本中支持 向量檢索 。在向量函數(shù)的計算過程中,會對所有匹配的文檔進(jìn)行線性掃描。因此,查詢預(yù)計時間會隨著匹配文檔的數(shù)量線性增長。出于這個原因,建議使用查詢參數(shù)來限制匹配文檔的數(shù)量(類似二次查找的邏輯,先使

    2024年02月07日
    瀏覽(97)
  • 如何使用 Elasticsearch 作為向量數(shù)據(jù)庫

    如何使用 Elasticsearch 作為向量數(shù)據(jù)庫

    在今天的文章中,我們將很快地通過 Docker 來快速地設(shè)置 Elasticsearch 及 Kibana,并設(shè)置 Elasticsearch 為向量搜索。 在上面,我們指定了 elasic 超級用戶的密碼為 password。這在下面將要使用到。 驗證容器是否已啟動并正在運行: 從上面我們可以看到 Elasticsarch 及 Kibana 已經(jīng)完全運行

    2024年04月17日
    瀏覽(95)
  • 《向量數(shù)據(jù)庫指南》:使用公共的Pinecone數(shù)據(jù)集

    《向量數(shù)據(jù)庫指南》:使用公共的Pinecone數(shù)據(jù)集

    目錄 數(shù)據(jù)集包含向量和元數(shù)據(jù) 列出公共數(shù)據(jù)集 加載數(shù)據(jù)集 迭代數(shù)據(jù)集 分批迭代文檔并插入到索引中。 將數(shù)據(jù)集插入為數(shù)據(jù)幀。 接下來怎么做 本文檔介紹如何使用現(xiàn)有的Pinecone數(shù)據(jù)集。 要了解創(chuàng)建和列出數(shù)據(jù)集的方法,請參閱創(chuàng)建數(shù)據(jù)集。 ?

    2024年02月16日
    瀏覽(95)
  • 使用docker搭建Milvus向量數(shù)據(jù)庫

    使用docker搭建Milvus向量數(shù)據(jù)庫

    官網(wǎng)是這樣說的: Milvus創(chuàng)建于2019年,目標(biāo)單一:存儲、索引和管理由深度神經(jīng)網(wǎng)絡(luò)和其他機(jī)器學(xué)習(xí)(ML)模型生成的大量嵌入向量。 作為一個專門用于處理輸入向量查詢的數(shù)據(jù)庫,它能夠?qū)θf億規(guī)模的向量進(jìn)行索引。與現(xiàn)有的關(guān)系數(shù)據(jù)庫不同,Milvus主要按照預(yù)定義的模式處

    2024年02月09日
    瀏覽(93)
  • 開源模型應(yīng)用落地-工具使用篇-向量數(shù)據(jù)庫(三)

    開源模型應(yīng)用落地-工具使用篇-向量數(shù)據(jù)庫(三)

    一、前言 ? ? 通過學(xué)習(xí)\\\"開源模型應(yīng)用落地\\\"系列文章,我們成功地建立了一個完整可實施的AI交付流程。現(xiàn)在,我們要引入向量數(shù)據(jù)庫,作為我們AI服務(wù)的二級緩存。本文將詳細(xì)介紹如何使用Milvus Lite來為我們的AI服務(wù)部署一個前置緩存。 二、術(shù)語 2.1、向量數(shù)據(jù)庫 ? ? 向量數(shù)

    2024年02月19日
    瀏覽(88)
  • 向量數(shù)據(jù)庫:usearch的簡單使用+實現(xiàn)圖片檢索應(yīng)用

    向量數(shù)據(jù)庫:usearch的簡單使用+實現(xiàn)圖片檢索應(yīng)用

    usearch是快速開源搜索和聚類引擎×,用于C++、C、Python、JavaScript、Rust、Java、Objective-C、Swift、C#、GoLang和Wolfram ??中的向量和??字符串× 一個簡單的例子(注:本例子在運行時向index中不斷添加項目,并將最后的index持久化為一個文件,在運行時由于添加項目內(nèi)存占用會不斷增

    2024年02月02日
    瀏覽(96)
  • ModaHub魔搭社區(qū):如何基于向量數(shù)據(jù)庫+LLM(大語言模型),打造更懂你的企業(yè)專屬Chatbot?

    目錄 1、為什么Chatbot需要大語言模型+向量數(shù)據(jù)庫? 2、什么是向量數(shù)據(jù)庫? 3、LLM大語言模型+ADB-PG:打造企業(yè)專屬Chatbot 4、ADB-PG:內(nèi)置向量檢索+全文檢索的一站式企業(yè)知識數(shù)據(jù)庫 5、總結(jié) 這個春天,最讓人震感的科技產(chǎn)品莫過于ChatGPT的橫空出世,通過大語言模型(LLM)讓人們看到了生成

    2024年02月11日
    瀏覽(87)
  • Spring AI - 使用向量數(shù)據(jù)庫實現(xiàn)檢索式AI對話

    Spring AI - 使用向量數(shù)據(jù)庫實現(xiàn)檢索式AI對話

    ?Spring AI 并不僅限于針對大語言模型對話API進(jìn)行了統(tǒng)一封裝,它還可以通過簡單的方式實現(xiàn)LangChain的一些功能。本篇將帶領(lǐng)讀者實現(xiàn)一個簡單的檢索式AI對話接口。 ?在一些場景下,我們想讓AI根據(jù)我們提供的數(shù)據(jù)進(jìn)行回復(fù)。因為對話有最大Token的限制,因此很多場景下我們

    2024年04月14日
    瀏覽(93)
  • 向量數(shù)據(jù)庫入坑:傳統(tǒng)文本檢索方式的降維打擊,使用 Faiss 實現(xiàn)向量語義檢索

    在上一篇文章《聊聊來自元宇宙大廠 Meta 的相似度檢索技術(shù) Faiss》中,我們有聊到如何快速入門向量檢索技術(shù),借助 Meta AI(Facebook Research)出品的 faiss 實現(xiàn)“最基礎(chǔ)的文本內(nèi)容相似度檢索工具”,初步接觸到了“語義檢索”這種對于傳統(tǒng)文本檢索方式具備“降維打擊”的新

    2024年02月16日
    瀏覽(96)
  • 使用Langchain+GPT+向量數(shù)據(jù)庫chromadb 來創(chuàng)建文檔對話機(jī)器人

    使用Langchain+GPT+向量數(shù)據(jù)庫chromadb 來創(chuàng)建文檔對話機(jī)器人

    使用Langchain+GPT+向量數(shù)據(jù)庫chromadb 來創(chuàng)建文檔對話機(jī)器人 文件存放地址 參考: https://python.langchain.com/docs/use_cases/chatbots https://python.langchain.com/docs/integrations/vectorstores/chroma https://blog.csdn.net/v_JULY_v/article/details/131552592?ops_request_misc=%257B%2522request%255Fid%2522%253A%252216945020581680022659096

    2024年02月03日
    瀏覽(93)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包