RAGFlow的API封装 客户端脚本

【RAGFlow代码详解-24】API 参考 RAGFlow API架构采用分层设计,包含认证授权、核心API和数据处理层。系统提供基于API密钥的认证机制,并划分数据集管理、文档处理、聊天会话等六大功能模块。采用标准化请求响应流程,支持OpenAI兼容接口,便于集成。Python SDK封装了底层API调用,提供面向对象接口。错误处理系统定义规范状态码,涵盖参数校验、权限控制等场景,确保一致性的错误反馈。整个架构强调模块化设计,兼顾功能完整性与开发便利性。 阅读详情
AI摘要

介绍了使用Python的requests包来构建RAG模型问答程序,涉及利用Python的相关功能以及requests包的特性,以实现RAG模型的问答功能,属于信息技术领域的应用。

使用python的requests包构建RAG模型问答程序,代码参考如下:

HTTP API | RAGFlow

markdown:

1. 找到Ragflow的知识库 ID
2. 获取或创建一个聊天助手(ChatBot)
3. 启动一次聊天 session(第一次默认问个问题)
4. 循环等待用户提问,并打印助手的回答

import requests, json, sys

API_URL       = "http://userIP:8000"
AUTHORIZATION = "ragflow-API" # 你的RagflowAPI
DATASET_NAME  = "aa"          # 你的知识库
ASSIST_NAME   = "aa-bot"      # 给聊天助手起个名(随意)

HEADERS_JSON = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {AUTHORIZATION}",
}

# ---------- 工具函数 ----------
def rq(method, url, allow_code_102=False, **kw):
    kw.setdefault("headers", HEADERS_JSON)
    r = requests.request(method, f"{API_URL}{url}", timeout=None, **kw)
    r.raise_for_status()
    j = r.json()
    code = j.get("code")
    if code == 102 and allow_code_102:
        return None
    if code != 0:
        raise RuntimeError(f"[API {code}] {j.get('message')}")
    return j.get("data")


def get_dataset_id(name):
    data = rq("GET", "/api/v1/datasets", params={"name": name})
    return data[0]["id"] if data else None

def get_or_create_chat(
    dataset_id: str,
    name: str,
    *,
    avatar: str | None = None,
    dataset_ids: list[str] | None = None,
    llm: dict | None = None,
    prompt: dict | None = None,
) -> str:
    dataset_ids = dataset_ids or [dataset_id]

    # --- Step 1. 查找是否存在 ---
    chat_data = rq("GET", "/api/v1/chats", params={"name": name}, allow_code_102=True)
    if chat_data:
        chat_id = chat_data[0]["id"]

        # --- Step 2. 比较配置差异 ---
        patch_payload = {}
        def _set(k, new, old):
            if new is not None and new != old:
                patch_payload[k] = new

        _set("avatar", avatar, chat_data[0].get("avatar"))
        _set("dataset_ids", dataset_ids, chat_data[0].get("dataset_ids", []))
        _set("llm", llm, chat_data[0].get("llm"))
        _set("prompt", prompt, chat_data[0].get("prompt"))

        if patch_payload:
            try:
                rq("PATCH", f"/api/v1/chats/{chat_id}", json=patch_payload)
            except RuntimeError as e:
                if "Method Not Allowed" in str(e) or "code 100" in str(e):
                    rq("PUT", f"/api/v1/chats/{chat_id}", json=patch_payload)
                else:
                    raise
        return chat_id

    # --- Step 3. 不存在则创建 ---
    payload = {
        "name": name,
        "avatar": avatar or "",
        "dataset_ids": dataset_ids,
        "llm": llm,
        "prompt": prompt,
    }
    return rq("POST", "/api/v1/chats", json=payload)["id"]




def stream_chat(chat_id, question, session_id=None):
    payload = {"question": question, "stream": True}
    if session_id:
        payload["session_id"] = session_id

    with requests.post(
        f"{API_URL}/api/v1/chats/{chat_id}/completions",
        headers=HEADERS_JSON,
        json=payload,
        stream=True,
    ) as r:
        r.raise_for_status()

        printed_len = 0          # ← 新增:已打印的字符数
        new_session = session_id

        for raw in r.iter_lines(decode_unicode=True):
            if not raw or raw.startswith(":"):
                continue
            json_part = raw[raw.find("{"):]
            try:
                chunk = json.loads(json_part)
            except json.JSONDecodeError:
                continue

            if chunk.get("code") != 0:
                raise RuntimeError(chunk)

            data = chunk["data"]
            if data is True:          # 结束标志
                print()
                return new_session

            if isinstance(data, dict):
                ans = data.get("answer", "")
                # ---------- 只打印新增部分 ----------
                delta = ans[printed_len:]
                if delta:
                    print(delta, end="", flush=True)
                    printed_len = len(ans)
                # -----------------------------------
                new_session = data.get("session_id", new_session)

# ---------- 主程序 ----------
def main():
    ds_id = get_dataset_id(DATASET_NAME)
    if not ds_id:
        print(f"❌ 找不到知识库『{DATASET_NAME}』"); return
    chat_id = get_or_create_chat(ds_id, ASSIST_NAME)

    session = None
    q = "start ragflow!"
    session = stream_chat(chat_id, q, session)
    while True:
        q = input("请输入您的问题(exit 退出):").strip()
        if q.lower() == "exit":
            break
        try:
            session = stream_chat(chat_id, q, session)
        except Exception as e:
            print("\n[错误]", e)

if __name__ == "__main__":
    main()

注:假设已经在Ragflow构建有数据库,名字例如代码第五行“aa”

如何使用RAGFlOW知识库模型,调用RAGFlOW接口 使用RAGFlOW知识库模型,调用RAGFlOW接口,通过调用RAGFlOW的API,进行调用 阅读详情

相关推荐

RAGFlow API 文档

如果 x 表示向量余弦相似度的权重,那么 (1 - x) 是术语相似度的权重。"entity_types":默认为 ["organization","person","location","event","time"]。"entity_types":默认为 ["organization","person","location","event","time"]。要删除的文档的 ID 列表。要使用的嵌入模型的名称。: 模型输出的最大长度,以token数衡量,默认512,若禁用则模型自行决定响应的token数。

xuukai的博客 4209

如何调用 RAGflow 的 API 接口?

通过以上接口,第三方脚本可以完成向 RAGflow 知识库提供内容并进行 RAG 处理的整个流程。:在完成文档解析后,如果需要从知识库中检索特定内容,可以使用此接口。它会根据用户的问题或关键词,在知识库中查找相关的文档片段(chunks)。:对上传的文档进行解析,将其内容转换为适合 RAG 处理的格式。这个过程会根据文档的类型和内容进行相应的处理,如文本提取、分词等。:在创建会话后,可以使用此接口向聊天助手提问,开启基于知识库的 AI 对话。:在向知识库提供内容之前,需要先创建一个数据集(知识库)。

xuukai的博客 1万+

RAGFlow API 实战指南:从数据集管理到智能对话

本文提供了RAGFlow API的实战指南,详细介绍了如何从零开始构建基于检索增强生成(RAG)的智能应用。内容涵盖环境准备、API密钥获取、核心概念理解,以及通过API进行数据集创建与管理、文档上传解析、知识块管理、检索测试,最终创建并配置智能聊天助手,实现基于私有知识库的精准对话。

weixin_29284885的博客 379

TensorFlow相关组件的安装

TensorFlow相关组件的安装

AAI666666的博客 3935

Python开发者必看:RAGFlow SDK实战指南(附完整代码示例)

本文为Python开发者提供了RAGFlow SDK的实战指南,详细介绍了如何通过SDK高效集成检索增强生成能力。内容涵盖环境配置、身份验证、知识库管理、文档上传处理以及构建智能问答系统,并附有完整代码示例,帮助开发者快速上手并构建可落地的AI应用。

silver的专栏 1001

RAGFlow 权限管理避坑指南:从 API 密钥到资源访问控制的完整配置流程

本文详细解析了RAGFlow权限管理的完整配置流程,重点阐述了如何通过API密钥实现安全认证,并构建精细化的资源级访问控制体系。文章提供了从密钥管理、权限模型设计到常见错误排查的实战指南,帮助企业基于最小权限原则,安全高效地部署企业级AI应用。

swift5iosmith的博客 257

RAGFlow API 实战:如何用 Python SDK 快速集成 OpenAI 兼容接口(附错误处理技巧)

本文详细介绍了如何使用RAGFlow Python SDK快速集成其OpenAI兼容接口,并构建一个简单的问答机器人。文章重点拆解了从环境准备、SDK安装到代码迁移的完整流程,并提供了针对401、403等常见API错误的实用处理技巧,帮助开发者高效、稳健地完成集成工作。

l3m4n的博客 949

RAGFlow实战:从部署到知识库问答的完整指南

检索增强生成(RAG)是解决大模型私有数据问答、减少幻觉的关键技术,其核心原理是将文档切块、向量化后与用户查询匹配,再交由大模型生成回答。然而,实际落地常受制于文档解析质量、分块策略和检索效果。RAGFlow作为基于深度文档理解的开源RAG引擎,通过DeepDoc版面分析、模板化分块、混合检索与重排,构建了从文档解析到知识库问答的完整链路。本文面向企业知识库问答场景,介绍RAGFlow的架构特性,并演示Docker部署、知识库搭建、模型配置、API集成以及常见问题排查,帮助开发者在本地快速搭建可用的知识库问

weixin_33861800的博客 435

告别耦合!用FastAPI为MinerU 2.0封装轻量Web API,无缝集成你的RAGFlow项目

本文详细介绍了如何利用FastAPI为MinerU 2.0构建轻量级Web API,实现与RAGFlow项目的无缝集成。通过微服务化架构设计、多模式引擎智能路由和生产级容器化方案,显著提升文档处理系统的性能和可维护性,特别适用于需要处理复杂文档场景的企业应用。

weixin_29279153的博客 244

RagFlow-v0.18.0 MCP Server 实战:从配置到检索的完整客户端集成指南

本文详细介绍了RagFlow-v0.18.0 MCP Server的配置与客户端集成实战,涵盖从API-KEY获取、服务启动到高级检索功能的完整流程。通过解析客户端代码和关键参数配置,帮助开发者快速掌握MCP Server的集成技巧,提升检索效率与安全性。

weixin_30505225的博客 115

RAGFlow端口修改实战:从80到8082的完整配置与排错指南

在Web应用部署中,端口配置是服务网络通信的基础环节,它决定了应用如何被外部访问。其原理是通过操作系统内核将特定端口的网络请求路由到对应的应用进程。正确的端口配置对于服务可达性、多应用共存及生产环境规范化至关重要,直接影响开发调试、CI/CD流水线及微服务架构下的服务发现。无论是开发环境还是生产部署,端口冲突与配置错误都是常见痛点。本文聚焦于RAGFlow这一AI应用框架,针对其默认80端口被占用的典型场景,深入解析如何将其服务端口修改为8082。内容涵盖Docker Compose与源码两种主流部署方式下

weixin_33981932的博客 471

RAGFlow MCP客户端:协议实现与工具发现的机制解析

MCP(Multi-Component Protocol)是RAGFlow实现跨服务通信与工具调用的核心机制,其客户端模块通过标准化协议实现与服务端的高效交互。本文将从协议实现原理、工具发现流程和核心源码解析三个维度,详解MCP客户端的工作机制。 ## 协议实现:双向流通信架构 MCP客户端采用**双向流式通信**设计,通过SSE(Server-Sent Events)协议建立持久连接。核心实...

gitblog_00457的博客 757

RagFlow-v0.18.0 MCP Server 实战:从配置到检索的完整指南

本文详细介绍了RagFlow-v0.18.0 MCP Server的完整使用指南,从API-KEY获取、服务器启动到客户端配置和检索验证。通过实战步骤帮助开发者快速掌握MCP Server的核心功能,包括常见问题排查和进阶使用技巧,提升知识库检索效率。

weixin_29263201的博客 420

第8章:RAGFlow HTTP API 与 SDK 入门集成

本章介绍RAGFlow的HTTP API与Python SDK集成。系统并存Legacy /v1/与RESTful /api/v1/,推荐后者;鉴权包括Session、JWT和长期API Token,后端服务宜用API Token。API统一返回{code,data,message},支持分页与错误码。核心能力覆盖数据集、文档、切片、聊天问答、检索和模型管理。实战用SDK完成初始化、创建数据集、上传文档、轮询解析、发起问答与多轮会话,并封装超时、连接失败和5xx重试。

davidwang456的专栏 343

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型(附常见问题解决)

本文详细介绍了如何在本地快速部署阿里达摩院开源的Paraformer语音识别模型。通过FunASR工具包,用户可在5分钟内完成环境配置、模型下载与基础识别,并掌握批量处理、性能调优及构建API服务等进阶技巧。文章重点解析了Paraformer的非自回归架构带来的速度优势,并提供了音频格式转换、依赖冲突、显存不足等常见问题的实战解决方案,助力开发者实现高效、离线的语音转写应用。

p1q2r的博客 705

RAGflow Agent API调用实战:从获取session_id到流式响应解析

本文详细介绍了如何通过Python代码实现与RAGflow Agent API的高效交互,从获取session_id到处理流式响应的完整实战方案。文章涵盖了环境配置、会话管理、流式请求处理及高级应用技巧,帮助开发者快速掌握RAGflow Agent API的核心功能,适用于复杂查询和生成任务的业务场景。

jjj34的博客 560

机器学习实战1-四种算法对比对客户信用卡还款情况进行预测与模型评估

大家好,我是微学AI,今天给大家带来一个机器学习实战案例:利用机器学习的四种算法对比对客户信用卡还款情况进行分类。信用卡又叫贷记卡,是由商业银行或信用卡公司对信用合格的消费者发行的信用证明。现在的年轻人,特别是80后,90后甚至00后到喜欢超前消费,每个人名下多多少少都有至少一张信用卡,有些人由于过度超前消费,导致下个月无法还款导致的逾期,这样会对个人征信产生影响,今天我们就来分析分析具有哪些特性的人会有信用卡逾期的可能。

微学AI的博客 4710

RAGFlow/RAG 从文档解析到混合检索的完整链路

采用ragflow v0.25.6从github上拉取源码,然后拉取镜像,用docker compose启动注意,默认启动后会自动拉取tiktoken,但内网环境无法联网,可以从外网下载,然后拷贝到内网,同时tiktoken文件挂载到容器时,直接放在ragflow根目录下即可。

dyw_mail的博客 523

生物分子仿真软件:AMBER_(17).AMBER在核酸研究中的应用

在使用AMBER进行核酸分子动力学模拟之前,需要对核酸系统进行详细的准备。这包括构建初始结构、添加溶剂分子、中和电荷等步骤。以下将详细介绍这些步骤。

kkchenjj的博客 505

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 792

RagFlow知识库构建与本地检索方法

本文介绍了RAGFlow知识库构建与检索的完整流程。

weixin_48389642的博客 2560

11、基于拓扑质心和树编辑距离的RNA二级结构比较方法

本文介绍了一种基于拓扑质心和树编辑距离的RNA二级结构比较方法,特别适用于处理具有假结结构的RNA。通过PEELING算法识别拓扑质心并将其转换为树结构,结合树编辑距离进行高效比较,并提供工具planeGraph2tree实现该方法。博文详细描述了方法原理、操作流程以及应用示例,展示了其在功能性非编码RNA分析中的实用性。

resnet7explorer的博客 111

02_RAGFlow代码使用

RAGFlow 核心实战摘要 RAGFlow 是字节跳动的开源 RAG 框架,提供文档解析、知识库管理、语义检索和聊天助手等功能。本地部署需配置环境变量(API_URL 和 API_KEY)并安装依赖包。核心功能包括: 知识库管理:通过 create_dataset 创建知识库,获取唯一 ID 用于后续操作 文档上传:支持批量上传 PDF/Word 等格式文件到指定知识库,自动解析切分 检索增强:基于语义匹配精准定位文档片段 大模型集成:支持自定义 LLM 生成带引用来源的答案 实战中可通过 LangCha

qq_63945427的博客 399

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件详述(ArkSIM集成开发环境 (IDE))

922
上一篇: cv图片局部放大
lightingMaster
博客等级 码龄5年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值