chore: 清理 docs 目录冗余文档(55个→9个)
删除: - docs/1.0/ 全部22个(旧Simple KB文档,已被替代) - docs/2.0/ 全部2个(空文件/过时) - docs/design/ 全部4个(旧功能设计) - docs/plans/ 旧版5个(保留v2.0设计文档) - docs/superpowers/ 全部4个(飞书集成文档) - docs/根目录杂项 8个(开发规范/快速参考/调试/飞书/Git设置) - docs/3.0/knowledge_graph_analysis.md(不相关) 保留: - docs/3.0/ 考核工作流设计 2个 - docs/plans/ v2.0设计文档 1个 - docs/tests/ 测试文档 6个 合计: 55个 → 9个 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,208 +0,0 @@
|
||||
# 飞书机器人与人才测评集成 - 设计摘要
|
||||
|
||||
> **文档版本**: 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)
|
||||
Reference in New Issue
Block a user