成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南 原創(chuàng)

發(fā)布于 2025-6-18 06:37
瀏覽
0收藏

背景

在我們之前的文章中,我們對比了dify,ragflow和n8n這三個工具的使用場景及其差異。實際上,在企業(yè)中,這些工具通常會被結(jié)合起來使用,以便充分發(fā)揮各自的優(yōu)勢。例如,盡管ragflow也具備一些智能功能,但是與dify相比,它在這方面的表現(xiàn)力還有待提高。然而,當談到解析和檢索的能力時,ragflow卻顯著超過了dify。在今天的文章中,我們將探討如何有效地將這兩個工具結(jié)合使用。

RAGFlow

核心功能

我覺得 RAGflow 最大的一個亮點就是支持各種基于模板的解析模式和多樣的模型支持,這主要是通過??deepdoc??模塊實現(xiàn)。這種靈活性使得 RAGflow 能夠適應不同類型的文檔和數(shù)據(jù)結(jié)構(gòu),從而提高解析的準確性和效率。在RAGFlow剛出來的時候,我們就開始利用其deepdoc模塊幫我們做文檔解析,效果比langchain內(nèi)置的pymupdf效果要好很多。

具體來說,RAGflow 提供了以下幾種解析模式和模型支持:

  • 基于規(guī)則的解析:適用于結(jié)構(gòu)化程度較高的文檔
  • 基于典型數(shù)據(jù)結(jié)構(gòu)的解析:例如 Paper, Table 等類型的數(shù)據(jù)
  • 基于 Graph 的解析:參考 GraphRAG 構(gòu)建知識集的 Knowledge Graph 知識圖譜

安裝要求

硬件指標:

  • CPU >= 4 cores
  • RAM >= 16 GB
  • Disk >= 50 GB
  • Docker >= 24.0.0 & Docker Compose >= v2.26.1

內(nèi)存映射:

sudo sysctl -w vm.max_map_count=262144

ragflow 依賴 Elasticsearch,Elasticsearch 官方建議將其調(diào)整為262144值

值得一提的是,RAGFlow 對于硬件的要求還是挺高的,我在一臺只剩不到7個G內(nèi)存的服務器上運行ragflow,明顯能感覺到卡頓,一看內(nèi)存就剩100多M了!

知識庫

官方說 RAGFlow的知識庫提供多個分塊模板供用戶選擇,方便分塊不同布局的文件,盡可能地確保語義完整性。在分塊方法中,我們可以選擇適合文件布局和格式的默認模板。下表顯示了每個支持的塊模板的描述和兼容的文件格式.

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)


模板

文件格式

General

DOCX、EXCEL、PPT、PDF、TXT、JPEG、JPG、PNG、TIF、GIF

Q&A

EXCEL、CSV/TXT

Manual

PDF

Table

EXCEL、CSV/TXT

Paper

PDF

Book

DOCX、PDF、TXT

Laws

DOCX、PDF、TXT

Presentation

PDF、PPTX

Picture

JPEG、JPG、PNG、TIF、GIF

One

DOCX、EXCEL、PDF、TXT

我們還可以在創(chuàng)建并配置完知識庫之后,在知識庫的數(shù)據(jù)集頁面上更改特定文件的塊模板之后再執(zhí)行文檔的解析。

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

Dify接入RAGFlow

雖然dify自身的文檔解析能力相對較弱,但ragflow在這方面卻表現(xiàn)出色。那么我們是否可以利用dify去接入ragflow的知識庫呢?實際上,ragflow確實支持這種功能,并專門為dify提供了一個單獨的API,使其可以從ragflow的知識庫中進行檢索。

我們可以從源碼中找到對應的接口及代碼:

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

從這個api 可以看到,請求體的json應該長這樣:

{
	"query": "what is meme?",
	"knowledge_id": "xxxx",
	"use_kg": false,
	"retrieval_setting": {"score_threshold": 0.0, "top_k": 1024}
}

有一點很重要,那就是在調(diào)用ragflow的API之前,你需要進行身份驗證。所以,我們首先需要申請一個密鑰(key)。

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

從RAGFlow的認證代碼不難看出,我們只需要把key放在請求的header中即可。

def apikey_required(func):
    @wraps(func)
    def decorated_function(*args, **kwargs):
        token = flask_request.headers.get("Authorization").split()[1]
        objs = APIToken.query(token=token)
        if not objs:
            return build_error_result(message="API-KEY is invalid!", code=settings.RetCode.FORBIDDEN)
        kwargs["tenant_id"] = objs[0].tenant_id
        return func(*args, **kwargs)

    return decorated_function

在我們成功申請到API密鑰后,我們可以先使用curl命令來調(diào)試接口。首先,我們需要找到知識庫的ID,并將其用作??knowledge_id??。

curl --request POST \
     --url http://192.168.35.16:8080/api/v1/dify/retrieval \
     --header 'Content-Type: application/json' \
     --header 'Authorization: Bearer ragflow-dmN2M4ZTUyNDgyYTExZjA5MWZmMDI0Mm' \
     --data '
     {
          "query": "If you donot have the invitation code you can go to",
          "knowledge_id": "b4bc18a6482211f0920a0242ac1c0006",
    "use_kg": false,
    "retrieval_setting": {"score_threshold": 0.45, "top_k": 5}
     }'

得到的結(jié)果如下:

{"records":[{"content":"completetaskstoreceive theinvitation code.\nclick on the campaign button, which will take you to a screen where you must\nNote: If you don't have the invitation code you can go to http://quest.sending.me then,\nInvitation Code\nSendingMe\nSending You to the Free World\n Personal Signing\nCancel\nConfirm\nWhere can I get it?\nlog in instantly.","metadata":{},"score":0.487319856762247,"title":"Getting Started _ SendingMe User Manual.pdf"}]}

在api 驗證通過之后,我們就可以在dify外接知識庫連接到ragflow了。

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)


Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

我們需要將端點(endpoint)設(shè)置為本地IP地址,并加上??/api/v1/dify???作為后綴。然后,dify會在應用程序中自動添加??retrieval???,從而形成完整的路徑??/api/v1/dify/retrieval??:

// api/services/external_knowledge_service.py
def fetch_external_knowledge_retrieval(
        tenant_id: str,
        dataset_id: str,
        query: str,
        external_retrieval_parameters: dict,
        metadata_condition: Optional[MetadataCondition] = None,
    ) -> list:
    ...
    request_params = {
                "retrieval_setting": {
                    "top_k": external_retrieval_parameters.get("top_k"),
                    "score_threshold": score_threshold,
                },
                "query": query,
                "knowledge_id": external_knowledge_binding.external_knowledge_id,
                "metadata_condition": metadata_condition.model_dump() if metadata_condition else None,
            }

            response = ExternalDatasetService.process_external_api(
                ExternalKnowledgeApiSetting(
                    url=f"{settings.get('endpoint')}/retrieval",
                    request_method="post",
                    headers=headers,
                    params=request_params,
                ),
                None,
            )
	...

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

接著我們可以在dify測試一下從ragflow的數(shù)據(jù)召回情況:

Dify 知識庫外接 RAGFlow 喂飯教程!附避坑指南-AI.x社區(qū)

當檢索召回成功之后,說明整個流程已經(jīng)跑通了,我們就可以在問答或者工作流中使用這個外部知識庫了。

注意事項

  1. 當dify和ragflow配置在同一臺服務器,端口會有沖突,修改ragflow/docker/docker-compose.yml 中ragflow-server的端口即可
  2. dify配置的ragflow的端口地址,除了可以使用映射的80端口之外,也可以使用SVR_HTTP_PORT(默認值是9380)
  3. 上述使用的dify版本Version 1.4.1,ragflow的版本v0.19.0,其他版本沒測試過


本文轉(zhuǎn)載自??AI 博物院?? 作者:longyunfeigu

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責任
已于2025-6-18 09:49:12修改
收藏
回復
舉報
回復
相關(guān)推薦
主站蜘蛛池模板: 欧美一级二级在线观看 | 免费国产视频 | 四虎最新地址 | 日韩免费视频一区二区 | 羞羞网站免费观看 | 亚洲成年影院 | 亚洲国产精品一区二区三区 | 亚洲视频免费 | 欧美日韩淫片 | 欧美日韩电影一区二区 | 婷婷成人在线 | 欧美不卡在线 | 国产欧美精品一区二区色综合朱莉 | 美日韩精品 | 一区二区三区四区在线视频 | 亚洲福利在线观看 | aaa综合国产| 欧产日产国产精品国产 | 水蜜桃亚洲一二三四在线 | 精品一区二区三区在线观看 | 欧美精品一区二区三区在线 | 男人天堂网av | 久久高清免费视频 | 国产在视频一区二区三区吞精 | 国产欧美精品一区二区色综合 | 亚洲免费影院 | 国产欧美综合在线 | 日韩成人免费 | 亚洲成人av | 久热久草 | 国久久| 一二区成人影院电影网 | 亚洲福利| 韩国电影久久 | 国产亚韩 | a成人| 亚洲国产片 | 一区二区三区高清 | 亚洲精品99| 99精品久久 | 欧美国产亚洲一区二区 |