dify对接RAGflow Agent

一、概述

在前面几篇文章,介绍了RAGflow Agent,实现了text-to-sql功能,以及RAGflow Agent api接口调用。

文章链接如下:

https://www.cnblogs.com/xiao987334176/p/18816166

https://www.cnblogs.com/xiao987334176/p/18816547

二、dify对接

dify对接很简单,直接调用RAGflow Agent api接口,就可以了。

新建工作流

新建一个工作流,选择chatflow

 修改流程,效果如下:

 重点看代码执行

 完整代码如下:

import requests
import json

API_HOST = "http://10.44.32.14:8081"
API_KEY = "ragflow-U2N***"
AGENT_ID = "002b4af814f411f0a9a80242c0a83006"
question = ""

# 请求url
url = API_HOST + "/api/v1/agents/" + AGENT_ID + "/completions"
# print(url)

# 自定义请求头
headers = {
    "Authorization": "Bearer %s" % API_KEY,
    "Content-Type": "application/json",
}


class AgentStreamResponse:
    def __init__(self, arg1):
        self.arg1 = arg1

    def get_session_id(self):
        """
        获取会话 ID
        """
        data = {"id": AGENT_ID}
        response = requests.post(url, data=data, headers=headers)
        try:
            line_list = []
            with requests.post(
                url, json=data, headers=headers, stream=True, timeout=30
            ) as response:
                if response.status_code == 200:
                    for line in response.iter_lines():
                        if line:  # 过滤掉空行
                            # print(line.decode("utf-8"))
                            line_list.append(line.decode("utf-8"))
                else:
                    print(f"请求失败,状态码: {response.status_code}")
                    return False

            # print("line_list",line_list)

            first_line = line_list[0]
            # 提取data内容
            line_row = first_line.split("data:")[1]
            # json解析
            line_dict = json.loads(line_row)
            # 获取session_id
            session_id = line_dict["data"]["session_id"]
            return session_id
        except requests.exceptions.RequestException as e:
            print(f"请求错误: {e}")
            return False

    def get_stream_data(self):
        """
        获取流式数据
        """
        try:
            session_id = self.get_session_id()
            data = {
                "id": AGENT_ID,
                "question": self.arg1,
                "stream": "true",
                "session_id": session_id,
            }
            with requests.post(
                url, json=data, headers=headers, stream=True, timeout=30
            ) as response:
                if response.status_code == 200:
                    list_data = []
                    for line in response.iter_lines():
                        if line:  # 过滤掉空行
                            print(line.decode("utf-8"))
                            list_data.append(line.decode("utf-8"))
                    last_data = list_data[-2]
                    # 提取data内容
                    line_row = last_data.split("data:")[1]
                    # json解析
                    line_dict = json.loads(line_row)
                    # 获取session_id
                    answer = line_dict["data"]["answer"]
                    return answer
                    # return list_data[-2]
                else:
                    print(f"请求失败,状态码: {response.status_code}")
                    return False
        except requests.exceptions.RequestException as e:
            print(f"请求错误: {e}")
            return False


def main(arg1: str) -> dict:
    agent_stream_response = AgentStreamResponse(arg1)
    result = agent_stream_response.get_stream_data()
    return {
        "result": result,
    }

注意修改变量:API_HOST ,API_KEY,AGENT_ID

发布应用,效果如下:

执行代码,会出现超时:Run failed: error: timeout

解决方法,请参考链接:https://www.cnblogs.com/xiao987334176/p/18816719

<think>嗯,用户问的是Dify如何对接RAGFlow知识库。首先,我需要确认这两个工具的具体功能和接口。Dify是一个AI应用开发平台,支持快速构建基于大语言模型的应用,而RAGFlow则是专注于RAG(检索增强生成)的知识库管理系统。对接的关键在于数据流的整合和API的调用。 首先,我应该检查两者的文档,看看是否有现成的集成方案。比如,Dify是否支持直接连接RAGFlow作为知识库来源,或者是否需要通过API进行数据同步。可能需要用户将RAGFlow中的知识库导出为特定格式,再导入到Dify中,或者实时调用RAGFlow的API进行检索。 然后,权限和认证方面,可能需要配置API密钥或OAuth,确保Dify有权访问RAGFlow的数据。另外,数据格式的兼容性也很重要,比如文本的分块方式、元数据字段是否匹配,避免在检索时出现错误。 还有,处理流程方面,当用户在Dify中发起查询时,Dify可能需要将查询发送到RAGFlow进行检索,获取相关文档片段,再结合这些片段生成回答。这里需要确保两个系统之间的通信延迟较低,以提供良好的用户体验。 可能遇到的挑战包括API的稳定性、数据更新的同步机制,以及如何处理大型知识库的性能问题。需要建议用户分步测试,先小规模验证流程,再逐步扩大数据量。同时,关注两者的更新日志,以便及时调整集成方式。 最后,总结对接步骤:1)配置RAGFlow的API访问权限;2)在Dify中设置外部知识库连接,填入RAGFlow的API端点及认证信息;3)测试数据检索和生成流程,调整参数优化结果;4)部署并监控集成后的系统,确保稳定运行。</think>DifyRAGFlow 对接实现 RAG 知识库的整合可分为以下步骤: ### 一、系统定位 1. **Dify**:低代码 LLM 应用开发平台 - 支持可视化编排 AI 工作流 - 提供 RAG 能力集成接口 - 典型场景:智能客服、文档问答 2. **RAGFlow**:开源 RAG 引擎 - 支持多格式文档解析 - 提供语义分块与向量检索 - 特色功能:多路召回策略 ### 二、对接流程 #### 步骤 1:数据准备层 $$ \text{RAGFlow} \xrightarrow{\text{文档解析}} \text{向量库} \xrightarrow{\text{API封装}} \text{服务端点} $$ - 在 RAGFlow 完成: 1. 上传 PDF/Word/Markdown 等文档 2. 配置 chunk_size=512, overlap=64 等参数 3. 生成带元数据的向量索引 #### 步骤 2:接口对接 ```python # Dify 调用示例 response = requests.post( url="https://ragflow-api/retrieve", headers={"Authorization": "Bearer <API_KEY>"}, json={ "query": "用户问题", "top_k": 5 } ) ``` 需配置: - RAGFlow API 端点 - 认证密钥 - 超时参数(建议 timeout=10s) #### 步骤 3:Dify 工作流配置 1. 创建「知识库检索」节点 2. 绑定 RAGFlow 接口地址 3. 设置结果映射规则: ```json { "context": "{{response.results}}", "score_threshold": 0.75 } ``` ### 三、优化要点 1. **混合检索策略**: - 向量检索 + 关键词检索 - 权重分配公式: $$ score = \alpha \cdot sim_{cos} + (1-\alpha) \cdot tfidf $$ 2. **缓存机制**: - 对高频查询做结果缓存 - 设置 TTL=3600s 3. **监控指标**: | 指标 | 预警阈值 | |---|---| | 响应延迟 | >2000ms | | 召回率 | <60% | | 错误率 | >5% | ### 四、典型问题处理 1. **编码问题**: - 统一使用 UTF-8 编码 - 特殊字符转义处理 2. **版本兼容**: - 确认 API 版本对应关系 - 建议 RAGFlow >= 0.3.2 3. **性能调优**: - 批量请求时启用流式响应 - 调整分块策略提升召回率 当前对接方案已在金融文档问答场景验证,实现 QPS 50+ 的稳定服务能力。建议初次对接时通过 Postman 先进行接口调试,再接入完整工作流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值