Milvus 是一個開源的向量數(shù)據(jù)庫,專為管理和檢索大量向量數(shù)據(jù)而設(shè)計,廣泛應(yīng)用于人工智能、推薦系統(tǒng)、圖像檢索、自然語言處理等領(lǐng)域。它支持 PB 級別的數(shù)據(jù)存儲,提供高性能的向量檢索服務(wù)。
Milvus 的核心功能
1. 高效檢索: 支持 ANN(近似最近鄰)檢索,適用于超大規(guī)模向量檢索任務(wù)。
2. 多數(shù)據(jù)類型: 支持文本、圖像、視頻等多種嵌入向量數(shù)據(jù)。
3. 彈性擴展: 支持水平擴展和分布式部署。
4. 多種索引類型: 包括 IVF、HNSW、DiskANN 等。
5. 多語言 SDK 支持: 提供 Python、Java、Go、C++ 等多種 SDK。
6. 云原生架構(gòu): 支持 Kubernetes 部署,便于云上運行。
Milvus 的應(yīng)用場景
1. 圖像和視頻檢索(內(nèi)容推薦)
2. 自然語言處理(語義檢索與推薦)
3. 推薦系統(tǒng)(個性化推薦)
4. 生物醫(yī)學(xué)數(shù)據(jù)分析(DNA 比對)
5. 安全監(jiān)控(面部識別)
Milvus 快速上手教程
1. 環(huán)境準(zhǔn)備
? 操作系統(tǒng):Linux/macOS/Windows
? 安裝 Docker(推薦)或 Kubernetes(用于生產(chǎn)環(huán)境)
2. 安裝 Milvus
使用 Docker 快速啟動:
docker pull milvusdb/milvus:latest
docker run -d –name milvus-standalone -p 19530:19530 -p 8080:8080 milvusdb/milvus:latest
3. 創(chuàng)建 Milvus 客戶端
安裝 Milvus Python SDK:
pip install pymilvus
4. 連接到 Milvus
from pymilvus import connections
connections.connect(
alias=”default”,
host=”localhost”,
port=”19530″
)
5. 創(chuàng)建集合與插入數(shù)據(jù)
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType
# 定義字段
fields = [
FieldSchema(name=”id”, dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name=”embedding”, dtype=DataType.FLOAT_VECTOR, dim=128)
]
# 定義集合架構(gòu)
schema = CollectionSchema(fields, “向量數(shù)據(jù)集合”)
# 創(chuàng)建集合
collection = Collection(“example_collection”, schema)
# 插入數(shù)據(jù)
import numpy as np
data = [
[i for i in range(1000)], # id
np.random.random([1000, 128]).tolist() # 隨機向量
]
collection.insert(data)
6. 創(chuàng)建索引與檢索
# 創(chuàng)建索引
index_params = {
“metric_type”: “L2”,
“index_type”: “IVF_FLAT”,
“params”: {“nlist”: 100}
}
collection.create_index(field_name=”embedding”, index_params=index_params)
# 搜索向量
search_params = {
“metric_type”: “L2”,
“params”: {“nprobe”: 10}
}
query_vector = np.random.random([1, 128]).tolist()
results = collection.search(
data=query_vector,
anns_field=”embedding”,
param=search_params,
limit=5
)
# 輸出結(jié)果
for result in results[0]:
print(f”ID: {result.id}, Distance: {result.distance}”)
Milvus 官方資源
? 官網(wǎng):Milvus 官方網(wǎng)站
? 文檔:Milvus 文檔中心
? GitHub:Milvus GitHub 倉庫
如果需要更詳細(xì)的教程或針對特定場景的使用指導(dǎo),請告訴我!
]]>1. langdetect
? 簡介: langdetect 是一個非常流行的語言檢測庫,基于 Google 的 language-detection 項目。它可以檢測多種語言,并且對于短文本也有不錯的識別效果。
? 安裝:
pip install langdetect
? 使用示例:
from langdetect import detect
text = “Bonjour tout le monde”
language = detect(text)
print(language) # 輸出: ‘fr’ (法語)
2. langid
? 簡介: langid 是另一個非常強大的語言識別庫,支持97種語言。它的特點是完全自包含且無需外部依賴。
? 安裝:
pip install langid
? 使用示例:
import langid
text = “Hola, ?cómo estás?”
language, _ = langid.classify(text)
print(language) # 輸出: ‘es’ (西班牙語)
3. polyglot
? 簡介: polyglot 是一個支持多語言處理的庫,它不僅提供語言識別功能,還支持情感分析、實體識別等多種自然語言處理任務(wù)。
? 安裝:
pip install polyglot
? 使用示例:
from polyglot.detect import Detector
text = “Ceci est un exemple de texte en fran?ais”
detector = Detector(text)
language = detector.language.code
print(language) # 輸出: ‘fr’ (法語)
4. TextBlob
? 簡介: TextBlob 是一個簡潔易用的自然語言處理工具包,雖然它主要用于情感分析、詞性標(biāo)注等任務(wù),但也支持語言識別。
? 安裝:
pip install textblob
? 使用示例:
from textblob import TextBlob
text = “Hello, how are you?”
blob = TextBlob(text)
print(blob.detect_language()) # 輸出: ‘en’ (英語)
5. FastText (by Facebook)
? 簡介: FastText 是一個由 Facebook 提供的開源庫,除了高效的詞向量表示外,它也能很好地進行語言識別。它支持多達170多種語言。
? 安裝:
pip install fasttext
? 使用示例:
import fasttext
model = fasttext.load_model(‘lid.176.bin’) # 下載預(yù)訓(xùn)練模型
text = “Ceci est un texte en fran?ais”
prediction = model.predict(text)
print(prediction) # 輸出: (‘__label__fr’,)
6. cld3 (Compact Language Detector v3)
? 簡介: cld3 是一個高效的語言檢測庫,基于 Google 的 Compact Language Detector v3。它對短文本和多語言文本都有不錯的支持。
? 安裝:
pip install cld3
? 使用示例:
import cld3
text = “Hola, ?cómo estás?”
language = cld3.get_language(text)
print(language) # 輸出: Language: es (西班牙語)
總結(jié):
? 如果需要一個簡單、易用的工具,langdetect 和 langid 都是不錯的選擇。
? 如果對處理多語言的文本和需要其他 NLP 功能有需求,可以考慮使用 polyglot 或 TextBlob。
? 如果需要更高精度的檢測,尤其是在短文本的情況下,F(xiàn)astText 和 cld3 是更強大的選擇。
你可以根據(jù)具體需求選擇適合的工具!
]]>隱性知識大多存在于員工頭腦中,難以規(guī)范化。通過自上而下的管理傳遞、員工分享激勵和橫向溝通,企業(yè)可有效推動知識共享,避免“沉默的螺旋”和“信息繭房”現(xiàn)象。管理者需通過激勵機制、匿名反饋和互動平臺,激發(fā)員工的分享欲望,營造開放的學(xué)習(xí)環(huán)境。
將隱性知識轉(zhuǎn)化為文檔、視頻等易于理解和傳播的形式。提高知識顯性化水平,需要使用清晰的語言、結(jié)構(gòu)化內(nèi)容與操作指南,避免“知識的詛咒”,確保員工能夠快速學(xué)習(xí)與應(yīng)用。
通過明確的知識分類與目錄結(jié)構(gòu),解決信息碎片化和“信息過載”問題。構(gòu)建企業(yè)知識目錄時,需根據(jù)業(yè)務(wù)角色、職能劃分和應(yīng)用場景細(xì)分內(nèi)容,形成關(guān)聯(lián)明確、層次清晰的知識網(wǎng)絡(luò),提升員工的信息檢索與學(xué)習(xí)效率。
知識的應(yīng)用與再創(chuàng)造是企業(yè)競爭力的源泉。通過精準(zhǔn)檢索、實踐操作和創(chuàng)新激勵機制,企業(yè)可引導(dǎo)員工不斷學(xué)習(xí)、應(yīng)用與改進已有知識,實現(xiàn)知識資產(chǎn)的持續(xù)增值。
要實現(xiàn)企業(yè)知識管理的四個階段:知識顯性化、知識共享化、知識體系化和知識再生化,推薦以下工具組合,涵蓋文檔管理、協(xié)作平臺和學(xué)習(xí)系統(tǒng):
將隱性知識轉(zhuǎn)化為文檔、視頻等形式:
實現(xiàn)跨團隊知識共享與互動:
組織知識、構(gòu)建有序知識庫:
學(xué)習(xí)平臺與持續(xù)培訓(xùn):
以下是一個適用于企業(yè)網(wǎng)盤的知識目錄架構(gòu)設(shè)計示例:
根目錄:企業(yè)知識庫
通過構(gòu)建系統(tǒng)化的企業(yè)知識目錄,企業(yè)主不僅能有效應(yīng)對“信息過載”挑戰(zhàn),還能激發(fā)員工的學(xué)習(xí)主動性,提升工作效率與決策質(zhì)量,實現(xiàn)知識資產(chǎn)的最大化利用。
]]>在如今這個信息化的時代,數(shù)據(jù)對于企業(yè)的重要性不言而喻。企業(yè)數(shù)據(jù)不僅是經(jīng)營決策的依據(jù),也是團隊協(xié)作的核心。然而,隨著勒索病毒的肆虐,越來越多企業(yè)面臨數(shù)據(jù)被加密、勒索威脅的困境,企業(yè)的運營和發(fā)展也因此受到極大威脅。那么,如何有效地防止勒索病毒的侵害呢?一粒云企業(yè)網(wǎng)盤系統(tǒng),為您提供了強大的數(shù)據(jù)保護能力,讓您的企業(yè)數(shù)據(jù)安全無憂。
勒索病毒之所以如此危險,主要依賴于企業(yè)網(wǎng)絡(luò)中的共享端口和傳輸協(xié)議來傳播。傳統(tǒng)的文件共享方式往往通過SMB(Server Message Block)協(xié)議來傳輸數(shù)據(jù),這也成為勒索病毒的傳播途徑之一。然而,一粒云企業(yè)網(wǎng)盤系統(tǒng)避免了這一隱患,它完全沒有開啟Samba的共享端口,所有的數(shù)據(jù)傳輸都采用安全的HTTP或HTTPS協(xié)議。通過這種方式,企業(yè)內(nèi)部的每一位員工數(shù)據(jù)都可以通過獨立的客戶端進行備份和共享,確保數(shù)據(jù)傳輸?shù)陌踩?,最大限度地降低了勒索病毒通過網(wǎng)絡(luò)傳播的風(fēng)險。
勒索病毒往往通過加密文件的后綴來進行勒索,從而威脅企業(yè)數(shù)據(jù)的完整性和可用性。然而,一粒云企業(yè)網(wǎng)盤系統(tǒng)采用了先進的分布式存儲技術(shù)。每個文件被分散存儲在多個節(jié)點上,文件的后綴通常并不會成為勒索病毒的攻擊目標(biāo)。即使勒索病毒試圖加密或篡改某些文件,也無法輕易對系統(tǒng)中的文件造成破壞。分布式存儲不僅提升了數(shù)據(jù)的可靠性,還有效避免了勒索病毒的威脅。
即便是再強大的防護措施,也無法百分之百避免所有的勒索病毒攻擊。針對這一點,一粒云企業(yè)網(wǎng)盤系統(tǒng)還引入了獨立的文件備份與數(shù)據(jù)庫快照機制。系統(tǒng)會定期為文件和數(shù)據(jù)庫創(chuàng)建快照,保存最近30天內(nèi)的所有數(shù)據(jù)版本。這意味著,即使企業(yè)在某個時刻遭遇勒索病毒攻擊,數(shù)據(jù)也能通過快照機制迅速回滾,恢復(fù)到最近的正常狀態(tài)。這樣,企業(yè)不僅能夠避免因勒索病毒攻擊而導(dǎo)致的巨大損失,還能夠?qū)崿F(xiàn)快速的數(shù)據(jù)恢復(fù),保障業(yè)務(wù)持續(xù)穩(wěn)定運營。
讓我們來看一個真實的案例。深圳某創(chuàng)新科技公司在過去四年內(nèi),曾兩次遭遇勒索病毒的攻擊,每次都造成了不同程度的數(shù)據(jù)損失。然而,幸運的是,這家公司使用了一粒云協(xié)同文檔云系統(tǒng)。每次病毒攻擊發(fā)生后,企業(yè)都能通過一粒云的備份和快照機制,迅速恢復(fù)丟失的數(shù)據(jù),確保了企業(yè)運營不受影響??梢哉f,正是因為一粒云系統(tǒng)強大的數(shù)據(jù)保護能力,該公司成功避免了勒索病毒帶來的災(zāi)難性后果。
對于現(xiàn)代企業(yè)來說,數(shù)據(jù)的安全性至關(guān)重要。面對日益猖獗的勒索病毒,一粒云企業(yè)網(wǎng)盤系統(tǒng)憑借其創(chuàng)新的技術(shù)優(yōu)勢,提供了全面的防護措施,幫助企業(yè)有效避免勒索病毒的侵襲。不僅如此,系統(tǒng)強大的備份與恢復(fù)功能,也讓企業(yè)在面對數(shù)據(jù)丟失時能夠迅速恢復(fù),保障了業(yè)務(wù)的持續(xù)性和穩(wěn)定性。
選擇一粒云,選擇企業(yè)數(shù)據(jù)的安全守護,又是協(xié)同的助手。讓我們一起迎接更加安全、更加高效的未來!
]]>1. 工具介紹
? Pymupdf4llm
是基于 PyMuPDF 的輕量級庫,用于解析 PDF 文檔并將其輸出為適合 LLM 使用的格式。主要側(cè)重文本提取和結(jié)構(gòu)化處理,適合生成上下文良好的段落,便于用于 LLM 的問答場景。
? pdf-extract-api
是一個基于 API 的工具,專注于從 PDF 中提取特定的數(shù)據(jù)(如表格、元數(shù)據(jù)、關(guān)鍵段落等)。它通常提供更精細(xì)的配置選項,且需要在線服務(wù)支持。
2. 優(yōu)點
Pymupdf4llm
? 開源和輕量化:基于 PyMuPDF,依賴簡單,不需要網(wǎng)絡(luò)請求。
? 靈活性:支持本地化部署和定制,適合對隱私敏感的數(shù)據(jù)處理。
? LLM優(yōu)化:文本提取經(jīng)過優(yōu)化,更適合直接喂給 LLM 使用。
? 社區(qū)支持:有 Python 社區(qū)的廣泛支持,文檔豐富。
pdf-extract-api
? 精確提取:通過 API 提供強大的功能,如識別表格、圖像提取以及結(jié)構(gòu)化內(nèi)容分離。
? 便捷性:通常不需要用戶過多了解 PDF 內(nèi)部結(jié)構(gòu),適合快速實現(xiàn)提取目標(biāo)。
? 擴展性:可與其他 API 組合實現(xiàn)復(fù)雜任務(wù),如 OCR 集成處理掃描 PDF。
3. 缺點
Pymupdf4llm
? 復(fù)雜性有限:對非常復(fù)雜的 PDF(如多層嵌套、表格、圖片)支持不如專業(yè)化工具。
? 手動調(diào)整需求高:對提取后的數(shù)據(jù),需要編寫代碼進一步清洗和整理。
pdf-extract-api
? 依賴在線服務(wù):需要網(wǎng)絡(luò)訪問,可能對敏感文檔不適合。
? 成本問題:通常是收費服務(wù),使用量大時費用可能較高。
? 上手門檻高:需要了解 API 調(diào)用的基礎(chǔ),復(fù)雜設(shè)置可能增加學(xué)習(xí)成本。
4. 準(zhǔn)備度與上手難度
指標(biāo) Pymupdf4llm pdf-extract-api
部署與安裝 安裝簡單(pip install pymupdf 等) 需要注冊 API 服務(wù)并配置訪問權(quán)限
學(xué)習(xí)曲線 易于上手,Python 開發(fā)者友好 需要熟悉 API 文檔,配置參數(shù)稍復(fù)雜
定制化能力 高,代碼靈活,自由控制輸出內(nèi)容和格式 中,定制需依賴 API 提供的接口和選項
速度 本地運行,速度快 API 請求受網(wǎng)絡(luò)和服務(wù)端性能影響
環(huán)境依賴 本地運行,無需聯(lián)網(wǎng) 需聯(lián)網(wǎng)使用在線 API 服務(wù)
總結(jié)與建議
? 選擇 Pymupdf4llm:
如果你希望完全掌控 PDF 的提取邏輯、對敏感數(shù)據(jù)有隱私保護需求,并傾向于本地化輕量部署,Pymupdf4llm 是不錯的選擇。
? 選擇 pdf-extract-api:
如果需要快速處理復(fù)雜的 PDF 任務(wù)(如表格解析、精確提取特定內(nèi)容),且不介意使用在線服務(wù)和支付一定費用,那么 pdf-extract-api 更加適合。
最終選擇取決于項目的復(fù)雜性、隱私要求和開發(fā)資源。
]]>近日,高德紅外因六名前員工涉嫌盜用公司核心技術(shù),向法院提起了商業(yè)秘密侵權(quán)訴訟,索賠金額高達2億元人民幣。這一案件不僅讓高德紅外付出了巨大的經(jīng)濟代價,更警示了所有研發(fā)型企業(yè)——如何防止企業(yè)核心技術(shù)和商業(yè)秘密的泄露,已經(jīng)成為了企業(yè)面臨的一項重要挑戰(zhàn)。
企業(yè)的研發(fā)數(shù)據(jù)、生產(chǎn)技術(shù)、設(shè)計圖紙等商業(yè)秘密一旦泄露,不僅可能導(dǎo)致經(jīng)濟損失,還可能讓競爭對手迅速獲得市場優(yōu)勢。在這種背景下,研發(fā)型企業(yè)必須加強對核心技術(shù)的保護,采取先進的數(shù)據(jù)交換與文件管理技術(shù),防止信息泄露和不法獲取。
高德紅外的案例并非個別現(xiàn)象。隨著信息技術(shù)的飛速發(fā)展,企業(yè)內(nèi)外網(wǎng)隔離的需求不斷增加,但隨之而來的問題也越來越明顯——文件交換和數(shù)據(jù)傳輸?shù)陌踩猿蔀榱穗y題。傳統(tǒng)的U盤、移動硬盤等手動數(shù)據(jù)交換方式存在多種風(fēng)險,包括:
更嚴(yán)重的是,在員工離職時,技術(shù)泄露的風(fēng)險大大增加。對于企業(yè)來說,如何在內(nèi)外網(wǎng)隔離的環(huán)境下,高效、安全地傳輸核心文件,已成為企業(yè)管理中的重要問題。
為了解決這一問題,一粒云KWS隔離網(wǎng)文件安全交換系統(tǒng)應(yīng)運而生。該系統(tǒng)通過跨網(wǎng)安全擺渡技術(shù),幫助企業(yè)實現(xiàn)內(nèi)外網(wǎng)、多個安全域之間的安全文件流轉(zhuǎn),確保敏感數(shù)據(jù)在傳輸過程中不會泄露。
一粒云KWS隔離網(wǎng)文件安全交換系統(tǒng),已經(jīng)在多個行業(yè)和企業(yè)中得到了成功應(yīng)用,為他們提供了全方位的數(shù)據(jù)安全保障。
高德紅外的商業(yè)秘密侵權(quán)事件再次提醒企業(yè),尤其是那些擁有大量核心技術(shù)和敏感數(shù)據(jù)的研發(fā)型企業(yè),在日益復(fù)雜的網(wǎng)絡(luò)環(huán)境中,必須做好充足的防護措施。僅僅依賴傳統(tǒng)的安全策略和手動數(shù)據(jù)傳輸方式,遠(yuǎn)遠(yuǎn)不足以應(yīng)對日益嚴(yán)峻的數(shù)據(jù)泄露風(fēng)險。
企業(yè)應(yīng)盡早部署像一粒云KWS隔離網(wǎng)文件安全交換系統(tǒng)這樣的高效安全解決方案,實現(xiàn)內(nèi)外網(wǎng)隔離下的數(shù)據(jù)傳輸和文件流轉(zhuǎn),確保商業(yè)秘密不外泄,保護企業(yè)的技術(shù)創(chuàng)新和核心競爭力。
一粒云KWS隔離網(wǎng)文件安全交換系統(tǒng)不僅能夠為企業(yè)提供高效、安全的跨網(wǎng)文件交換解決方案,還能通過智能審批、敏感詞過濾、日志審計等多重功能,確保核心技術(shù)和商業(yè)秘密在流轉(zhuǎn)過程中的絕對安全。隨著數(shù)據(jù)泄露風(fēng)險的加劇,企業(yè)必須早做準(zhǔn)備,采取先進的數(shù)據(jù)交換與管理技術(shù),為核心技術(shù)和商業(yè)秘密保駕護航。
防患于未然,選擇一粒云,選擇更安全的未來。
]]>客戶為大型企業(yè),采用4個區(qū)域隔離的方式形成統(tǒng)一的文檔架構(gòu)。【 】里面的內(nèi)容為一粒云 KWS所支持的功能,可以看到我們基本全部滿足的客戶的要求,除了定制功能以外。
11、在線預(yù)覽要有水印功能,可追溯因截屏拍照導(dǎo)致的文件泄露事件?!局С帧?/p>
12、通知消息需要與云之家APP做集成,通知流程審批節(jié)點?!径ㄖ茖樱扑蛯徟?/p>
13、云之家APP做單點登陸集成,支持在云之家APP端進行流程審批。【定制,對接審批流程模板,綁定到隔離網(wǎng)文件交換的審批流程】
14、支持審批表單的自定義?!局С?、目前支持輸入、選擇2種字段、其他的需要定制】
15、支持審批人在PC和手機端在線預(yù)覽文件,但不能下載文件。(該功能可根據(jù)實際需求進行關(guān)閉和開啟)【支持】
16、支持準(zhǔn)入功能,非授信的設(shè)備無法登陸平臺,或者至少無法下載文件。(其目的是為了防止加密的文件通過平臺進行明文下載,造成加密失控,如果通過其它方式可以確保是密文下載【指定類型文件】,可不用支持準(zhǔn)入)【支持,可以綁定設(shè)備登錄,非認(rèn)證設(shè)備無法登錄】
17、支持完整的流程日志查詢和審計,便于事件追溯和排查?!局С帧?/p>
針對這個客戶,我們出具大簡潔方案為:
對接1:單點登錄 【1周】
對接2:賬號組織架構(gòu)同步【2周】
對接3:對接億賽通加解密、加密、解密、檢查文檔加密狀態(tài)【2周】
對接4: DLP 內(nèi)容檢測后的的流程對接(這里建議綁定 AI內(nèi)容檢測與我們的文檔安全登分級模塊,根據(jù)檢測后的等級進去走對應(yīng)的流程)【2周】
對接5:自定義審批表單對接或者定制?!?周】
模塊:隔離網(wǎng)文件安全交換審計模塊
系統(tǒng)節(jié)點:4個,每個區(qū)域一個,提供文檔管理、企業(yè)網(wǎng)盤、分布式存儲、文件預(yù)覽、權(quán)限管理、安全上傳、敏感內(nèi)容識別等功能。
使用用戶:1200人
]]>場景: 多個教師需要共享教學(xué)資源、教案、課件、試題庫等。
場景: 學(xué)科組長需要協(xié)調(diào)并管理本學(xué)科所有教師的教學(xué)資料,保證教學(xué)質(zhì)量。
場景: 學(xué)校領(lǐng)導(dǎo)需要快速審批各種文件和決策資料,如教學(xué)計劃、會議紀(jì)要、預(yù)算報告等。
場景: 學(xué)校各部門之間(如教務(wù)處、行政處、后勤部門等)需要共享一些通用文檔,如政策文件、規(guī)章制度、校內(nèi)公告等。
場景: 教師需要在不同地點(例如家里、辦公室、學(xué)校外部)進行備課和資料準(zhǔn)備,并且需要與其他教師合作進行集體備課。
場景: 學(xué)校教務(wù)部門需要保存歷年的教學(xué)計劃、課程安排、考試安排等重要文件。
場景: 學(xué)校領(lǐng)導(dǎo)和教師需要管理學(xué)校各類活動的策劃文件、會議記錄、通知等。
場景: 學(xué)校對教學(xué)資料、學(xué)生成績、行政文件等有嚴(yán)格的安全要求。
企業(yè)網(wǎng)盤文檔管理系統(tǒng)可以幫助學(xué)校中的不同角色解決很多日常工作中的實際問題。通過集中管理、協(xié)作共享、文件審批和在線備課等功能,網(wǎng)盤系統(tǒng)能夠提高工作效率、規(guī)范文件管理、加強跨部門協(xié)作、保證數(shù)據(jù)安全,從而為學(xué)校的教學(xué)和行政工作提供強有力的支持。
]]>RAGFlow 是一個基于對文檔的深入理解的開源 RAG(檢索增強生成)引擎。它為任何規(guī)模的企業(yè)提供了簡化的 RAG 工作流程,結(jié)合了 LLM(大型語言模型)以提供真實的問答功能,并以來自各種復(fù)雜格式數(shù)據(jù)的有根據(jù)的引文為后盾。
demo鏈接:RAGFlow
特點:
1、有一定的數(shù)據(jù)質(zhì)量保證,能從復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù)中提取基于文檔理解的深度知識。
2、內(nèi)置模板,可以基于模板形成知識庫;文檔分塊可以實現(xiàn)人工干預(yù),提高文檔質(zhì)量;
3、可以兼容異構(gòu)數(shù)據(jù)源,支持 Word、幻燈片、excel、txt、圖像、掃描副本、結(jié)構(gòu)化數(shù)據(jù)、網(wǎng)頁等。
部署要求:
vm.max_map_count
要檢查 的值 :vm.max_map_count
$ sysctl vm.max_map_count如果不是,則重置為至少 262144 的值。vm.max_map_count
vm.max_map_count
dev-slim
$ cd ragflow/docker$ docker compose -f docker-compose.yml up -d注意:包含嵌入模型和 Python 庫的 RAGFlow Docker 映像的大小約為 9GB,加載時間可能要長得多。
RAGFlow_IMAGE
RAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0-slim
RAGFlow_IMAGE
RAGFLOW_IMAGE=infiniflow/ragflow:dev
RAGFlow_IMAGE
RAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0
network abnormal
http://IP_OF_YOUR_MACHINE
80
user_default_llm
API_KEY
有關(guān)更多信息,請參閱 llm_api_key_setup。部署完成后,還需要對RAGFlow進行配置,需要關(guān)注以下幾點:
SVR_HTTP_PORT
MYSQL_PASSWORD
MINIO_PASSWORD
您必須確保對 .env 文件的更改與 service_conf.yaml 文件中的更改一致。
./docker/README 文件提供了環(huán)境設(shè)置和服務(wù)配置的詳細(xì)描述,您需要確保 ./docker/README 文件中列出的所有環(huán)境設(shè)置都與 service_conf.yaml 文件中的相應(yīng)配置保持一致。
要更新默認(rèn) HTTP 服務(wù)端口 (80),請轉(zhuǎn)到 docker-compose.yml 并更改為 。80:80
<YOUR_SERVING_PORT>:80
對上述配置的更新需要重啟所有容器才能生效:
$ docker compose -f docker/docker-compose.yml up -d
此映像的大小約為 1 GB,依賴于外部 LLM 和嵌入服務(wù)。
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile.slim -t infiniflow/ragflow:dev-slim .
此映像的大小約為 9 GB。由于它包括嵌入模型,因此它僅依賴于外部 LLM 服務(wù)。
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile -t infiniflow/ragflow:dev .
/etc/hosts
127.0.0.1
127.0.0.1 es01 mysql minio redis
5455
1200
HF_ENDPOINT
export HF_ENDPOINT=https://hf-mirror.com啟動 backend service:proxy.target
http://127.0.0.1:9380
啟動前端服務(wù):
npm run dev 以下輸出確認(rèn)系統(tǒng)已成功啟動完成。
1、Text2KG 的使用
Text2KG是一個開源項目,能夠利用大型語言模型(zero-shot)跨領(lǐng)域從文本中提取實體和關(guān)系,自動構(gòu)建和更新知識圖譜,并通過Neo4j進行可視化。
iText2KG由四個主要模塊組成:文檔提取器、增量實體提取器、增量關(guān)系提取器、圖形集成器和可視化。它們協(xié)同工作,從非結(jié)構(gòu)化文本構(gòu)建和可視化知識圖譜。
四個模塊中,增量實體提取器與增量關(guān)系提取器最為關(guān)鍵,采用大模型來實現(xiàn),LLM提取代表一個唯一概念的實體,以避免語義混合的實體。顯示了使用 Langchain JSON 解析器的實體和關(guān)系提取prompt。分類如下:藍(lán)色 – 由 Langchain 自動格式化的prompt;常規(guī) – iText2KG設(shè)計的prompt;斜體 – 專門為實體和關(guān)系提取設(shè)計的prompt。(a)關(guān)系提取prompt和(b)實體提取prompt。
為了說明知識圖譜構(gòu)建的結(jié)果,在三種不同場景下,將基線方法與iText2KG進行了比較:
一種由 LLM 驅(qū)動的零樣本方法,使用大型語言模型構(gòu)建增量知識圖譜(KG)
iText2KG
是一個 Python
包,通過利用大型語言模型從文本文檔中提取實體和關(guān)系,逐步構(gòu)建具有已解析實體和關(guān)系的一致知識圖譜。
它具有零樣本能力,無需專門的訓(xùn)練即可跨各個領(lǐng)域提取知識。
它包含四個模塊:文檔提煉器、增量實體提取器、增量關(guān)系提取器和圖形集成器與可視化。
Neo4j
?圖形集成器:最后一個模塊以圖形格式可視化關(guān)系和實體,利用 Neo4j 進行有效表示。對于我們的 iText2KG
它包含了兩大特點
iText2KG
?允許增量構(gòu)建?KG
,這意味著它可以在新數(shù)據(jù)可用時不斷更新和擴展圖,而無需進行大量重新處理。LLM
?的零樣本功能,使其無需預(yù)定義集或外部本體即可運行。這種靈活性使其能夠適應(yīng)各種?KG
?構(gòu)建場景,而無需進行大量訓(xùn)練或微調(diào)。在運行 iText2KG
之前,我們先設(shè)置好大模型,我這里選擇的是 OpenAi
的模型以及 HuggingFace
的 bge-large-zh embedding
模型。這么選擇也是考慮到構(gòu)建 KG
的準(zhǔn)確度。
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
import os
os.environ["OPENAI_API_KEY"] = "*****"
openai_api_key = os.environ["OPENAI_API_KEY"]
openai_llm_model = llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
messages = [
(
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
),
("human", "I love programming."),
]
ai_msg=openai_llm_model.invoke(messages)
開始部署我們的 Embedding
模型:
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
openai_embeddings_model = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
text = "This is a test document."
query_result = openai_embeddings_model.embed_query(text)
query_result[:3]
doc_result = openai_embeddings_model.embed_documents([text])
iText2KG
構(gòu)建 KG
我們這里的場景是,給出一篇簡歷,使用知識圖譜將在線職位描述與生成的簡歷聯(lián)系起來。
設(shè)定目標(biāo)是評估候選人是否適合這份工作。
我們可以為 iText2KG
的每個模塊使用不同的 LLM
或嵌入模型。但是,重要的是確保節(jié)點和關(guān)系嵌入的維度在各個模型之間保持一致。
如果嵌入維度不同,余弦相似度可能難以準(zhǔn)確測量向量距離以進行進一步匹配。
我們的簡歷放到根目錄,加載簡歷:
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader(f"./CV_Emily_Davis.pdf")
pages = loader.load_and_split()
初始化 DocumentDistiller
引入 llm
:
from itext2kg.documents_distiller import DocumentsDisiller, CV
document_distiller = DocumentsDisiller(llm_model = openai_llm_model)
信息提煉:
IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a CV.
- If you do not find the right information, keep its place empty.
'''
# 使用定義好的查詢和輸出數(shù)據(jù)結(jié)構(gòu)提煉文檔。
distilled_cv = document_distiller.distill(documents=[page.page_content.replace("{", '[').replace("}", "]") for page in pages], IE_query=IE_query, output_data_structure=CV)
將提煉后的文檔格式化為語義部分。
semantic_blocks_cv = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_cv.items() if value !=[] and value != "" and value != None]
我們可以自定義輸出數(shù)據(jù)結(jié)構(gòu),我們這里定義了4種,工作經(jīng)歷模型,崗位,技能,證書。
from pydantic import BaseModel, Field
from typing import List, Optional
class JobResponsibility(BaseModel):
description: str = Field(..., description="A specific responsibility in the job role")
class JobQualification(BaseModel):
skill: str = Field(..., description="A required or preferred skill for the job")
class JobCertification(BaseModel):
certification: str = Field(..., description="Required or preferred certifications for the job")
class JobOffer(BaseModel):
job_offer_title: str = Field(..., description="The job title")
company: str = Field(..., description="The name of the company offering the job")
location: str = Field(..., description="The job location (can specify if remote/hybrid)")
job_type: str = Field(..., description="Type of job (e.g., full-time, part-time, contract)")
responsibilities: List[JobResponsibility] = Field(..., description="List of key responsibilities")
qualifications: List[JobQualification] = Field(..., description="List of required or preferred qualifications")
certifications: Optional[List[JobCertification]] = Field(None, description="Required or preferred certifications")
benefits: Optional[List[str]] = Field(None, description="List of job benefits")
experience_required: str = Field(..., description="Required years of experience")
salary_range: Optional[str] = Field(None, description="Salary range for the position")
apply_url: Optional[str] = Field(None, description="URL to apply for the job")
定義一個招聘工作需求的描述:
job_offer = """
About the Job Offer
THE FICTITIOUS COMPANY
FICTITIOUS COMPANY is a high-end French fashion brand known for its graphic and poetic style, driven by the values of authenticity and transparency upheld by its creator Simon Porte Jacquemus.
Your Role
Craft visual stories that captivate, inform, and inspire. Transform concepts and ideas into visual representations. As a member of the studio, in collaboration with the designers and under the direction of the Creative Designer, you should be able to take written or spoken ideas and convert them into designs that resonate. You need to have a deep understanding of the brand image and DNA, being able to find the style and layout suited to each project.
Your Missions
Translate creative direction into high-quality silhouettes using Photoshop
Work on a wide range of projects to visualize and develop graphic designs that meet each brief
Work independently as well as in collaboration with the studio team to meet deadlines, potentially handling five or more projects simultaneously
Develop color schemes and renderings in Photoshop, categorized by themes, subjects, etc.
Your Profile
Bachelor’s degree (Bac+3/5) in Graphic Design or Art
3 years of experience in similar roles within a luxury brand's studio
Proficiency in Adobe Suite, including Illustrator, InDesign, Photoshop
Excellent communication and presentation skills
Strong organizational and time management skills to meet deadlines in a fast-paced environment
Good understanding of the design process
Freelance cont
繼續(xù)使用上面方法做信息提煉:
IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a job offer description.
- If you do not find the right information, keep its place empty.
'''
distilled_Job_Offer = document_distiller.distill(documents=[job_offer], IE_query=IE_query, output_data_structure=JobOffer)
print(distilled_Job_Offer)
semantic_blocks_job_offer = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_Job_Offer.items() if value !=[] and value != "" and value != None]
到這里準(zhǔn)備工作完成,簡歷和工作需求都已經(jīng)提煉完畢,然后正式開始構(gòu)建 graph
,我們將簡歷的所有語義塊作為一個塊傳遞給了 LLM
。
也將工作需求作為另一個語義塊傳遞,也可以在構(gòu)建圖時將語義塊分開。
我們需要注意每個塊中包含多少信息,然后好將它與其他塊連接起來,我們在這里做的就是一次性傳遞所有語義塊。
from itext2kg import iText2KG
itext2kg = iText2KG(llm_model = openai_llm_model, embeddings_model = openai_embeddings_model)
global_ent, global_rel = itext2kg.build_graph(sections=[semantic_blocks_cv], ent_threshold=0.6, rel_threshold=0.6)
global_ent_, global_rel_ = itext2kg.build_graph(sections=[semantic_blocks_job_offer], existing_global_entities = global_ent, existing_global_relationships = global_rel, ent_threshold=0.6, rel_threshold=0.6)
iText2KG
構(gòu)建 KG
的過程我們看到有很多參數(shù),下面分貝是對每個參數(shù)的表示做一些解釋:
llm_model
:用于從文本中提取實體和關(guān)系的語言模型實例。embeddings_model
:用于創(chuàng)建提取實體的向量表示的嵌入模型實例。sleep_time (int)
:遇到速率限制或錯誤時等待的時間(以秒為單位)(僅適用于?OpenAI
)。默認(rèn)為 5 秒。iText2KG
的 build_graph
參數(shù):
sections
?(List[str])
:字符串(語義塊)列表,其中每個字符串代表文檔的一部分,將從中提取實體和關(guān)系。existing_global_entities
?(List[dict], optional)
:與新提取的實體進行匹配的現(xiàn)有全局實體列表。每個實體都表示為一個字典。existing_global_relationships (List[dict], optional)
:與新提取的關(guān)系匹配的現(xiàn)有全局關(guān)系列表。每個關(guān)系都表示為一個字典。ent_threshold (float, optional)
:實體匹配的閾值,用于合并不同部分的實體。默認(rèn)值為 0.7。rel_threshold (float, optional)
:關(guān)系匹配的閾值,用于合并不同部分的關(guān)系。默認(rèn)值為 0.7。從圖中結(jié)果看到我們構(gòu)建過程中的實體,和關(guān)聯(lián)關(guān)系。
最后使用 GraphIntegrator
對構(gòu)建的知識圖譜進行可視化。
使用指定的憑據(jù)訪問圖形數(shù)據(jù)庫 Neo4j
,并對生成的圖形進行可視化,以提供從文檔中提取的關(guān)系和實體的視覺表示。
from itext2kg.graph_integration import GraphIntegrator
URI = "bolt://3.216.93.32:7687"
USERNAME = "neo4j"
PASSWORD = "selection-cosal-cubes"
new_graph = {}
new_graph["nodes"] = global_ent_
new_graph["relationships"] = global_rel_
GraphIntegrator(uri=URI, username=USERNAME, password=PASSWORD).visualize_graph(json_graph=new_graph)
打開我們的 Neo4j
圖形數(shù)據(jù)庫: