5 篇文章带有标签 “RAGFlow”

开发 RAGFlow MCP Server

这是第一次开发 MCP Server,想着使用智能编码工具(GitHub Copilot、Cursor、Trae)进行氛围编程,发现真不容易,Claude 3.7 sonnet 效果不错,在 GitHub Copilot 没用多长时间超限制了;Cursor 没有达到之前那种随心的效果;Trae 要排长队,太有挫败感了。于是,开始了以人编码为主,大模型辅助的开发过程。

  1. 初始化:加载环境变量,初始化 RAGFlow 客户端。
  2. 工具注册:定义工具列表,描述工具的输入/输出。
  3. 工具逻辑:实现工具的具体调用逻辑。
  4. 服务器启动:通过 stdio 启动 MCP Server 并监听请求。
uvx create-mcp-server \
    --path ragflow-mcp-server \
    --name ragflow-mcp-server \
    --version 0.1.0 \
    --description "RAGFlow MCP Server" \
    --no-claudeapp
cd ragflow-mcp-server
uv sync --dev --all-extras
uv add ragflow-sdk

RAGFlowAssistant

uv init RAGFlowAssistant
cd RAGFlowAssistant
uv add ragflow-sdk
sh run.sh

from ragflow_sdk import RAGFlow

# 初始化 RAGFlow 客户端
def init_ragflow():
    """初始化 RAGFlow 客户端
    返回: RAGFlow对象 或 None(如果没有API Key)
    """
    api_key = os.environ.get("RAGFLOW_API_KEY") or st.session_state.get("ragflow_api_key", "")
    base_url = os.environ.get("RAGFLOW_BASE_URL") or st.session_state.get("ragflow_base_url", "http://localhost:9380")
    
    if api_key:
        return RAGFlow(api_key=api_key, base_url=base_url)
    return None

# 获取知识库列表
// ...

RAG 复杂场景下的工作流程和构建知识库的解析方法

召回模式(选择数据集) → 混合检索(同时进行语义检索和关键词搜索) → 重排序(合并和归一化检索结果)

  • 召回模式主要是用于选出与用户问题最相关的数据集,在应用内关联了多个数据集时,可以使用N选1、N选M和多路等召回模式。
    • N 选 1 召回
    • N 选 M 召回
    • 多路召回
  • 语义检索是当前主流的向量检索,通过语义相关度进行匹配;关键词搜索是传统的搜索算法,用于精确匹配;混合检索是分别通过两种检索方式在文档中检索出最相关的文本。
  • 重排序模型(Rerank Model)用于对查询结果进行语义排序,在混合检索模式下的查询结果需要进行合并和归一化(将数据转换为统一的标准范围或分布,以便更好地进行比较、分析和处理),然后再一起提供给大模型。

RAGFlow 是一款基于深度文档理解构建的开源 RAG 引擎,内置了丰富地文档解析方法,可以帮助用户快速构建知识库。

基于 Tokens 数进行分割 问答对(两列数据,一个提出问题,另一个用于答案) 简历(不进行拆分,而是将简历解析为结构化数据) 手册(使用最低的部分标题作为对文档进行切片的枢轴,同一部分中的图和表不会被分割,块大小可能会很大) 表格(表数据,第一行必须是列标题,列标题必须是有意义的术语,以便我们的大语言模型能够理解) 论文(按章节进行拆分,例如摘要、1.1、1.