Link

Dify 与 Ragflow 对接的三种方式

目录

  1. Dify 与 Ragflow 对接的三种方式
    1. 概述
    2. Ragflow 外部知识库对接
    3. HTTP 调用 chats API
    4. HTTP 调用 retrieval API

概述

经过测试,Dify 有三种和 Ragflow 对接的方法:

  • 原生对接:在 Ragflow 0.13 之后,Ragflow 可以以外部知识库的形式添加到 Dify,Dify 在流程中即可知己查询知识库,推荐使用此方式
  • 调用 chats API
  • 调用 retrieval API

Ragflow 外部知识库对接

Ragflow 从0.13.0版本开始提供 Dify 对接 API,通过此 API 可以实现 Dify 使用 Ragflow 作为外部知识库。

具体配置如下:

在知识库页面右上角,点击“外部知识库 API”:

image-20241212143349570

设置名称、API Endpoint 以及 API Key:

API Endpoint 格式是:[httphttps]://[ragflow-ipragflow-domain]/api/v1/dify

image-20241212143325671

添加完成后,再点击支持库的“连接外部知识库”。

image-20241212143246139

填写知识库的 ID(ID 可以通过 GET http://ragflow-ip/api/v1/datasets?name=wiki 获得,此处 Ragflow 上的知识库名称为 wiki)

image-20241212143634311

设置完成后,在工作流就可以调用 Ragflow 的知识库进行测试了:

image-20241212144305826

测试时发现,在工作流中调用知识库检索时,最好一次只选择一个知识库,否则可能查询结果为空。

HTTP 调用 chats API

参考文档:https://ragflow.io/docs/dev/http_api_reference#converse-with-chat-assistant

原理:通过 HTTP 组件调用 Ragflow chats API,将用户请求发送给 Ragflow 进行处理,Ragflow 将最终结果返回 Dify 进行展示。

优点: 知识库查询效果基本等同于原生 Ragflow

缺点:运行比较慢,不支持数据来源展示

请求 URL:

http://ragflow.test.com/api/v1/chats/bad63418b62611ef851c0242ac120006/completions

请求方法:POST

请求 Body:

{ 
"question": "",
"session_id": "1956084d4c894d1a92d83ee6063ceb26",
"stream": false
}

参数说明:

  • 请求 URL 中的 ID:Chat ID,可以在 Ragflow UI 中直接获取
  • question:发给 Ragflow Chat 的查询内容
  • session_id:会话 ID,如果不填,则每次 HTTP 调用都会在 Ragflow 中创建一个新的会话,建议使用固定的 session_id。此 ID 需要通过 API 获取(GET /api/v1/chats/{chat_id}/sessions?name={session_name}
  • stream false:禁用流式传输功能

Dify 侧示例:

image-20241225160157172

此处测试时发现不能将 Ragflow 返回的内容直接输出,编码会变成三位数的字符 Code,所以此处配置了大模型二次输出。

image-20241225161519015

HTTP 调用 retrieval API

参考文档:https://ragflow.io/docs/dev/http_api_reference#retrieve-chunks

原理:通过 HTTP 组件调用 Ragflow retrieval API,让 Ragflow 召回 chunk,Dify 侧将 chunk 丢给大模型汇总后回答问题。

优点: 速度相对前者比较快

缺点:Chunk 比较大时流程容易失败,需要人工进行限制

请求 URL:

http://ragflow.test.com/api/v1/retrieval

请求方法:POST

请求 Body:

{ 
"question": "",
"dataset_ids": ["e92c886ab55411efacbb0242ac120006"],
"limit": "10",
"similarity_threshold": "0.5"
}

参数说明:

  • question:发给 Ragflow Chat 的查询内容
  • dataset_ids:文档库的 ID,可以通过 API 获取(GET /api/v1/datasets?name={dataset_name}
  • Limit:限制召回的 chunk 数量
  • similarity_threshold:设置匹配相似度

Dify 侧示例:

image-20241225161753604

image-20241225161802829