Files
aurak/docs/feishu-assessment-integration-summary.md
Developer 0a9588abb7 feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
2026-04-23 17:19:11 +08:00

209 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 飞书机器人与人才测评集成 - 设计摘要
> **文档版本**: 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)