chromadb向量數據庫使用 (2)

目錄

    • 代碼
    • 代碼解釋
      • **1. 導入 chatGLM 嵌入函數**
      • **2. 創建 ChromaDB 客戶端和集合**
      • **3. 查詢集合中的數據數量**
      • **4. 添加數據到集合**
      • **5. 獲取已存儲的文檔**
      • **6. 更新文檔**
      • **7. 再次獲取數據,驗證更新結果**
      • **8. 刪除某個文檔**
      • **9. 獲取已刪除的文檔**
      • **總結**

代碼

import chromadb.utils.embedding_functions as embedding_functionsopenai_ef = embedding_functions.OpenAIEmbeddingFunction(api_key="your api key",api_base="https://open.bigmodel.cn/api/paas/v4",model_name="embedding-3")
import chromadb
client = chromadb.Client()
collection = client.get_or_create_collection(name="my_collection", embedding_function=openai_ef)
collection.count() 
0
collection.add(documents=["lorem ipsum...", "doc2", "doc3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],ids=["id1", "id2", "id3"]
)
collection.get(ids=["id1", "id2", "id3"]
)
{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['lorem ipsum...', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': [<IncludeEnum.documents: 'documents'>,<IncludeEnum.metadatas: 'metadatas'>]}
collection.update(ids=["id1", "id2", "id3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],documents=["doc1", "doc2", "doc3"]
)
collection.get(ids=["id1", "id2", "id3"]
)
{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['doc1', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': [<IncludeEnum.documents: 'documents'>,<IncludeEnum.metadatas: 'metadatas'>]}
collection.delete(ids=["id1"]
)
collection.get(ids=["id1"]
)
{'ids': [],'embeddings': None,'documents': [],'uris': None,'data': None,'metadatas': [],'included': [<IncludeEnum.documents: 'documents'>,<IncludeEnum.metadatas: 'metadatas'>]}

代碼解釋

1. 導入 chatGLM 嵌入函數

import chromadb.utils.embedding_functions as embedding_functionsopenai_ef = embedding_functions.OpenAIEmbeddingFunction(api_key="your api key",api_base="https://open.bigmodel.cn/api/paas/v4",model_name="embedding-3")

解釋:

  • embedding_functions.OpenAIEmbeddingFunction 用于創建 chatGLM 的文本嵌入函數,API 請求會發送到 https://open.bigmodel.cn/api/paas/v4,使用 embedding-3 作為嵌入模型。
  • 這里的 api_key 需要替換為你的實際 API 密鑰。

2. 創建 ChromaDB 客戶端和集合

import chromadb
client = chromadb.Client()
collection = client.get_or_create_collection(name="my_collection", embedding_function=openai_ef)

解釋:

  • chromadb.Client() 創建一個 ChromaDB 客戶端。
  • client.get_or_create_collection() 用于獲取或創建一個名為 "my_collection" 的集合,并使用 openai_ef 作為嵌入函數。

3. 查詢集合中的數據數量

collection.count()

輸出:

0

解釋:

  • collection.count() 返回集合中的文檔數量。
  • 由于此時還沒有向集合添加任何數據,所以返回 0

4. 添加數據到集合

collection.add(documents=["lorem ipsum...", "doc2", "doc3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],ids=["id1", "id2", "id3"]
)

解釋:

  • documents:存儲要添加的文檔內容,如 "lorem ipsum..."
  • metadatas:為每個文檔添加元數據,例如 "chapter""verse"
  • ids:為每個文檔指定唯一的 idid1id2id3)。

5. 獲取已存儲的文檔

collection.get(ids=["id1", "id2", "id3"]
)

輸出:

{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['lorem ipsum...', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': ['documents', 'metadatas']
}

解釋:

  • documents:返回存儲的文檔內容。
  • metadatas:返回對應的元數據。
  • ids:返回請求的 id
  • embeddings 為空,因為當前存儲時沒有計算嵌入(可能是 OpenAI API 限制或者設置問題)。

6. 更新文檔

collection.update(ids=["id1", "id2", "id3"],metadatas=[{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],documents=["doc1", "doc2", "doc3"]
)

解釋:

  • 更新 id1 對應的 document"lorem ipsum..." 變為 "doc1"
  • 其他 id 保持不變。

7. 再次獲取數據,驗證更新結果

collection.get(ids=["id1", "id2", "id3"]
)

輸出:

{'ids': ['id1', 'id2', 'id3'],'embeddings': None,'documents': ['doc1', 'doc2', 'doc3'],'uris': None,'data': None,'metadatas': [{'chapter': '3', 'verse': '16'},{'chapter': '3', 'verse': '5'},{'chapter': '29', 'verse': '11'}],'included': ['documents', 'metadatas']
}

解釋:

  • id1document 成功更新為 "doc1",其他數據未改變。

8. 刪除某個文檔

collection.delete(ids=["id1"]
)

解釋:

  • 刪除 id1 對應的文檔。

9. 獲取已刪除的文檔

collection.get(ids=["id1"]
)

輸出:

{'ids': [],'embeddings': None,'documents': [],'uris': None,'data': None,'metadatas': [],'included': ['documents', 'metadatas']
}

解釋:

  • id1 的數據已經被刪除,因此返回空列表。

總結

本代碼展示了如何使用 ChromaDB 進行以下操作:

  1. 創建集合,并使用 OpenAI 生成嵌入。
  2. 添加文檔 到集合。
  3. 查詢文檔數量獲取文檔
  4. 更新文檔內容
  5. 刪除文檔 并驗證刪除結果。

這樣,你可以使用 ChromaDB 作為一個輕量級的向量數據庫,結合 chatGLM 的嵌入模型進行信息存儲和查詢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896842.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896842.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的世界1.20.1forge模組開發進階物品(7)——具有動畫、3D立體效果的物品

基礎的物品大家都會做了對吧?包括武器的釋放技能,這次來點難度,讓物品的貼圖呈現動畫效果和扔出后顯示3D立體效果,這個3D立體效果需要先學習blockbench,學習如何制作貼圖。 Blockbench Blockbench是一個用于創建和編輯三維模型的免費軟件,特別適用于Minecraft模型的設計…

大模型在敗血癥預測及圍手術期管理中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、敗血癥概述 2.1 定義與流行病學 2.2 病因與發病機制 2.3 臨床表現與診斷標準 2.4 并發癥與危害 三、大模型技術原理及在醫療領域的應用 3.1 大模型技術概述 3.2 大模型在醫療領…

SpringBoot接口自動化測試實戰:從OpenAPI到壓力測試全解析

引言&#xff1a;接口測試的必要性 在微服務架構盛行的今天&#xff0c;SpringBoot項目的接口質量直接影響著系統穩定性。本文將分享如何通過自動化工具鏈實現接口的功能驗證與性能壓測&#xff0c;使用OpenAPI規范打通測試全流程&#xff0c;讓您的接口質量保障體系更加完備。…

微軟具身智能感知交互多面手!Magma:基于基礎模型的多模態AI智能體

作者&#xff1a; Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 單位&#xff1a;微軟研究院&#xff0c;馬里蘭大學&#xff0c;威斯康星大學麥迪遜分校…

Linux中jdk-8u291-linux-x64 中jdk工具包

jdk-8u291-linux-x64 指的是適用于 64 位 Linux 系統的 Java 開發工具包&#xff08;JDK&#xff09;8 更新 291 版本。這是 JDK 的一個特定版本&#xff0c;用于開發 Java 應用程序和小程序。 jdk-8u291-linux-x64 網盤下載鏈接&#xff1a;夸克網盤分享

Baklib云內容中臺的核心架構是什么?

云內容中臺分層架構解析 現代企業內容管理系統的核心在于構建動態聚合與智能分發的云端中樞。以Baklib為代表的云內容中臺采用三層架構設計&#xff0c;其基礎層為數據匯聚工具集&#xff0c;通過標準化接口實現多源異構數據的實時采集與清洗&#xff0c;支持從CRM、ERP等業務…

17.3 LangSmith Evaluation 深度解析:構建數據驅動的模型優化體系

LangSmith Evaluation 深度解析:構建數據驅動的模型優化體系 關鍵詞:模型評估體系、自動化測試框架、業務指標對齊、A/B測試集成、生產級質量監控 1. Evaluation 核心功能全景 1.1 評估維度矩陣 維度評估指標示例采集方式質量評估準確率、相關性評分、事實性檢查人工標注+A…

華為 VRP 系統簡介配置SSH,TELNET遠程登錄

華為 VRP 系統簡介&配置TELNET遠程登錄 1.華為 VRP 系統概述 1.1 什么是 VRP VRP&#xff08;Versatile Routing Platform 華為數通設備操作系統&#xff09;是華為公司數據通信產品的通用操作系統平臺&#xff0c;從低端到核心的全系列路由器、以太網交換機、業務網關等…

算法基礎 -- 字符串哈希的基本概念和數學原理分析

字符串哈希的基本概念和數學原理分析 1. 字符串哈希的定義和基本概念 哈希函數的定義 哈希函數&#xff08;Hash Function&#xff09;是一種將任意長度的輸入映射為固定長度輸出的函數。對于字符串而言&#xff0c;哈希函數通過某種算法將字符串轉換成一個整數&#xff0c;…

從新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防護框架構建

從新加坡《AI系統安全指南配套手冊》看可信AI全生命周期防護框架構建 一、引言 1.1 研究背景與意義 近年來,人工智能(AI)技術以前所未有的速度蓬勃發展,已然成為推動各行業變革與創新的核心驅動力。從醫療領域輔助疾病診斷,到金融行業的風險預測與智能投顧,再到交通領…

C++學習之C++初識、C++對C語言增強、對C語言擴展

一.C初識 1.C簡介 2.第一個C程序 //#include <iostream> //iostream 相當于 C語言下的 stdio.h i - input 輸入 o -output 輸出 //using namespace std; //using 使用 namespace 命名空間 std 標準 &#xff0c;理解為打開一個房間&#xff0c;房間里有我們所需…

HTMLS基本結構及標簽

HTML5是目前制作網頁的核心技術&#xff0c;有叫超文本標記語言。 基本結構 聲明部分位于文檔的最前面&#xff0c;用于向瀏覽器說明當前文檔使用HTML標準規范。 根部標簽位于聲明部分后&#xff0c;用于告知瀏覽器這是一個HTML文檔。< html>表示文檔開始&#xff0c;&l…

eMMC存儲器詳解(存儲區域結構、EXT_CSD[179]、各分區介紹、主要引腳、命令格式與類型等)

讀本篇博文所需要的先行知識 關于芯片內部的ROM的作用、工作原理的介紹&#xff0c;鏈接如下&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/145969584 eMMC的物理結構、特點、用途 這個標題的相關內容見我的另一篇博文&#xff0c;博文鏈接如下&#xff1a…

分布式鎖—2.Redisson的可重入鎖一

大綱 1.Redisson可重入鎖RedissonLock概述 2.可重入鎖源碼之創建RedissonClient實例 3.可重入鎖源碼之lua腳本加鎖邏輯 4.可重入鎖源碼之WatchDog維持加鎖邏輯 5.可重入鎖源碼之可重入加鎖邏輯 6.可重入鎖源碼之鎖的互斥阻塞邏輯 7.可重入鎖源碼之釋放鎖邏輯 8.可重入鎖…

iOS實現一個強大的本地狀態記錄容器

我們開發中經常會遇到這樣的場景&#xff0c;就是我們客戶端用戶進行了某個操作&#xff0c;這個操作影響了數據的狀態&#xff0c;但是我們又不方便重新請求一次數據&#xff0c; 這個時候&#xff0c;就需要我們記錄一下本地狀態在內存中&#xff0c;隨著業務越來越復雜&…

vue中帶$的是什么

在Vue.js中&#xff0c;帶的 $ 符號用于表示 Vue實例的屬性和方法。 這些屬性和方法是Vue框架內部定義的&#xff0c;主要用于方便開發者在組件內部訪問和使用。 常見的帶$的屬性和方法: ?$data?&#xff1a;用于訪問組件的內部數據對象&#xff0c;包含組件內定義的所有響…

杰和科技工業整機AF208|防塵+靜音+全天候運行

在特殊的工業環境中&#xff0c;實現快速生產離不開各類工業計算機的強大支持。杰和科技工業計算機AF208&#xff0c;作為核心控制單元&#xff0c;憑借其堅固可靠的外殼、先進的散熱技術以及緊湊靈活的部署特點&#xff0c;發揮著關鍵作用。 硬實力外殼&#xff0c;無懼塵埃 …

【django】模型部署過程

模型部署 示例&#xff1a;保存 Scikit-learn 模型myapp/views.py全局加載模型tasks.py&#xff08;Celery任務&#xff09;views.py 修改為異步調用views.py 準備工作 模型保存格式 確保你的模型已保存為可加載的格式&#xff1a; ● TensorFlow/Keras&#xff1a;.h5 或 Save…

一、計算機網絡技術——概述、性能指標

網絡技術發展歷程 第一階段 一九六九年美國國防部研制的ARPANET&#xff0c;采用“接口報文處理機”將四臺獨立的計算機主機互聯在一起&#xff0c;實現數據的轉發。 這一階段的主要特點是TCP/IP協議初步成型 第二階段&#xff1a; 采用三級結構&#xff0c;這一階段的主要…

【向量數據庫Weaviate】與ChromaDB的差異、優劣

以下是 Weaviate 和 ChromaDB 的詳細對比&#xff0c;涵蓋設計目標、核心功能、性能、適用場景及優劣勢分析&#xff1a; 1. 核心定位與設計目標 維度WeaviateChromaDB類型向量數據庫 圖數據庫&#xff08;支持混合搜索&#xff09;輕量級純向量數據庫&#xff08;專注嵌入存…