ragflow api reference

接入与开发

给二次开发者梳理 RAGFlow 接口的能力边界与调用要点:该调哪类接口、鉴权与超时怎么设、并发和降级怎么兜、日志与回归怎么留痕。

你已经把 RAGFlow 跑起来了,知识库也建了,现在要把问答能力接进自己的后端或前端,结果发现官方文档翻半天还是不知道从哪下手:接口分几类、Token 放哪、批量导入走哪条路、超时和并发怎么设才不炸。这篇不给万能答案,只给一份调用要点的速查清单和排查顺序,帮你在动手前把坑先圈出来。

你已经把 RAGFlow 跑起来了,知识库也建了,接下来要把问答能力接进自己的后端或前端。翻官方文档半天,最容易卡的不是「接口在哪」,而是不知道先动哪一类、Token 放哪、超时和并发怎么设才不炸。这篇给一份调用要点速查清单和排查顺序,帮你动手前先把坑圈出来。

先说清一件事:RAGFlow 这类自建检索服务的接口不是「一个万能入口」,而是按用途分成几档。你对不上档,写出来的封装函数迟早要推倒重来。判断自己该走哪条路的办法很简单——先写下业务里「谁建库、谁传文件、谁提问、谁消费结果」四个角色,再对着接口清单划勾。

先分清你要调的是哪一类接口

把接口按用途粗分三档:知识库与文档管理类负责建库、传文件、触发切片解析;会话与问答类负责建会话、发起提问、拿回带引用的回答;检索类只做召回不生成,把片段交给你自己的模型二次加工。三档的调用节奏和超时策略完全不同,混在一个客户端里会很难维护。

知识库与文档管理类
建库、上传、解析、删除;重操作,适合异步或后台任务里跑
会话与问答类
建会话、提问、取引用;面向在线请求,对延迟敏感
检索类
只召回片段,不生成答案;适合你自有模型做下游生成

判断标准:如果答案要由你自己的模型来写,就走检索类,别用问答类再套一层,否则你会拿到一段别人的措辞再让模型改写,既浪费一次生成,也丢了引用可控性。如果只要一个现成回答,走问答类更省事。

不适用情形也要说清:如果你的场景是离线批量灌文档、根本不做在线问答,那重点全在文档管理类,会话和问答类可以先不碰,别为了「接口齐全」去接一堆用不上的能力。落地动作就是给上面三档各写一个独立客户端封装,别让一个函数既传文件又发提问。

鉴权、地址与调用姿势

Token 一般放在请求头里,服务地址由你自建的部署域名拼上版本前缀。这两项永远从环境变量或配置中心读,不要写死在代码里,也不要在日志里打印出来。多人协作时,建议本地用一套自己的 Token,别共用同一个,出问题能按人排查。

  1. 先打通最小链路用一个最轻的请求,比如列一次知识库或者建一个空会话,确认鉴权和地址都对。这一步过了再往上传文件、发提问这类重操作推进。
  2. 确认请求体格式普通接口走 JSON,文件上传通常是另一套 multipart 形式。别把两种塞进同一个封装函数,参数校验会互相打架。
  3. 先关流式调试调试阶段关掉流式,拿完整响应把字段结构看清楚。确认无误再打开流式接生产,否则你连错误返回长什么样都不知道。

还有个容易被忽略的点:错误返回的结构。鉴权失败、参数缺失、知识库不存在,这几类错误的响应长什么样,最好在打通链路阶段就各造一次,把状态码和错误字段记下来,后面写统一异常处理时就不用猜。

超时、并发与降级怎么设

超时不要一套参数打天下。普通查询给短超时,超了就让上游快速失败;文件解析和批量导入给长超时,甚至直接改成异步轮询状态。把这两个档位写成两个常量,谁调哪类接口就用哪档。

场景超时策略失败后动作
普通查询、取引用短超时,快速失败提示稍后重试,不阻塞页面
在线提问中等超时,允许一次重试重试仍失败则返回降级话术
文件解析、批量导入长超时或异步轮询记录任务标识,后台补查状态
健康检查类极短超时标记服务不可用,触发告警

并发要从你自己的部署规格反推,不要照抄别人的数字。做法是先小并发压一轮,观察服务端响应时间和失败率,再一档一档往上加,直到失败率开始抬头就停。这个拐点只有你自己压得出来。

  • 可重试的失败:超时、连接断开、限流,用退避重试,重试次数设上限
  • 不可重试的失败:参数错、鉴权失败、文件格式不支持,直接把错误抛给调用方,重试只是浪费
  • 降级路径要写进代码:检索服务不可用时,是返回「暂时查不到」还是退回纯模型回答,提前定好
  • 降级触发要有开关:别写死逻辑,留个配置项方便临时关掉降级、观察真实错误

不适用情形:如果你的调用量很小、一天就几百次,严格的分档超时和退避重试可能显得过度设计,先把最基础的重试和超时加上就行,等量级上来再细化。但降级这个决定无论量大量小都得先想清楚。

日志留痕与回归验证

日志不是越多越好,而是要能回放一次调用。每次请求至少记这几个字段:请求 ID、接口类型、知识库标识、耗时、状态码、是否命中引用。有这六项,出问题时就能按请求 ID 把整条链路捞出来,而不是靠时间戳碰运气。

字段用途注意
请求 ID串联同一次调用的多个接口由调用方生成并透传
接口类型区分管理/问答/检索用枚举,别写自由文本
知识库标识定位是哪个库的问题只记 ID,不记库名原文
耗时发现慢接口和拐点按接口类型分开统计
状态码快速筛失败请求区分鉴权和参数错误
是否命中引用判断召回是否为空空召回往往不是接口故障

把一次典型调用拆成「建会话—提问—取引用—关会话」四步,每一步都单独打点。任一环节失败,你都能从日志看出是卡在会话没建上,还是提问返回了但引用为空。这两种情况的排查方向完全不同。

  1. 准备一批固定问题挑十来个覆盖不同知识点的稳定问题,答案结构相对可预期,作为回归基线。
  2. 升级后先跑回归接口或镜像升级后,先跑这批问题,比对命中片段和答案结构有没有变,别等用户来报。
  3. 比对召回而非措辞重点看召回的片段是否一致、引用是否还带得回来。生成措辞会飘,召回变化才是真信号。
  4. 记录差异再放行有差异就记下来,判断是切分策略变了还是模型变了,确认可接受再上新版本。

还有一条底线:敏感内容脱敏后再落盘。知识库里的原文不要整段写进日志,记个摘要或者片段 ID 就够了。日志系统的访问权限也要收一收,别让谁都能翻。

下一步动手前先去站内的数据页把当时的价格与模型资料核一遍,再对照工具目录挑合适的调试工具;具体数字和版本别抄别处,以页面当时为准。

常见问题

RAGFlow 的接口文档在哪看,站内有整理吗?

站内不复制官方文档内容,只在 /stacks/frameworks 这类目录页帮你定位入口。动手前建议先确认你部署的版本,不同版本接口路径和字段会有差异,以你本地实例的文档为准,别照抄网上别的版本的示例。

调 RAGFlow 接口一直超时,先查什么?

先分清是解析类接口还是问答类接口:解析大文件本来就慢,超时值要给够。再看服务端日志有没有在真正处理,还是请求根本没进来。最后才怀疑网络和反向代理,用 /tools/speed-test 先量一下到你自己部署地址的延迟基线。

想先小成本验证接口能不能用,怎么做?

搭一个最小实例,只放几份小文档,用脚本跑「建库—上传—提问」三条链路各一次,确认返回结构符合预期再扩量。别一上来就灌几百份文件,解析队列一堵你分不清是接口问题还是容量问题。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。