【大模型:知識庫管理】--Dify接入RAGFlow 知識庫

ragflow的官方文檔:

HTTP API 接口 |抹布流 --- HTTP API | RAGFlow

接著前文,我們已經創建了知識庫,那么如何才能使用它呢?

當然也是通過網絡API的形式去調用它。本文將講解兩種方式:

  1. Dify調用
  2. python源碼調用

目錄

1.創建API-Key

2.DIfy接入ragflow

2.1.確定ragflow的域名

2.2. 確定IP地址

2.3.拼接完整域名

2.4.填寫信息

3.聊天測試

4.Python連接ragflow

4.1.知識庫管理

4.1.1.創建知識庫

4.1.2.刪除知識庫?

4.1.3.列出知識庫

4.1.4.更新知識庫

4.2.知識庫文件管理

4.2.1.上傳文件

4.2.2.更新文件?

4.2.3.下載文件

4.2.4.列出文件

4.2.5.刪除文件

4.2.6.解析文件

4.2.7.停止解析


1.創建API-Key

獲取ragflow知識庫ID:

2.DIfy接入ragflow

看看官網如何講解:External Knowledge API - Dify Docs

貌似找不出什么,因為這個節點肯定是由外部知識庫定義,只要遵循Dify的端點定義要求就行了,即:url路徑中要有一個/retrieval

2.1.確定ragflow的域名

接口是對外提供服務的,是后端服務,所以,他是ragflow-server提供的,我們可以看到,ragflow的容器中,ragflow-server是對外提供服務的,有兩種服務:

  • 一個是web網頁端口的服務:默認是80端口,為了避免和dify端口沖突,我這里改為了8080端口,還有就是ssl端口443,我這里也改為了4434端口
  • 另一個就是接口服務的端口:9380,這個就是我們的知識庫接口對外的服務端口,web前端通過接口提供的服務,與后端進行數據交互

?到這里,ragflow的外部知識庫接口前面的節點就確定了http://{你的IP}:9380

2.2. 確定IP地址

由于我們的項目是通過docker啟動的,所以,統一使用 host.docker.internal:9380

這里解釋一下這個域名:

host.docker.internal 是Docker提供的一種方便的機制,用于在開發和測試環境中從容器訪問宿主機的服務。這個名稱在Docker Desktop for Windows和Docker Desktop for Mac上是可用的,它允許容器中的應用程序訪問宿主機上的服務和端口。

在不同的操作系統(如Windows和Mac)上,宿主機的IP地址可能會有所不同.host.docker.internal 提供了一個統一的名稱,使得容器中的配置在不同平臺上保持一致。

2.3.拼接完整域名

按照前面一步步推理,理論上來說,一個完整的api節點應該完整了,但是這就夠了嗎?

我們看下官方文檔:

發現每個接口都有個公共前綴:/api/v1

這其實也是絕大多數后端服務的通行做法,加上前面我們拼接處的api節點,現在才算是完整的拼接出了api節點了:http://host.docker.internal:9380/api/v1/dify/retrieval

我們現在可以確定Dify中關于外部知識庫的節點定義了,如下圖:

http://host.docker.internal:9380/api/v1/difyhttp://host.docker.internal:9380/api/v1/dify

2.4.填寫信息

如果配置正確會顯示出來。然后鏈接:

填寫剛剛的外部知識庫 API

3.聊天測試

創建一個聊天助手測試一下知識庫,

?

4.Python連接ragflow

Python 應用程序接口 |抹布流 --- Python API | RAGFlow

先安裝所需要的包:

pip install ragflow-sdk?

4.1.知識庫管理

4.1.1.創建知識庫

RAGFlow.create_dataset(name: str,avatar: Optional[str] = None,description: Optional[str] = None,embedding_model: Optional[str] = "BAAI/bge-large-zh-v1.5@BAAI",permission: str = "me", chunk_method: str = "naive",pagerank: int = 0,parser_config: DataSet.ParserConfig = None
) -> DataSet
??參數????類型????說明????可選值/默認值??
??name?(必填)?str數據集的唯一名稱(最長128字符,不區分大小寫)-
??avatar??str頭像的Base64編碼默認:None
??description??str數據集的簡要描述默認:None
??permission??str數據集訪問權限"me"(默認,僅自己可管理),"team"(全體團隊成員可管理)
??chunk_method??str數據集內容的分塊方法"naive"(默認常規分塊)、"manual"(手動)、"qa"(問答)、"table"(表格)、"paper"(論文)、"book"(書籍)、"laws"(法律)、"presentation"(演示文稿)、"picture"(圖片)、"one"(單塊)、"email"(郵件)、"knowledge-graph"(知識圖譜)
??pagerank??int數據集的PageRank值(影響排序權重)默認:0
??parser_config??dict解析器配置(根據chunk_method動態變化)詳見下方說明

??parser_config 詳細說明(按分塊方法)??

??chunk_method????parser_config 配置??
"naive"(常規){"chunk_token_num":128, "delimiter":"\\n", "html4excel":False, "layout_recognize":True, "raptor":{"use_raptor":False}}
"qa"(問答){"raptor": {"use_raptor": False}}
"manual"(手動)同上
"table"(表格)None
"paper"(論文)"qa"
"book"(書籍)"qa"
"laws"(法律)"qa"
"picture"(圖片)None
"presentation"(演示)"qa"
"one"(單塊)None
"knowledge-graph"(知識圖譜){"chunk_token_num":128, "delimiter":"\\n", "entity_types":["organization","person","location","event","time"]}
"email"(郵件)None

簡單的例子:?

from ragflow_sdk import RAGFlowrag_object = RAGFlow(api_key="***", base_url="http://host.docker.internal:9380")
#創建知識庫
dataset = rag_object.create_dataset(name="gyp")

在ragflow網站可以查看到:?

4.1.2.刪除知識庫?

RAGFlow.delete_datasets(ids: list[str] | None = None)

按 ID 刪除數據集。

如果為 None,則將刪除所有數據集。

id:8b025f18453711f0906f0242ac140004?

#8b025f18453711f0906f0242ac140004
rag_object.delete_datasets(ids=["8b025f18453711f0906f0242ac140004"])

4.1.3.列出知識庫

rag_object.list_datasets(page: int = 1, #頁碼page_size: int = 30,#每頁數量orderby: str = "create_time",#排序字段desc: bool = True,#是否降序id: str = None,#idname: str = None#名稱
) -> list[DataSet]

4.1.4.更新知識庫

DataSet.update(update_message: dict)
??參數????類型????說明????約束/可選值??
??update_message??dict[str, str|int]包含待更新屬性的字典,支持以下鍵:-
→?"name"str數據集的新名稱- 僅限基本多語言平面(BMP)字符<br>- 最長128字符<br>- 不區分大小寫
→?"avatar"str頭像的Base64編碼(Body參數)- 最長65535字符
→?"embedding_model"str更新的嵌入模型名稱(Body參數)- 格式必須為?model_name@model_factory<br>- 最長255字符<br>- 需確保?chunk_count=0?才能更新
→?"permission"str數據集權限"me"(默認,僅自己可管理)<br>"team"(全體團隊成員可管理)
→?"pagerank"int數據集的PageRank值(影響排序權重)- 默認值:0<br>- 范圍:0?~?100
→?"chunk_method"enum<string>數據集內容的分塊方法"naive"(默認常規)<br>"book"(書籍)<br>"email"(郵件)<br>"laws"(法律)<br>"manual"(手動)<br>"one"(單塊)<br>"paper"(論文)<br>"picture"(圖片)<br>"presentation"(演示文稿)<br>"qa"(問答)<br>"table"(表格)<br>"tag"(標簽)
from ragflow_sdk import RAGFlowrag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.list_datasets(name="kb_name")
dataset = dataset[0]
dataset.update({"embedding_model":"BAAI/bge-zh-v1.5", "chunk_method":"manual"})

4.2.知識庫文件管理

4.2.1.上傳文件

DataSet.upload_documents(document_list: list[dict])#上傳文件
dataset = rag_object.create_dataset(name="kb_name")
dataset.upload_documents([{"display_name": "1.txt", "blob": "<BINARY_CONTENT_OF_THE_DOC>"}, {"display_name": "2.pdf", "blob": "<BINARY_CONTENT_OF_THE_DOC>"}])

“display_name”:(可選)要在數據集中顯示的文件名。

“blob”:(可選)要上傳的文件的二進制內容。

4.2.2.更新文件?

from ragflow_sdk import RAGFlowrag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.list_datasets(id='id')
dataset = dataset[0]
doc = dataset.list_documents(id="wdfxb5t547d")
doc = doc[0]
doc.update([{"parser_config": {"chunk_token_count": 256}}, {"chunk_method": "manual"}])

4.2.3.下載文件

from ragflow_sdk import RAGFlowrag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.list_datasets(id="id")
dataset = dataset[0]
doc = dataset.list_documents(id="wdfxb5t547d")
doc = doc[0]
open("~/ragflow.txt", "wb+").write(doc.download())
print(doc)

4.2.4.列出文件

from ragflow_sdk import RAGFlowrag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.create_dataset(name="kb_1")filename1 = "~/ragflow.txt"
blob = open(filename1 , "rb").read()
dataset.upload_documents([{"name":filename1,"blob":blob}])
for doc in dataset.list_documents(keywords="rag", page=0, page_size=12):print(doc)

4.2.5.刪除文件

from ragflow_sdk import RAGFlowrag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.list_datasets(name="kb_1")
dataset = dataset[0]
dataset.delete_documents(ids=["id_1","id_2"])

4.2.6.解析文件

rag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.create_dataset(name="dataset_name")
documents = [{'display_name': 'test1.txt', 'blob': open('./test_data/test1.txt',"rb").read()},{'display_name': 'test2.txt', 'blob': open('./test_data/test2.txt',"rb").read()},{'display_name': 'test3.txt', 'blob': open('./test_data/test3.txt',"rb").read()}
]
dataset.upload_documents(documents)
documents = dataset.list_documents(keywords="test")
ids = []
for document in documents:ids.append(document.id)
dataset.async_parse_documents(ids)
print("Async bulk parsing initiated.")

4.2.7.停止解析

rag_object = RAGFlow(api_key="<YOUR_API_KEY>", base_url="http://<YOUR_BASE_URL>:9380")
dataset = rag_object.create_dataset(name="dataset_name")
documents = [{'display_name': 'test1.txt', 'blob': open('./test_data/test1.txt',"rb").read()},{'display_name': 'test2.txt', 'blob': open('./test_data/test2.txt',"rb").read()},{'display_name': 'test3.txt', 'blob': open('./test_data/test3.txt',"rb").read()}
]
dataset.upload_documents(documents)
documents = dataset.list_documents(keywords="test")
ids = []
for document in documents:ids.append(document.id)
dataset.async_parse_documents(ids)
print("Async bulk parsing initiated.")
dataset.async_cancel_parse_documents(ids)
print("Async bulk parsing cancelled.")

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

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

相關文章

Vue 模板配置項深度解析

Vue 模板配置項深度解析 在 Vue 組件開發中&#xff0c;template 是定義組件視圖結構的核心配置項。作為 Vue 專家&#xff0c;我將全面解析模板的各個方面&#xff0c;幫助你掌握高效構建 Vue 組件的藝術。 一、模板基礎概念 1. 模板的本質 聲明式渲染&#xff1a;描述 UI…

基于深度哈希與圖索引的十億級圖像近重復檢測系統

引言 在上一篇文章中,我們介紹了基于Vision API和SimHash的億級圖像去重方案。本文將更進一步,探討如何應對十億級圖像庫的近重復檢測挑戰,提出一種結合深度哈希學習與圖索引的創新架構。該系統在多個關鍵指標上比傳統方法提升顯著: 檢測精度提升:mAP@100達到0.92(傳統方…

Python開發基礎手語識別(基礎框架版)

一、前期準備 想要實現這些&#xff0c;首先就是要模擬出來一個大致的框架&#xff0c;方便后續開展&#xff0c;下面的就是隨便寫的一個框架&#xff0c;大家湊合看看就行&#xff0c;基本上是這個意思&#xff1a; from tkinter import *w Tk() w.title("手語識別&am…

React從基礎入門到高級實戰:React 實戰項目 - 項目一:在線待辦事項應用

React 實戰項目&#xff1a;在線待辦事項應用 歡迎來到本 React 開發教程專欄的第 26 篇&#xff01;在之前的 25 篇文章中&#xff0c;我們從 React 的基礎概念逐步深入到高級技巧&#xff0c;涵蓋了組件、狀態、路由和性能優化等核心知識。這一次&#xff0c;我們將通過一個…

1991-2024年上市公司個股換手率數據

1991-2024年上市公司個股換手率數據 1、時間&#xff1a;1991-2024年 2、來源&#xff1a;上海證券交易所和深圳證券交易所 3、指標&#xff1a;證券代碼、交易年份、開始日期、截止日期、年換手率(流通股數)(%)、年換手率(總股數)(%)、日均換手率(流通股數)(%)、日均換手率…

RAID存儲技術概述

1 數據存儲架構 數據存儲架構是對數據存儲方式、存儲設備及相關組件的組織和規劃&#xff0c;涵蓋存儲系統的布局、數據存儲策略等&#xff0c;它明確數據如何存儲、管理與訪問&#xff0c;為數據的安全、高效使用提供支撐。 1.1 存儲系統 存儲系統是計算機的重要組成部分之…

LRU 和 DiskLRU實現相冊緩存器

我是寫Linux后端的&#xff08;golang、c、py&#xff09;&#xff0c;后端緩存算法通常是指的是內存里面的lru、或diskqueue&#xff0c;都是獨立使用。 很少有用內存lru與disklru結合的場景需求。近段時間研究android開發&#xff0c;里面有一些設計思想值得后端學習。 寫這…

可視化預警:如何讓生產風險預警更高效?

你有沒有遇到過這種情況&#xff1f; 明明設備已經開始發熱報警&#xff0c;但操作人員還在繼續運行&#xff1b; 或者某個參數已經接近危險值&#xff0c;卻沒人注意到&#xff1b; 甚至問題早就埋下了隱患&#xff0c;只是當時沒發現…… 這些情況的背后&#xff0c;其實都…

【MPC-C++】qpOASES 源碼編譯與鏈接,編譯器設置細節

qpOASES 源碼編譯與鏈接 克隆源碼 git clone https://github.com/coin-or/qpOASES.gitcd qpOASES mkdir build cd build接下來是構建&#xff0c;有一些細節。 查看 CMakeLists.txt&#xff0c;發現如果不顯示指定 CMAKE_BUILD_TYPE 構建版本&#xff0c;會自動編譯 Release…

【11408學習記錄】考研數學攻堅:行列式本質、性質與計算全突破

行列式 數學線性代數一、對象&#xff08;元素&#xff09;&#xff1a;向量二、運算三、行列式3.1 第一種定義——行列式的本質定義3.2 行列式的性質性質1&#xff1a;行列互換&#xff0c;其值不變性質2&#xff1a;若行列式中某行&#xff08;列&#xff09;元素全為零&…

Qt/C++開發監控GB28181系統/取流協議/同時支持udp/tcp被動/tcp主動

一、前言說明 在2011版本的gb28181協議中&#xff0c;拉取視頻流只要求udp方式&#xff0c;從2016開始要求新增支持tcp被動和tcp主動兩種方式&#xff0c;udp理論上會丟包的&#xff0c;所以實際使用過程可能會出現畫面花屏的情況&#xff0c;而tcp肯定不丟包&#xff0c;起碼…

小木的算法日記-線段樹

&#x1f333; 線段樹 &#xff08;Segment Tree&#xff09;&#xff1a;玩轉區間作的終極利器 你好&#xff0c;未來的算法大師&#xff01; 想象一下&#xff0c;你正在處理一個巨大的數據集&#xff0c;比如某個電商網站一整天的用戶點擊流。老板突然問你&#xff1a;“下…

Day24 元組和OS模塊

1、元組&#xff08;有序 不可變 可重復&#xff09; 管道工程中pipeline類接收的是一個包含多個小元組的列表作為輸入。可以這樣理解這個結構&#xff1a; &#xff08;1&#xff09; 列表 []: 定義了步驟執行的先后順序。Pipeline 會按照列表中的順序依次處理數據。之所以用列…

Auto-Coder使用GPT-4o完成:在用TabPFN這個模型構建一個預測未來3天漲跌的分類任務

通過akshare庫&#xff0c;獲取股票數據&#xff0c;并生成TabPFN這個模型 可以識別、處理的格式&#xff0c;寫一個完整的預處理示例&#xff0c;并構建一個預測未來 3 天股價漲跌的分類任務 用TabPFN這個模型構建一個預測未來 3 天股價漲跌的分類任務&#xff0c;進行預測并輸…

Device Mapper 機制

Device Mapper 機制詳解 Device Mapper&#xff08;簡稱 DM&#xff09;是 Linux 內核中的一套通用塊設備映射框架&#xff0c;為 LVM、加密磁盤、RAID 等提供底層支持。本文將詳細介紹 Device Mapper 的原理、實現、內核配置、常用工具、操作測試流程&#xff0c;并配以詳細的…

crackme006

crackme006 名稱值軟件名稱aLoNg3x.1.exe加殼方式無保護方式Serial編譯語言Delphi調試環境Win10 64位使用工具x32dbg,ida pro,PEid,DarkDe4破解日期2025-06-05 脫殼 1. 先用PEid查殼 查到無殼 尋找Serial 查詢到編程語言為Delphi 導出Delphi符號表信息到x32dbg&#xff0c…

Conda 創建新環境時報錯 HTTP 502,如何解決?

Conda 創建新環境時報錯 HTTP 502&#xff0c;如何解決&#xff1f; 最近在用 Conda 創建新環境時&#xff0c;突然遇到這樣一個錯誤&#xff1a; CondaHTTPError: HTTP 502 BAD GATEWAY for url <https://mirrors.westlake.edu.cn/ANACONDA/cloud/conda-forge/linux-64/r…

2025最全TS手寫題之partial/Omit/Pick/Exclude/Readonly/Required

隨著 TS 在工作中使用的越來越廣泛&#xff0c;面試的時候面試官也都會加上一兩個 TS 的問題來了解候選人對于 TS 的熟悉程度&#xff0c;其中就有不少手寫題目&#xff0c;比如筆者在字節的一次二面&#xff0c;面試官就問到了我如何實現一個 Pick&#xff0c;在小紅書的一面&…

基于江科大stm32屏幕驅動,實現OLED多級菜單(動畫效果),結構體鏈表實現(獨創源碼)

引言 在嵌入式系統中&#xff0c;用戶界面的設計往往直接影響到用戶體驗。本文將以STM32微控制器和OLED顯示屏為例&#xff0c;介紹如何實現一個多級菜單系統。該系統支持用戶通過按鍵導航菜單&#xff0c;執行相應操作&#xff0c;并提供平滑的滾動動畫效果。 本文設計了一個…

LLMs之StructuredOutput:大模型結構化輸出的簡介、常用方案、前沿框架之詳細攻略

LLMs之StructuredOutput&#xff1a;大模型結構化輸出的簡介、常用方案、前沿框架之詳細攻略 目錄 大模型結構化輸出的簡介 1、特點與難點 大模型結構化輸出的常用方案及對比 1、前沿框架&#xff1a;vLLM 與 XGrammar 大模型結構化輸出的案例應用 大模型結構化輸出的簡介…