# 飞书机器人与人才测评集成 - 设计摘要 > **文档版本**: v1.0 > **创建日期**: 2026-03-17 > **完整文档**: [feishu-assessment-integration-design.md](./feishu-assessment-integration-design.md) --- ## 一、核心问题 ### 1. 飞书机器人当前对接哪个知识库? **答案**:当前使用**默认知识库**(用户的所有文件) **原因**:在 `feishu.service.ts` 中调用 `chatService.streamChat()` 时,`selectedFiles` 和 `selectedGroups` 参数均为 `undefined`,导致搜索用户所有文件。 ### 2. 如何与人才测评对接? **答案**:通过**自然语言命令**触发测评功能 **命令格式**: - `/assessment start [kbId|templateId]` - 开始测评 - `/assessment answer [answer]` - 提交答案 - `/assessment status` - 查看状态 - `/assessment result` - 获取结果 --- ## 二、设计方案 ### 方案 1:知识库选择机制 #### 数据库变更 在 `FeishuBot` 实体中新增字段: ```typescript 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 知识库选择逻辑 ```typescript // 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 命令处理逻辑 ```typescript // 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 飞书机器人管理 ```http POST /feishu/bots { "appId": "cli_xxx", "appSecret": "xxx", "knowledgeBaseId": "kb_xxx", // 可选 "knowledgeGroupId": "group_xxx" // 可选 } ``` ### 5.2 测评会话管理 ```http POST /feishu/assessment/start { "botId": "bot_xxx", "openId": "ou_xxx", "knowledgeBaseId": "kb_xxx", "templateId": "tmpl_xxx" } ``` --- ## 六、安全考虑 1. **多租户隔离**:所有查询必须包含 `userId` 和 `tenantId` 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](./feishu-assessment-integration-design.md)