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 Agent调用REST API的问题。首先,用户提到了Dify和MoonShot API的应用,所以可能他们已经有了一些基础。根据用户提供的引用,特别是引用[1]和[4],我需要结合这些信息来构建回答。 首先,我应该确定Dify Agent的基本概念,确保用户了解其作为工作流编排和多Agent协作的一部分。引用[2]提到构建垂直领域知识库和多Agent协作,这可能与调用API有关联。接着,引用[4]提到使用Dify和MoonShot API创建RAG应用,所以调用REST API可能是实现这类应用的关键步骤。 接下来,我需要给出具体的步骤。可能包括创建Agent、配置API参数、编写自定义代码和处理响应。这里要参考引用[1]中的生成HttpClient代码的示例,可能需要在Dify中集成类似的代码。同时,引用[3]提到的图表选择可能涉及工作流的配置,需要指导用户如何在界面中选择和配置对应的图表。 需要确保示例代码符合Python语法,并且正确使用Dify提供的工具,比如HTTP工具。还要考虑错误处理和数据处理,比如解析JSON响应。最后,测试和部署步骤也很重要,用户可能需要知道如何触发API调用并验证结果。 在生成相关问题部分,应该涵盖认证、参数传递、错误处理、异步调用以及与其他服务集成的场景。这些问题能帮助用户进一步探索相关主题。 需要检查是否符合系统级指令,比如使用正确的中文回答,数学公式的格式(虽然这里可能用不上),以及引用标记的正确添加。确保所有引用都来自用户提供的资料,并且自然地融入回答中。</think>以下是关于在Dify Agent调用REST API的步骤说明和示例: ### 一、Dify Agent调用REST API核心步骤 1. **创建自定义Agent** 在DifyAgent编排界面,通过左侧窗格下拉菜单选择或新建Agent图表[^3],支持可视化配置API调用节点。 2. **配置API参数** ```python # 示例:使用Dify内置HTTP工具调用GET API from dify.actions import HTTPTool response = HTTPTool().get( url="https://api.example.com/data", headers={"Authorization": "Bearer {API_KEY}"}, params={"page": 1} ) ``` 3. **处理API响应** 通过JSONPath解析返回数据: ```python parsed_data = HTTPTool().parse_json(response, "$.results[*].title") ``` ### 二、完整调用示例(结合WordPress API) ```python # 在Agent自定义代码节点中实现 def fetch_wordpress_posts(): http = HTTPTool() response = http.post( url="https://your-site.com/wp-json/wp/v2/posts", headers={"Content-Type": "application/json"}, json={"per_page": 5, "status": "publish"} ) if http.check_status(response, 200): return http.parse_json(response, "$[*].content.rendered") else: raise Exception("API调用失败: " + response.text) ``` ### 三、关键配置说明 1. **认证处理** 支持Basic Auth/OAuth2/API Key等多种方式,配置位置在Agent的「连接器」模块[^1] 2. **错误重试机制** 在高级设置中可配置: ```yaml retry_policy: max_attempts: 3 delay: 500ms status_codes: [502, 503] ``` 3. **数据处理管道** 可通过组合多个API节点实现数据流转[^4],例如先获取文章列表,再调用NLP接口处理内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值