feishu-assessment-integration-summary.md 5.5 KB

飞书机器人与人才测评集成 - 设计摘要

文档版本: v1.0
创建日期: 2026-03-17
完整文档: feishu-assessment-integration-design.md


一、核心问题

1. 飞书机器人当前对接哪个知识库?

答案:当前使用默认知识库(用户的所有文件)

原因:在 feishu.service.ts 中调用 chatService.streamChat() 时,selectedFilesselectedGroups 参数均为 undefined,导致搜索用户所有文件。

2. 如何与人才测评对接?

答案:通过自然语言命令触发测评功能

命令格式

  • /assessment start [kbId|templateId] - 开始测评
  • /assessment answer [answer] - 提交答案
  • /assessment status - 查看状态
  • /assessment result - 获取结果

二、设计方案

方案 1:知识库选择机制

数据库变更

FeishuBot 实体中新增字段:

knowledgeBaseId: string;      // 特定知识库ID
knowledgeGroupId: string;     // 知识组ID

选择逻辑

  1. 配置了 knowledgeBaseId → 搜索该知识库的文件
  2. 配置了 knowledgeGroupId → 搜索该知识组的文件
  3. 都未配置 → 搜索用户所有文件(默认行为)

方案 2:测评集成

架构设计

用户消息 → 命令解析器 → 测评服务 → 人才测评模块
                    ↓
                聊天服务(非测评消息)

核心组件

  1. AssessmentCommandParser - 命令解析器
  2. FeishuAssessmentService - 测评服务
  3. FeishuAssessmentSession - 会话实体

交互流程

1. 用户: /assessment start
2. 系统: 创建测评会话,发送第一个问题卡片
3. 用户: 回复答案
4. 系统: 评估答案,发送下一个问题
5. ... 循环直到测评完成
6. 系统: 发送测评结果报告

三、实施步骤

阶段 1:基础架构(1-2 天)

  • 添加数据库字段和迁移脚本
  • 更新 FeishuBot 实体和 DTO
  • 修改 FeishuService 支持知识库选择

阶段 2:测评集成(2-3 天)

  • 创建测评会话实体和迁移
  • 实现命令解析器
  • 实现测评服务
  • 设计飞书卡片模板

阶段 3:测试优化(1-2 天)

  • 单元测试和集成测试
  • 性能测试
  • 文档编写

四、关键代码示例

4.1 知识库选择逻辑

// feishu.service.ts
async processChatMessage(bot: FeishuBot, ...) {
    let selectedFiles: string[] | undefined;
    let selectedGroups: string[] | undefined;
    
    if (bot.knowledgeBaseId) {
        selectedFiles = await this.getFilesByKnowledgeBase(bot.knowledgeBaseId, ...);
    } else if (bot.knowledgeGroupId) {
        selectedGroups = [bot.knowledgeGroupId];
    }
    
    const stream = this.chatService.streamChat(
        userMessage,
        [],
        userId,
        llmModel,
        language,
        undefined,
        selectedGroups,  // 使用配置的知识组
        selectedFiles,   // 使用配置的知识库文件
        // ...
    );
}

4.2 命令处理逻辑

// feishu-assessment.service.ts
async handleCommand(bot: FeishuBot, openId: string, message: string) {
    const command = this.commandParser.parse(message);
    
    if (!command) {
        // 非测评命令,使用默认聊天
        await this.feishuService.processChatMessage(bot, openId, '', message);
        return;
    }
    
    switch (command.type) {
        case AssessmentCommandType.START:
            await this.startAssessment(bot, openId, command.parameters);
            break;
        case AssessmentCommandType.ANSWER:
            await this.submitAnswer(bot, openId, command.parameters[0]);
            break;
        // ...
    }
}

五、API 接口

5.1 飞书机器人管理

POST /feishu/bots
{
    "appId": "cli_xxx",
    "appSecret": "xxx",
    "knowledgeBaseId": "kb_xxx",      // 可选
    "knowledgeGroupId": "group_xxx"   // 可选
}

5.2 测评会话管理

POST /feishu/assessment/start
{
    "botId": "bot_xxx",
    "openId": "ou_xxx",
    "knowledgeBaseId": "kb_xxx",
    "templateId": "tmpl_xxx"
}

六、安全考虑

  1. 多租户隔离:所有查询必须包含 userIdtenantId
  2. 命令验证:白名单命令验证,防止注入
  3. 会话超时:测评会话设置 24 小时超时
  4. 数据隐私:测评结果仅对授权用户可见

七、文件清单

需要创建的文件

  1. server/src/feishu/entities/feishu-assessment-session.entity.ts
  2. server/src/feishu/dto/assessment-command.dto.ts
  3. server/src/feishu/services/assessment-command.parser.ts
  4. server/src/feishu/services/feishu-assessment.service.ts
  5. server/src/migrations/XXXXXX-AddFeishuBotKnowledgeFields.ts
  6. server/src/migrations/XXXXXX-CreateFeishuAssessmentSessionTable.ts

需要修改的文件

  1. server/src/feishu/entities/feishu-bot.entity.ts
  2. server/src/feishu/dto/create-bot.dto.ts
  3. server/src/feishu/feishu.service.ts
  4. server/src/feishu/feishu.module.ts

八、总结

问题 答案
飞书机器人当前对接哪个知识库? 默认知识库(用户所有文件)
如何配置特定知识库? 在 FeishuBot 实体中设置 knowledgeBaseId 或 knowledgeGroupId
如何与人才测评对接? 通过 /assessment 命令触发测评功能
实施周期 5-7 天

完整设计文档: feishu-assessment-integration-design.md