SQLite-vec 本地配置Embedding筆記(非教學用途)_

更新於 2024/10/25閱讀時間約 8 分鐘

好,繼續玩垃圾,呢篇同上篇一樣,都係唔會完整既筆記。甚至符係,任務仲未完成,不過到左一個milestone,所以停一停,打篇野順便整理下思緒。所以內容無保証。

話說,上次搭左Ollama server 後,部機太廢,唯有用個部機行得到最勁的model ,試左llama3.2 3.2B 呢個,叫做速度可以接受。

為左爭取更多工作時間,搭返個Open WebUI 整返個AI Helpdesk取代自己先,將啲公司內部系統的開發同使用說明書PDF塞晒入去,有User打來問時就介紹佢自己用,效果唔太差,都為部份用戶解決到啲問題,起碼佢可以話到比User知去邊個位或者去搵野方向。


好,而家到正經野,有大堆文字要處理。呢個任務唔易搞,如果可以將佢地入晒VectorDB 然後去做Similarity Search再餵比LLM去答啲用戶提問,

本來想用pgvector來存放chunks,不過弄了一回,發現了有人做了個SQLite 的Plugin。這個小玩具應該好玩。

不過,你玩玩具時玩具玩你,原作者之前寫左個SQLite-vss 既Plugin,搞左大輪,爬左好多文。搞左啲,之後先睇到篇,原來原作者見vss有缺點,於是從新推倒重來,用Pure C 寫左個SQLite-vec 既Plug-in。

咁Langchain就將兩個都納入左佢Core既vectorstores ,唔用Langchain由至可,呢件又係伏野來。網上都有人講,佢其中一個缺點係,成日改動。無錯,如果搵啲例子或者Tutorial,vss係放左向langchain_community.vectorstores入面,其實都唔止SQLiteVec,其他HuggingFaceEmbeddings,甚至作為好核心common既Ollama 佢都成日搬位。

如果咁唔好彩抄功課抄中啲舊舊地(其實可能係24年上半年的Example),就會有以下信息彈出來:


LangChainDeprecationWarning: The class `HuggingFaceEmbeddings` was deprecated in LangChain 0.2.2 and will be removed in 1.0.

An updated version of the class exists in the :class:`~langchain-huggingface package and should be used instead.

To use it run `pip install -U :class:`~langchain-huggingface` and import as `from :class:`~langchain_huggingface import HuggingFaceEmbeddings``.


如果係

from langchain_community.llms import Ollama

就要改成:

from langchain_ollama import OllamaLLM


當然,你係要唔改都行到,只係會狂彈出warning。


好,咁整個Virtualenv 裝晒啲架餐先:

要裝既包括但不限於sqlite3, sqlite_vec, langchain_community, langchain_experimental



咁作為開始,先用返佢Loader將PDF 讀返來,

from langchain_community.document_loaders import PDFPlumberLoader
from langchain_experimental.text_splitter import SemanticChunker
from langchain_huggingface import HuggingFaceEmbeddings


pdf_path = '/....path.../xxxxx.pdf'

docs = loader.load()
print("Processing PDF: ", pdf_path)
print("Number of pages in the PDF:", len(docs))

下面呢段就將讀返來的PDF砌開:

text_splitter = SemanticChunker(HuggingFaceEmbeddings())
documents = text_splitter.split_documents(docs)
texts = [doc.page_content for doc in docs]
print("Number of chunks created: ", len(documents))


然後,我地要搵返個model 做embedding,當然,業界做得最好就OpenAI,但我地係要搞山寨,當然用免費野。又爬左一輪文,就用呢個All-miniLM-L6-v2。

embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")


跟住要講既係,Langchain佢本身有個From_texts的func,用SQLite-vss係可以自動build晒所有野,但呢個Function向SQLite-vec係無implement,仲要因為Document Object 個ID 問題,搞到要睇左好多Langchain base.py 同vec的Source code。


搞左大輪,其實都唔知點搞,跟返佢source要乜就比乜佢,首先開返個 SQLite connection。跟住要用enable_load_extension去load vec 個Plugin。

con = sqlite3.connect(db_path)
con.enable_load_extension(True)
sqlite_vec.load(con)


搞掂左之後init SQLiteVec:

vector_store = SQLiteVec(table="state_union", connection = False, embedding=embedding_function, db_file=db_path)


呢舊野的method可以呢度查到:

https://python.langchain.com/api_reference/community/vectorstores/langchain_community.vectorstores.sqlitevec.SQLiteVec.html#langchain_community.vectorstores.sqlitevec.SQLiteVec.from_texts


上面切左的doc source就放左入一個List texts 果度,直接比佢就得:

a = vector_store.add_texts(texts)


行完之後會有個 xxx.db file建立左向你指定的地方,用DBbrowser 開可以見到有六個Tables,有個叫state_union table就係PDF 內文,佢有個 text_embedding 的col name 打開係一大堆HEX,就係embedding。


咁Similarity search同RAG 比個LLM 就留返後面講。




奮鬥過不過最終都係浮沉左大半世的IT老狗公,催Vendor買server裝硬碟SetRouter,垃圾code執手尾,教老細用Word同Excel,Windows撞錯密碼比人lock左,會議室支燈開唔到,同大陸佬用普話話開會都係我,不過我仲有時間畫畫同玩電子垃圾,咪寫向呢度囉。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
就來搬屋啲電器輪住壞, 冷氣壞完到雪櫃,據報有怪聲,開頭估係壓縮機。好多次後總於親身聽到。冷格出來。望下,入面結左冰把風扇轉時"Hi"到。 呢個情況,多數係膠邊漏風,咁呢部野都搬左幾次,又用左好幾年,漏風唔奇。 太大舊冰有排溶,唔理啦,拆野精神,一於照拆。 入面仲有,續繼
其實已經整好左,而家補返。 Taobao返個Mon,佢會跟埋張貼紙 將貼紙多餘部份撕走,就如下圖左: 再貼上機身,然後把藍色膠移去,跟住插返線禁落去,就搞掂。 已經用左排,補返張相先: 就係咁。跟住原來向Taobao發現,買過部翻新機7p都只係三舊水有找
戴個頭盔先,呢篇唔係教學,只係學習過程寫低比自己睇,有人撞左入來,啱用自己睇,有錯請指教下 ^^ 由於向PVE上面行左個CT 專門來玩下Ollama,由於做左既野唔少,先求其寫住一啲,有可能無前無後,後面會再整理(如有時間同興緻)。 同Ollama就無關,但同我個環境設定有關,留個位第日
寫返底啲野,第日容易搵: PVE起左就可以用來做Development 場,起多個pgsql 。由於table 收目不少,呢啲時候就係問GPT 時間好過Google: 咁睇來用 dump出個sql file 行就快啲。 就咁打,緊係唔work 啦,咁要去Google ,搵到叫你去 /
4/5電腦
除左部垃圾堆成的PVE Server,仲有另一部行緊。呢部係有張SSD,同埋2TB 硬碟。 SSD就本身Default行緊LVM,有兩個Windows行緊,有一個做啲Schedule野,一個用來寫Script試野。 咁呢度前一日,要改某啲野,熄左機返來,Windows再開唔返。 搞左輪,發
就來搬屋啲電器輪住壞, 冷氣壞完到雪櫃,據報有怪聲,開頭估係壓縮機。好多次後總於親身聽到。冷格出來。望下,入面結左冰把風扇轉時"Hi"到。 呢個情況,多數係膠邊漏風,咁呢部野都搬左幾次,又用左好幾年,漏風唔奇。 太大舊冰有排溶,唔理啦,拆野精神,一於照拆。 入面仲有,續繼
其實已經整好左,而家補返。 Taobao返個Mon,佢會跟埋張貼紙 將貼紙多餘部份撕走,就如下圖左: 再貼上機身,然後把藍色膠移去,跟住插返線禁落去,就搞掂。 已經用左排,補返張相先: 就係咁。跟住原來向Taobao發現,買過部翻新機7p都只係三舊水有找
戴個頭盔先,呢篇唔係教學,只係學習過程寫低比自己睇,有人撞左入來,啱用自己睇,有錯請指教下 ^^ 由於向PVE上面行左個CT 專門來玩下Ollama,由於做左既野唔少,先求其寫住一啲,有可能無前無後,後面會再整理(如有時間同興緻)。 同Ollama就無關,但同我個環境設定有關,留個位第日
寫返底啲野,第日容易搵: PVE起左就可以用來做Development 場,起多個pgsql 。由於table 收目不少,呢啲時候就係問GPT 時間好過Google: 咁睇來用 dump出個sql file 行就快啲。 就咁打,緊係唔work 啦,咁要去Google ,搵到叫你去 /
4/5電腦
除左部垃圾堆成的PVE Server,仲有另一部行緊。呢部係有張SSD,同埋2TB 硬碟。 SSD就本身Default行緊LVM,有兩個Windows行緊,有一個做啲Schedule野,一個用來寫Script試野。 咁呢度前一日,要改某啲野,熄左機返來,Windows再開唔返。 搞左輪,發
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
遇到問題: root@b10000ea1f5b:/app/backend# ollama run phi3:14b pulling manifest pulling 7a3cc4804c64... 98% ▕███████████████████████████████████████ ▏
Thumbnail
Lua 開檔寫檔的運用 io.output()...
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
遇到問題: root@b10000ea1f5b:/app/backend# ollama run phi3:14b pulling manifest pulling 7a3cc4804c64... 98% ▕███████████████████████████████████████ ▏
Thumbnail
Lua 開檔寫檔的運用 io.output()...
Thumbnail
因為最近想嘗試編碼風格,於是就選了一套比較"不嚴格"的輔助工具來摸索。 編輯器 VS CODE 框架 VUE3 打包工具 VITE 編碼風格 Standard 環境 version { "nodejs":"v18.18.0", "npm":"9.8.1" }