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

基于GPT3.5實(shí)現(xiàn)本地知識(shí)庫(kù)解決方案-利用向量數(shù)據(jù)庫(kù)和GPT向量接口-實(shí)現(xiàn)智能回復(fù)并限制ChatGPT回答的范圍...

這篇具有很好參考價(jià)值的文章主要介紹了基于GPT3.5實(shí)現(xiàn)本地知識(shí)庫(kù)解決方案-利用向量數(shù)據(jù)庫(kù)和GPT向量接口-實(shí)現(xiàn)智能回復(fù)并限制ChatGPT回答的范圍...。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

標(biāo)題有點(diǎn)長(zhǎng),但是基本也說明出了這篇文章的主旨,那就是利用GPT AI智能回答自己設(shè)置好的問題

既能實(shí)現(xiàn)自己的AI知識(shí)庫(kù)機(jī)器人,又能節(jié)省ChatGPT調(diào)用的token成本費(fèi)用。

代碼倉(cāng)庫(kù)地址

document.ai: 基于GPT3.5的通用本地知識(shí)庫(kù)解決方案

下面圖片是整個(gè)流程:

基于GPT3.5實(shí)現(xiàn)本地知識(shí)庫(kù)解決方案-利用向量數(shù)據(jù)庫(kù)和GPT向量接口-實(shí)現(xiàn)智能回復(fù)并限制ChatGPT回答的范圍...

導(dǎo)入知識(shí)庫(kù)數(shù)據(jù)

利用openai的向量接口生成向量數(shù)據(jù),然后導(dǎo)入到向量數(shù)據(jù)庫(kù)qdrant

這段代碼會(huì)將指定目錄下的所有文件讀取出來,然后將文件中的文本內(nèi)容進(jìn)行分割,分割后的結(jié)果會(huì)被傳入到?

to_embeddings函數(shù)中,該函數(shù)會(huì)使用 OpenAI 的 API 將文本內(nèi)容轉(zhuǎn)換為向量。最后,將向量和文件名、文件內(nèi)容一起作為一個(gè)文檔插入到 Qdrant 數(shù)據(jù)庫(kù)中。

具體來說,這段代碼會(huì)遍歷 ./source_data目錄下的所有文件,對(duì)于每個(gè)文件,它會(huì)讀取文件內(nèi)容,然后將文件內(nèi)容按照 #####進(jìn)行分割

分割后的結(jié)果會(huì)被傳入到 to_embeddings函數(shù)中。

to_embeddings函數(shù)會(huì)使用 OpenAI 的 API 將文本內(nèi)容轉(zhuǎn)換為向量,最后返回一個(gè)包含文件名、文件內(nèi)容和向量的列表。

接下來,將向量和文件名、文件內(nèi)容一起作為一個(gè)文檔插入到 Qdrant 數(shù)據(jù)庫(kù)中。

其中,count變量用于記錄插入的文檔數(shù)量,client.upsert函數(shù)用于將文檔插入到 Qdrant 數(shù)據(jù)庫(kù)中。

需要在目錄里創(chuàng)建.env文件,里面放OPENAI_API_KEY

OPENAI_API_KEY=sk-Zxxxxxxxxddddddddd

from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams
from qdrant_client.http.models import PointStruct
from dotenv import load_dotenv
import os
import tqdm
import openai


def to_embeddings(items):
    sentence_embeddings = openai.Embedding.create(
        model="text-embedding-ada-002",
        input=items[1]
    )
    return [items[0], items[1], sentence_embeddings["data"][0]["embedding"]]


if __name__ == '__main__':
    client = QdrantClient("127.0.0.1", port=6333)
    collection_name = "data_collection"
    load_dotenv()
    openai.api_key = os.getenv("OPENAI_API_KEY")
    # 創(chuàng)建collection
    client.recreate_collection(
        collection_name=collection_name,
        vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
    )

    count = 0
    for root, dirs, files in os.walk("./source_data"):
        for file in tqdm.tqdm(files):
            file_path = os.path.join(root, file)
            with open(file_path, 'r', encoding='utf-8') as f:
                text = f.read()
                parts = text.split('#####')
                item = to_embeddings(parts)
                client.upsert(
                    collection_name=collection_name,
                    wait=True,
                    points=[
                        PointStruct(id=count, vector=item[2], payload={"title": item[0], "text": item[1]}),
                    ],
                )
            count += 1

查詢知識(shí)庫(kù)數(shù)據(jù)

這是一個(gè)基于flask的web應(yīng)用,主要功能是根據(jù)用戶輸入的問題,從Qdrant中搜索相關(guān)的文本,然后使用openai的ChatCompletion API進(jìn)行對(duì)話生成,最后將生成的回答返回給用戶。

from flask import Flask
from flask import render_template
from flask import request
from dotenv import load_dotenv
from qdrant_client import QdrantClient
import openai
import os

app = Flask(__name__)


def prompt(question, answers):
    """
    生成對(duì)話的示例提示語句,格式如下:
    demo_q:
    使用以下段落來回答問題,如果段落內(nèi)容不相關(guān)就返回未查到相關(guān)信息:"成人頭疼,流鼻涕是感冒還是過敏?"
    1. 普通感冒:您會(huì)出現(xiàn)喉嚨發(fā)癢或喉嚨痛,流鼻涕,流清澈的稀鼻涕(液體),有時(shí)輕度發(fā)熱。
    2. 常年過敏:癥狀包括鼻塞或流鼻涕,鼻、口或喉嚨發(fā)癢,眼睛流淚、發(fā)紅、發(fā)癢、腫脹,打噴嚏。
    demo_a:
    成人出現(xiàn)頭痛和流鼻涕的癥狀,可能是由于普通感冒或常年過敏引起的。如果病人出現(xiàn)咽喉痛和咳嗽,感冒的可能性比較大;而如果出現(xiàn)口、喉嚨發(fā)癢、眼睛腫脹等癥狀,常年過敏的可能性比較大。
    system:
    你是一個(gè)醫(yī)院?jiǎn)栐\機(jī)器人
    """
    demo_q = '使用以下段落來回答問題:"成人頭疼,流鼻涕是感冒還是過敏?"\n1. 普通感冒:您會(huì)出現(xiàn)喉嚨發(fā)癢或喉嚨痛,流鼻涕,流清澈的稀鼻涕(液體),有時(shí)輕度發(fā)熱。\n2. 常年過敏:癥狀包括鼻塞或流鼻涕,鼻、口或喉嚨發(fā)癢,眼睛流淚、發(fā)紅、發(fā)癢、腫脹,打噴嚏。'
    demo_a = '成人出現(xiàn)頭痛和流鼻涕的癥狀,可能是由于普通感冒或常年過敏引起的。如果病人出現(xiàn)咽喉痛和咳嗽,感冒的可能性比較大;而如果出現(xiàn)口、喉嚨發(fā)癢、眼睛腫脹等癥狀,常年過敏的可能性比較大。'
    system = '你是一個(gè)醫(yī)院?jiǎn)栐\機(jī)器人'
    q = '使用以下段落來回答問題,如果段落內(nèi)容不相關(guān)就返回未查到相關(guān)信息:"'
    q += question + '"'
    # 帶有索引的格式
    for index, answer in enumerate(answers):
        q += str(index + 1) + '. ' + str(answer['title']) + ': ' + str(answer['text']) + '\n'

    """
    system:代表的是你要讓GPT生成內(nèi)容的方向,在這個(gè)案例中我要讓GPT生成的內(nèi)容是醫(yī)院?jiǎn)栐\機(jī)器人的回答,所以我把system設(shè)置為醫(yī)院?jiǎn)栐\機(jī)器人
    前面的user和assistant是我自己定義的,代表的是用戶和醫(yī)院?jiǎn)栐\機(jī)器人的示例對(duì)話,主要規(guī)范輸入和輸出格式
    下面的user代表的是實(shí)際的提問
    """
    res = [
        {'role': 'system', 'content': system},
        {'role': 'user', 'content': demo_q},
        {'role': 'assistant', 'content': demo_a},
        {'role': 'user', 'content': q},
    ]
    return res


def query(text):
    """
    執(zhí)行邏輯:
    首先使用openai的Embedding API將輸入的文本轉(zhuǎn)換為向量
    然后使用Qdrant的search API進(jìn)行搜索,搜索結(jié)果中包含了向量和payload
    payload中包含了title和text,title是疾病的標(biāo)題,text是摘要
    最后使用openai的ChatCompletion API進(jìn)行對(duì)話生成
    """
    client = QdrantClient("127.0.0.1", port=6333)
    collection_name = "data_collection"
    load_dotenv()
    openai.api_key = os.getenv("OPENAI_API_KEY")
    sentence_embeddings = openai.Embedding.create(
        model="text-embedding-ada-002",
        input=text
    )
    """
    因?yàn)樘崾驹~的長(zhǎng)度有限,所以我只取了搜索結(jié)果的前三個(gè),如果想要更多的搜索結(jié)果,可以把limit設(shè)置為更大的值
    """
    search_result = client.search(
        collection_name=collection_name,
        query_vector=sentence_embeddings["data"][0]["embedding"],
        limit=3,
        search_params={"exact": False, "hnsw_ef": 128}
    )
    answers = []
    tags = []

    """
    因?yàn)樘崾驹~的長(zhǎng)度有限,每個(gè)匹配的相關(guān)摘要我在這里只取了前300個(gè)字符,如果想要更多的相關(guān)摘要,可以把這里的300改為更大的值
    """
    for result in search_result:
        if len(result.payload["text"]) > 300:
            summary = result.payload["text"][:300]
        else:
            summary = result.payload["text"]
        answers.append({"title": result.payload["title"], "text": summary})

    completion = openai.ChatCompletion.create(
        temperature=0.7,
        model="gpt-3.5-turbo",
        messages=prompt(text, answers),
    )

    return {
        "answer": completion.choices[0].message.content,
        "tags": tags,
    }


@app.route('/')
def hello_world():
    return render_template('index.html')


@app.route('/search', methods=['POST'])
def search():
    data = request.get_json()
    search = data['search']

    res = query(search)

    return {
        "code": 200,
        "data": {
            "search": search,
            "answer": res["answer"],
            "tags": res["tags"],
        },
    }


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

基于GPT3.5實(shí)現(xiàn)本地知識(shí)庫(kù)解決方案-利用向量數(shù)據(jù)庫(kù)和GPT向量接口-實(shí)現(xiàn)智能回復(fù)并限制ChatGPT回答的范圍...基于GPT3.5實(shí)現(xiàn)本地知識(shí)庫(kù)解決方案-利用向量數(shù)據(jù)庫(kù)和GPT向量接口-實(shí)現(xiàn)智能回復(fù)并限制ChatGPT回答的范圍...

原文地址:https://gofly.v1kf.com/article/40文章來源地址http://www.zghlxwxcb.cn/news/detail-433902.html

到了這里,關(guān)于基于GPT3.5實(shí)現(xiàn)本地知識(shí)庫(kù)解決方案-利用向量數(shù)據(jù)庫(kù)和GPT向量接口-實(shí)現(xiàn)智能回復(fù)并限制ChatGPT回答的范圍...的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Chinese-LangChain:基于ChatGLM-6b+langchain實(shí)現(xiàn)本地化知識(shí)庫(kù)檢索與智能答案生成

    Chinese-LangChain:基于ChatGLM-6b+langchain實(shí)現(xiàn)本地化知識(shí)庫(kù)檢索與智能答案生成

    Chinese-LangChain:中文langchain項(xiàng)目,基于ChatGLM-6b+langchain實(shí)現(xiàn)本地化知識(shí)庫(kù)檢索與智能答案生成 https://github.com/yanqiangmiffy/Chinese-LangChain 俗稱:小必應(yīng),Q.Talk,強(qiáng)聊,QiangTalk ?? 2023/04/19 引入ChuanhuChatGPT皮膚 ?? 2023/04/19 增加web search功能,需要確保網(wǎng)絡(luò)暢通! ?? 2023/04/18 webui增加知

    2024年02月06日
    瀏覽(33)
  • 【ChatGLM】基于 ChatGLM-6B + langchain 實(shí)現(xiàn)本地化知識(shí)庫(kù)檢索與智能答案生成: 中文 LangChain 項(xiàng)目的實(shí)現(xiàn)開源工作

    【ChatGLM】基于 ChatGLM-6B + langchain 實(shí)現(xiàn)本地化知識(shí)庫(kù)檢索與智能答案生成: 中文 LangChain 項(xiàng)目的實(shí)現(xiàn)開源工作

    ? 目錄 【ChatGLM】基于 ChatGLM-6B + langchain 實(shí)現(xiàn)本地化知識(shí)庫(kù)檢索與智能答案生成: 中文 LangChain 項(xiàng)目的實(shí)現(xiàn)開源工作 1.克隆源代碼:

    2024年02月11日
    瀏覽(52)
  • 使用LangChain與ChatGLM實(shí)現(xiàn)本地知識(shí)庫(kù)(一)

    使用LangChain與ChatGLM實(shí)現(xiàn)本地知識(shí)庫(kù)(一)

    ??本篇主要內(nèi)容為介紹ChatGLM3的安裝使用,后續(xù)才會(huì)涉及到使用LangChain實(shí)現(xiàn)本地知識(shí)庫(kù)的內(nèi)容; ??ChatGLM為智譜與清華大學(xué)開源的一個(gè)大語言模型,支持多輪對(duì)話、內(nèi)容創(chuàng)作等,ChatGLM3-6B為ChatGLM3系列中門檻相對(duì)較低的一個(gè),本地部署提供兼容OpenAI的API; ??LangChain用于快

    2024年02月05日
    瀏覽(27)
  • 使用Langchain與ChatGLM實(shí)現(xiàn)本地知識(shí)庫(kù)(二)

    使用Langchain與ChatGLM實(shí)現(xiàn)本地知識(shí)庫(kù)(二)

    ??大語言模型也只是將用戶提供的大規(guī)模數(shù)據(jù)集訓(xùn)練而來,也并非萬能的什么都知道,特別是一些小眾知識(shí)、內(nèi)部數(shù)據(jù)或私密的個(gè)人數(shù)據(jù)等,此時(shí)ChatGLM3肯定會(huì)胡亂回答就是ChatGPT4也不一定能給出滿意回答;不少公司、個(gè)人都有自己的知識(shí)庫(kù)或日志等此時(shí)如有可將這些數(shù)據(jù)以

    2024年02月05日
    瀏覽(31)
  • 基于GPT-4和LangChain構(gòu)建云端定制化PDF知識(shí)庫(kù)AI聊天機(jī)器人

    基于GPT-4和LangChain構(gòu)建云端定制化PDF知識(shí)庫(kù)AI聊天機(jī)器人

    參考: GitHub - mayooear/gpt4-pdf-chatbot-langchain: GPT4 LangChain Chatbot for large PDF docs 使用新的GPT-4 api為多個(gè)大型PDF文件構(gòu)建chatGPT聊天機(jī)器人。 使用的技術(shù)棧包括LangChain, Pinecone, Typescript, Openai和Next.js。LangChain是一個(gè)框架,可以更容易地構(gòu)建可擴(kuò)展的AI/LLM大語言模型應(yīng)用程序和聊天機(jī)器

    2024年02月11日
    瀏覽(19)
  • 用好Python自然語言工具包-- 實(shí)例“基于本地知識(shí)庫(kù)的自動(dòng)問答”

    用好Python自然語言工具包-- 實(shí)例“基于本地知識(shí)庫(kù)的自動(dòng)問答”

    首先鳴謝thomas-yanxin 本問中示例來自他在GitHub上的開源項(xiàng)目“基于本地知識(shí)庫(kù)的自動(dòng)問答”,鏈接如下: thomas-yanxin/LangChain-ChatGLM-Webui: 基于LangChain和ChatGLM-6B的針對(duì)本地知識(shí)庫(kù)的自動(dòng)問答 (github.com) 目錄 1. 基礎(chǔ)知識(shí): 2. NLTK庫(kù)的使用 3. 實(shí)例代碼分析 設(shè)備的定義 函數(shù)定義:從網(wǎng)

    2024年02月05日
    瀏覽(27)
  • #LLMOps##AIGC# Dify_構(gòu)建本地知識(shí)庫(kù)問答應(yīng)用-生成Al應(yīng)用的創(chuàng)新引擎 用于構(gòu)建助手API和GPT的開源開發(fā)平臺(tái)

    #LLMOps##AIGC# Dify_構(gòu)建本地知識(shí)庫(kù)問答應(yīng)用-生成Al應(yīng)用的創(chuàng)新引擎 用于構(gòu)建助手API和GPT的開源開發(fā)平臺(tái)

    github: https://github.com/langgenius/dify/blob/main/README_CN.md 介紹文檔:https://docs.dify.ai/getting-started/readme Dify 筆記 Dify 是什么? 開源的大語言模型(LLM)應(yīng)用開發(fā)平臺(tái) 融合了后端即服務(wù)(Backend as Service)和 LLMOps 的理念 使開發(fā)者可以快速搭建生產(chǎn)級(jí)的生成式 AI 應(yīng)用 為什么使用 Dify?

    2024年01月16日
    瀏覽(22)
  • Knowledge-QA-LLM: 基于本地知識(shí)庫(kù)+LLM的開源問答系統(tǒng)

    基于本地知識(shí)庫(kù)+LLM的問答系統(tǒng)。該項(xiàng)目的思路是由langchain-ChatGLM啟發(fā)而來。 緣由: 之前使用過這個(gè)項(xiàng)目,感覺不是太靈活,部署不太友好。 借鑒如何用大語言模型構(gòu)建一個(gè)知識(shí)問答系統(tǒng)中思路,嘗試以此作為實(shí)踐。 優(yōu)勢(shì): 整個(gè)項(xiàng)目為模塊化配置,不依賴 lanchain 庫(kù),各部分

    2024年02月15日
    瀏覽(27)
  • 基于LangChain+LLM的本地知識(shí)庫(kù)問答:從企業(yè)單文檔問答到批量文檔問答

    基于LangChain+LLM的本地知識(shí)庫(kù)問答:從企業(yè)單文檔問答到批量文檔問答

    過去半年,隨著ChatGPT的火爆,直接帶火了整個(gè)LLM這個(gè)方向,然LLM畢竟更多是基于過去的經(jīng)驗(yàn)數(shù)據(jù)預(yù)訓(xùn)練而來,沒法獲取最新的知識(shí),以及各企業(yè)私有的知識(shí) 為了獲取最新的知識(shí),ChatGPT plus版集成了bing搜索的功能,有的模型則會(huì)調(diào)用一個(gè)定位于 “鏈接各種AI模型、工具”的

    2024年02月07日
    瀏覽(46)
  • AI-基于Langchain-Chatchat和chatglm3-6b部署私有本地知識(shí)庫(kù)

    AI-基于Langchain-Chatchat和chatglm3-6b部署私有本地知識(shí)庫(kù)

    手把手教你搭建本地知識(shí)庫(kù)問答AI機(jī)器人 LangChain-Chatchat:基于LangChain和ChatGLM2-6B構(gòu)建本地離線私有化知識(shí)庫(kù) 在家庭私有云上部署體驗(yàn)語言模型chatglm3-6b,打造私人助理 手把手教大家在本地運(yùn)行ChatGLM3-6B大模型(一) 自從去年GPT模型火爆以來,降低了很多個(gè)人和企業(yè)進(jìn)入人工智

    2024年02月20日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包