Skip to content

Categorize 组件

概述

Categorize组件是RAGFlow 逻辑控制组件,文本分类路由组件,根据内容分类自动路由到不同处理分支。

主要功能

  • 🏷️ 多分类文本分析和智能路由
  • 📊 支持多种配置选项和参数调节
  • 🔧 与其他组件无缝集成
  • ⚡ 高性能处理和错误恢复

适用场景

  • 客服系统的问题分类
  • 文档自动归档
  • 意图识别和路由
  • 多场景处理分发

参数配置

基础参数

参数名类型必填默认值说明
categoriesobject{}分类类别配置
confidence_thresholdnumber0.7置信度阈值
llm_idstring用于分类的LLM模型
category_mappingobject{}分类到组件的映射

详细说明

主要参数说明

categories
  • 类型: object
  • 描述: 分类类别配置
  • 默认值: {}
  • 是否必填: 是
confidence_threshold
  • 类型: number
  • 描述: 置信度阈值
  • 默认值: 0.7
  • 是否必填: 否
llm_id
  • 类型: string
  • 描述: 用于分类的LLM模型
  • 默认值:
  • 是否必填: 是
category_mapping
  • 类型: object
  • 描述: 分类到组件的映射
  • 默认值: {}
  • 是否必填: 是

输入输出

输入格式

Categorize组件接受上游组件的标准输出:

json
{
  "content": "输入内容",
  "component_id": "upstream_component_id",
  "reference": []
}

输出格式

json
{
  "content": "处理后的输出内容",
  "component_id": "categorize_component_id",
  "metadata": {
    "processing_time": 0.123,
    "success": true
  },
  "reference": []
}

使用示例

示例1: 基础配置

json
{
  "component_name": "Categorize",
  "params": {
    "categories": {}
  }
}

示例2: 高级配置

json
{
  "component_name": "Categorize",
  "params": {
    "categories": {},
    "confidence_threshold": 0.7,
    "llm_id": "",
    "category_mapping": {}
  }
}

前端实现

节点组件

typescript
// web/src/pages/flow/canvas/node/categorize-node.tsx
export function CategorizeNode({ id, data, isConnectable, selected }: NodeProps) {
  return (
    <section className={`${styles.ragNode} ${selected ? styles.selectedNode : ''}`}>
      <Handle type="target" position={Position.Left} isConnectable={isConnectable} />
      <Handle type="source" position={Position.Right} isConnectable={isConnectable} />
      
      <NodeHeader id={id} name={data.name} label={data.label} />
      
      <div className={styles.nodeBody}>
        <div className={styles.nodeInfo}>
          <span className={styles.nodeDescription}>文本分类路由组件,根据内容分类自动路由到不同处理分支</span>
        </div>
      </div>
    </section>
  );
}

配置表单

typescript
// web/src/pages/flow/form/categorize-form/index.tsx
const CategorizeForm: React.FC<IOperatorForm> = ({ onValuesChange, form }) => {
  return (
    <Form form={form} layout="vertical" onValuesChange={onValuesChange}>

      <Form.Item
        name="confidence_threshold"
        label="置信度阈值"
      >
        <InputNumber style={{ width: '100%' }} placeholder="0.7" />
      </Form.Item>

      <Form.Item
        name="llm_id"
        label="用于分类的LLM模型"
        rules={[{ required: true, message: '请输入用于分类的LLM模型' }]}
      >
        <Input placeholder="请输入用于分类的LLM模型" />
      </Form.Item>

    </Form>
  );
};

后端实现

参数类

python
# agent/component/categorize.py
class CategorizeParam(ComponentParamBase):
    """
    Categorize组件参数
    """
    
    def __init__(self):
        super().__init__()
        self.categories = {}  # 分类类别配置
        self.confidence_threshold = 0.7  # 置信度阈值
        self.llm_id = ""  # 用于分类的LLM模型
        self.category_mapping = {}  # 分类到组件的映射
        
    def check(self):
        """参数验证"""
        # 验证必填参数
        self.check_empty(["categories", "llm_id", "category_mapping"], "必填参数不能为空")

class Categorize(ComponentBase):
    """
    Categorize组件实现
    """
    
    component_name = "Categorize"
    
    def _run(self, history, **kwargs):
        """
        执行Categorize组件逻辑
        """
        # 获取输入
        input_df = self.get_input()
        
        if input_df.empty:
            raise ValueError("Categorize组件需要输入数据")
        
        input_content = input_df.iloc[0]["content"]
        
        # 执行核心处理逻辑
        result = self._process_content(input_content)
        
        # 返回结果
        return pd.DataFrame([{
            "content": result,
            "component_id": self._id,
            "metadata": {
                "processing_time": time.time() - start_time,
                "success": True
            },
            "reference": input_df.iloc[0].get("reference", [])
        }])
    
    def _process_content(self, content):
        """
        处理内容的核心逻辑
        """
        # TODO: 实现具体的处理逻辑
        return f"已处理: {content}"

最佳实践

1. 参数配置建议

  • 根据具体使用场景调整参数
  • 注意参数之间的依赖关系
  • 合理设置超时和重试机制

2. 错误处理

python
def robust_processing(self, content):
    """
    带错误处理的处理方法
    """
    try:
        return self._process_content(content)
    except Exception as e:
        logger.error(f"Categorize组件处理失败: {str(e)}")
        return f"处理失败: {str(e)}"

3. 性能优化

  • 合理使用缓存机制
  • 优化处理算法
  • 控制资源使用

常见问题

Q1: 组件配置后不生效怎么办?

A: 检查参数格式和必填项是否正确配置。

Q2: 处理大量数据时性能较慢?

A: 可以调整批处理大小或使用异步处理。

Q3: 如何调试组件执行过程?

A: 使用调试模式和日志功能查看详细执行信息。

相关组件

推荐搭配组件

  • Begin: 工作流入口
  • Answer: 最终输出
  • 其他相关的处理组件

典型工作流模式

Begin → Categorize → Answer
其他组件 → Categorize → 下游组件

组件版本: v1.0.0
最后更新: 2025-07-12