最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python快速進(jìn)修指南之向量數(shù)據(jù)庫文本搜索

 更新時間:2024年02月01日 11:58:39   作者:努力的小雨  
這篇文章主要為大家介紹了Java開發(fā)快速進(jìn)修Python指南之向量數(shù)據(jù)庫文本搜索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

如果說Python是跟隨我的步伐學(xué)習(xí)的話,我覺得我在日常開發(fā)方面已經(jīng)沒有太大的問題了。然而,由于我沒有Python開發(fā)經(jīng)驗(yàn),我思考著應(yīng)該寫些什么內(nèi)容。我回想起學(xué)習(xí)Java時的學(xué)習(xí)路線,直接操作數(shù)據(jù)庫是其中一項重要內(nèi)容,無論使用哪種編程語言,與數(shù)據(jù)庫的交互都是不可避免的。然而,直接操作MySQL數(shù)據(jù)庫似乎缺乏趣味性,畢竟每天都在寫SQL語句。突然我想到了我之前寫過的一系列私人知識庫文章,于是我想到了向量數(shù)據(jù)庫,畢竟這是當(dāng)前非常熱門的技術(shù)之一。

如果AI離開了向量數(shù)據(jù)庫,就好像失去了靈魂一樣。市面上有很多向量數(shù)據(jù)庫產(chǎn)品,我選擇了最近騰訊推出的向量數(shù)據(jù)庫,并且我還有一張免費(fèi)試用卡,趁著還沒過期,我決定寫一些相關(guān)文章。而且我看了一下,這個數(shù)據(jù)庫對于新手來說非常友好,因?yàn)樗锌梢暬缑?。對于一個新手來說,能夠看到實(shí)際效果是最客觀的。就像當(dāng)初學(xué)習(xí)SQL時,如果沒有Navicat這個可視化工具,就會感覺力不從心一樣。

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

向量數(shù)據(jù)庫具有將復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為多維邏輯坐標(biāo)值的能力,簡而言之,它可以將我們所了解的所有事物轉(zhuǎn)化為可計算的數(shù)字。一旦數(shù)據(jù)進(jìn)入數(shù)學(xué)領(lǐng)域,我們就能夠?qū)ζ溥M(jìn)行計算。此外,向量數(shù)據(jù)庫還可以作為一個外部知識庫,為大型模型提供最新、最全面的信息,以應(yīng)對需要及時回答的問題。同時,它也能夠賦予大型語言模型長期記憶的能力,避免在對話過程中產(chǎn)生"斷片"的情況??梢哉f,向量數(shù)據(jù)庫是大型語言模型的最佳合作伙伴。

如果你對任何內(nèi)容有任何疑問,請看以下官方文檔鏈接查看更多信息:

https://d7e.jb51.net//202401/tools/1113tusoutuanli.rar

雖然這是官方的文檔,里面存在許多錯誤,我已經(jīng)積極提供了反饋,但可惜沒有得到有效處理。盡管如此,這并不會妨礙我們的閱讀。文檔最后還有一個官方的案例代碼倉庫,對于有興趣的同學(xué)可以直接滑動到最后進(jìn)行查閱。不過,對于新手而言,可能并不太友好,原因在于代碼量較大,很難一下子消化。就好比剛學(xué)習(xí)Java的時候,要看別人的業(yè)務(wù)邏輯一樣,即使有大量注釋,也會感到吃力。

建立數(shù)據(jù)庫連接

領(lǐng)取完畢后,你需要創(chuàng)建一個新的免費(fèi)示例,這個過程不難,大家都會。成功之后,你需要開啟外網(wǎng)訪問,否則無法進(jìn)行本地的測試和聯(lián)調(diào)。在開啟外網(wǎng)訪問時,需要將外網(wǎng)白名單ip設(shè)置為0.0.0.0/0,這將接受所有IP的請求。

好的,接下來我們需要獲取數(shù)據(jù)庫的登錄名和密碼。這些信息將用于連接和管理數(shù)據(jù)庫。

創(chuàng)建數(shù)據(jù)庫

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency

#create a database client object
client = tcvectordb.VectorDBClient(url='http://*******', username='root', key='1*******', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# create a database
db = client.create_database(database_name='db-xiaoyu')

print(db.database_name)

# list databases
db_list = client.list_databases()
for db in db_list:
         print(db.database_name)

好的,我們現(xiàn)在開始替換所需的內(nèi)容,完成數(shù)據(jù)庫的創(chuàng)建。一旦數(shù)據(jù)庫創(chuàng)建完成,我們還需要創(chuàng)建集合,而不是傳統(tǒng)的表,因?yàn)樵谙蛄繑?shù)據(jù)庫中,它們被稱為集合。因此,我們接下來要創(chuàng)建集合。

創(chuàng)建集合

創(chuàng)建集合和創(chuàng)建表的過程類似,但前提是集合需要存儲向量,而表用于存儲數(shù)據(jù)。在這里,我們選擇使用集成了embedding的集合。如果不使用集成的embedding,你需要使用其他embedding模型來輸出向量,然后將其輸入到集合中進(jìn)行存儲。除非你想手動輸入向量值,否則這是必要的。

設(shè)計索引(不是設(shè)計 Collection 的結(jié)構(gòu))

在使用向量對應(yīng)的文本字段時,不建議建立索引。這樣做會占用大量內(nèi)存資源,而且沒有實(shí)際作用。除了向量對應(yīng)的文本字段外,如果需要進(jìn)行業(yè)務(wù)過濾,也就是在查詢時需要使用where條件,那么必須單獨(dú)為這個條件字段定義一個索引。也就是說,你需要用哪個字段進(jìn)行過濾,就必須為該字段定義一個索引。向量數(shù)據(jù)庫支持動態(tài)模式(Schema),在寫入數(shù)據(jù)時可以寫入任意字段,無需提前定義,類似于MongoDB。目前,主鍵id和向量字段vector是固定且必需的,字段名稱也必須一致,否則會報錯。

在之前講解私人知識庫的時候,我會單獨(dú)引入其他embedding模型,因?yàn)橄蛄繑?shù)據(jù)庫沒有繼承這些模型。不過,騰訊已經(jīng)將embedding模型集成在了他們的系統(tǒng)中,這樣就不需要來回尋找模型了。需要注意的是,為了確保一致性,你選擇的embedding模型后面的vector字段要設(shè)置為768維。

db = client.database('db-xiaoyu')
# -- index config
index = Index(
    FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),
    VectorIndex(name='vector', dimension=768, index_type=IndexType.HNSW,
                metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)),
    FilterIndex(name='author', field_type=FieldType.String, index_type=IndexType.FILTER),
    FilterIndex(name='bookName', field_type=FieldType.String, index_type=IndexType.FILTER)
)

# Embedding config
ebd = Embedding(vector_field='vector', field='text', model=EmbeddingModel.BGE_BASE_ZH)

# create a collection
coll = db.create_collection(
    name='book-xiaoyu',
    shard=1,
    replicas=0,
    description='this is a collection of test embedding',
    embedding=ebd,
    index=index
)
print(vars(coll))

我們已經(jīng)成功創(chuàng)建了數(shù)據(jù)庫和集合,并且現(xiàn)在讓我們來看一下它們的結(jié)構(gòu)。實(shí)際上,它們的原理與MySQL和其他數(shù)據(jù)庫相似,只是存儲的內(nèi)容和術(shù)語發(fā)生了變化。我們可以將其視為數(shù)據(jù)庫操作。

插入/替換數(shù)據(jù)

當(dāng)插入數(shù)據(jù)時,如果集合中已經(jīng)存在具有相同ID的文檔,則會刪除原始文檔并插入新的文檔數(shù)據(jù)。需要注意的是,很多字段我們都沒有指定,例如page、text等。你可以繼續(xù)添加這些字段,因?yàn)樗鼈冾愃朴贛ongoDB。但請注意,text字段必須與你在配置embedding時指定的字段相同,否則無法將其轉(zhuǎn)換為向量。

coll = db.collection('book-emb')
# 寫入數(shù)據(jù)。
# 參數(shù) build_index 為 True,指寫入數(shù)據(jù)同時重新創(chuàng)建索引。
res = coll.upsert(
            documents=[
                Document(id='0001', text="話說天下大勢,分久必合,合久必分。", author='羅貫中', bookName='三國演義', page=21),
                Document(id='0002', text="混沌未分天地亂,茫茫渺渺無人間。", author='吳承恩', bookName='西游記', page=22),
                Document(id='0003', text="甄士隱夢幻識通靈,賈雨村風(fēng)塵懷閨秀。", author='曹雪芹', bookName='紅樓夢', page=23)  
            ],
            build_index=True
        )

當(dāng)我們完成數(shù)據(jù)插入后,我們可以立即執(zhí)行查詢操作。但請注意,如果你將 “build_index” 字段設(shè)置為 “false”,即使插入成功,查詢時也無法檢索到數(shù)據(jù)。因此,如果要立即生效并能查詢到數(shù)據(jù),你必須將其設(shè)置為 “true”。這個是重建索引的過程

查詢數(shù)據(jù)

這里的查詢可以分為精確查詢和相似度查詢兩種。精確查詢是指除了向量字段外的其他字段查詢條件都是精確匹配的。由于我們在建立索引時已經(jīng)對作者(author)和書名(bookName)建立了索引,所以我們可以直接對它們進(jìn)行數(shù)據(jù)過濾,但是我不會在這里演示。現(xiàn)在我將演示一下模糊查詢,即對向量字段匹配后的結(jié)果進(jìn)行查詢,并同時加上過濾條件。

doc_lists = coll.searchByText(
                 embeddingItems=['天下大勢,分久必合,合久必分'],
                 filter=Filter(Filter.In("bookName", ["三國演義", "西游記"])),
                 params=SearchParams(ef=200),
                 limit=3,
                 retrieve_vector=False, # 不返回向量
                 output_fields=['bookName','author']
             )
# printf
for i, docs in enumerate(doc_lists.get("documents")):
                for doc in docs:
                        print(doc)

除了上面提到的Python的寫法,我們還可以通過界面來進(jìn)行精確查詢。只需要在界面中填寫where后的條件即可。

要進(jìn)行模糊查詢,可以直接使用text文字進(jìn)行查詢,或者定義過濾字段來進(jìn)行查詢優(yōu)化。

總結(jié)

剩下的刪除數(shù)據(jù)這部分我就不演示了。今天先跟向量數(shù)據(jù)庫熟悉一下界面操作,感覺就像在使用Kibana查詢ES數(shù)據(jù)一樣。不知道你們有沒有類似的感覺。好了,今天我們先只關(guān)注文本操作,下一期我會嘗試處理圖像或者視頻數(shù)據(jù)??偟膩碚f,相比Java,Python的SDK使用起來更加舒適。如果你曾經(jīng)使用過Java SDK與平臺接口對接,就會發(fā)現(xiàn)Python SDK上手更快。

以上就是Java開發(fā)快速進(jìn)修Python指南之向量數(shù)據(jù)庫文本搜索的詳細(xì)內(nèi)容,更多關(guān)于Python向量數(shù)據(jù)庫文本搜索的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中打印出指定格式日期時間的12種方式

    Python中打印出指定格式日期時間的12種方式

    無論是為了數(shù)據(jù)分析、文件命名還是日志記錄,掌握多種日期格式化的方法都是很有幫助的,下面我們來探索一下如何以各種不同的方式使用Python打印出指定格式的日期吧
    2025-02-02
  • pycharm打包py項目為.exe可執(zhí)行文件的兩種方式

    pycharm打包py項目為.exe可執(zhí)行文件的兩種方式

    本文主要介紹了pycharm打包py項目為.exe可執(zhí)行文件的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • pycharm激活方法到2099年(激活流程)

    pycharm激活方法到2099年(激活流程)

    這篇文章主要介紹了pycharm激活方法到2099年,文末給大家提到了idea和pycharm最新版激活方法,非常不錯對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python調(diào)用edge-tts實(shí)現(xiàn)在線文字轉(zhuǎn)語音效果

    Python調(diào)用edge-tts實(shí)現(xiàn)在線文字轉(zhuǎn)語音效果

    edge-tts是一個 Python 模塊,允許通過Python代碼或命令的方式使用 Microsoft Edge 的在線文本轉(zhuǎn)語音服務(wù),這篇文章主要介紹了Python調(diào)用edge-tts實(shí)現(xiàn)在線文字轉(zhuǎn)語音效果,需要的朋友可以參考下
    2024-03-03
  • 使用python裝飾器計算函數(shù)運(yùn)行時間的實(shí)例

    使用python裝飾器計算函數(shù)運(yùn)行時間的實(shí)例

    下面小編就為大家分享一篇使用python裝飾器計算函數(shù)運(yùn)行時間的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源

    使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源

    從上一篇文章的評論中看出似乎很多童鞋都比較關(guān)注爬蟲的源代碼。所有本文就使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源做了很詳細(xì)的記錄,幾乎每一步都介紹給大家,希望對大家能有所幫助
    2014-11-11
  • Python使用Flask后端實(shí)現(xiàn)解析Excel圖表(附源碼)

    Python使用Flask后端實(shí)現(xiàn)解析Excel圖表(附源碼)

    這篇文章主要介紹了一個完整的 Flask + Vue 3 前端模板 方案,實(shí)現(xiàn) 上傳 Excel 文件(不再用鏈接),后端解析 chart1.xml,返回結(jié)構(gòu)化數(shù)據(jù),前端用 ECharts 渲染圖表,感興趣的小伙伴可以了解下
    2026-01-01
  • Python在后臺自動解壓各種壓縮文件的實(shí)現(xiàn)方法

    Python在后臺自動解壓各種壓縮文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python在后臺自動解壓各種壓縮文件的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • python中的關(guān)鍵字(pass)使用

    python中的關(guān)鍵字(pass)使用

    這篇文章主要介紹了python中的關(guān)鍵字(pass)使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 詳解Django之a(chǎn)dmin組件的使用和源碼剖析

    詳解Django之a(chǎn)dmin組件的使用和源碼剖析

    本篇文章主要介紹了詳解Django之a(chǎn)dmin的使用和源碼剖析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05

最新評論

清河县| 陇西县| 遵义市| 泰安市| 泽普县| 霸州市| 乌兰浩特市| 利津县| 承德县| 航空| 清苑县| 丽水市| 淮安市| 宜春市| 河南省| 滁州市| 鄂托克旗| 吉首市| 四会市| 聊城市| 临猗县| 迁西县| 盐亭县| 嫩江县| 墨玉县| 邵阳市| 东乌珠穆沁旗| 黄梅县| 南和县| 珠海市| 长治县| 呈贡县| 瓦房店市| 图木舒克市| 中卫市| 鹤山市| 浮山县| 商南县| 调兵山市| 苍溪县| 彩票|