文档版本: v1.0
创建日期: 2026-03-17
状态: 实现完成
用户消息
↓
FeishuController._handleMessage()
↓
[命令识别] → 是测评命令? → FeishuAssessmentService.handleCommand()
↓ ↓
否 命令解析器
↓ ↓
FeishuService.processChatMessage() 执行对应操作
↓ ↓
ChatService.streamChat() [开始/回答/状态/结果]
↓ ↓
RAG搜索 + LLM生成 AssessmentService
↓ ↓
飞书消息回复 飞书消息回复
文件: server/src/feishu/entities/feishu-bot.entity.ts
@Column({ name: 'knowledge_base_id', nullable: true, length: 36 })
knowledgeBaseId: string;
@Column({ name: 'knowledge_group_id', nullable: true, length: 36 })
knowledgeGroupId: string;
文件: server/src/feishu/entities/feishu-assessment-session.entity.ts
CREATE TABLE feishu_assessment_sessions (
id VARCHAR(36) PRIMARY KEY,
bot_id VARCHAR(36) NOT NULL,
open_id VARCHAR(255) NOT NULL,
assessment_session_id VARCHAR(36) NOT NULL,
status ENUM('active', 'completed', 'cancelled') DEFAULT 'active',
current_question_index INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_bot_open (bot_id, open_id),
INDEX idx_assessment_session (assessment_session_id),
CONSTRAINT fk_feishu_assessment_bot
FOREIGN KEY (bot_id)
REFERENCES feishu_bots(id)
ON DELETE CASCADE
);
1773200000000-AddFeishuBotKnowledgeFields.ts - 添加知识库字段1773200000001-CreateFeishuAssessmentSessionTable.ts - 创建测评会话表文件: server/src/feishu/services/assessment-command.parser.ts
功能:
/assessment, /测评, /eval, /测评评估示例:
const parser = new AssessmentCommandParser();
const command = parser.parse('/assessment start kb_xxx');
// 结果: { type: 'start', parameters: ['kb_xxx'], ... }
文件: server/src/feishu/services/feishu-assessment.service.ts
核心方法:
handleCommand() - 处理测评命令startAssessment() - 开始测评会话submitAnswer() - 提交答案getStatus() - 获取测评状态getResult() - 获取测评结果cancelAssessment() - 取消测评会话流程:
/assessment start/assessment answer)文件: server/src/feishu/feishu.service.ts
新增方法:
isAssessmentCommand(message: string): boolean {
const trimmed = message.trim().toLowerCase();
const commandPrefixes = ['/assessment', '/测评', '/eval', '/测评评估'];
return commandPrefixes.some(prefix => trimmed.startsWith(prefix.toLowerCase()));
}
文件: server/src/feishu/feishu.controller.ts
修改 _handleMessage 方法:
if (this.feishuService.isAssessmentCommand(userText)) {
// 委托给测评服务
await this.feishuAssessmentService.handleCommand(bot, openId, userText);
} else {
// 使用默认聊天处理
await this.feishuService.processChatMessage(bot, openId, messageId, userText);
}
端点: POST /feishu/bots
请求体:
{
"appId": "cli_xxx",
"appSecret": "xxx",
"botName": "测评机器人",
"knowledgeBaseId": "kb_xxx", // 可选:特定知识库
"knowledgeGroupId": "group_xxx" // 可选:知识组
}
端点: PATCH /feishu/bots/:id/knowledge
请求体:
{
"knowledgeBaseId": "kb_xxx",
"knowledgeGroupId": null
}
/assessment/测评/eval/测评评估| 命令 | 参数 | 说明 |
|---|---|---|
start [kbId\|templateId] |
可选 | 开始测评 |
answer [answer] |
必需 | 提交答案 |
status |
- | 查看状态 |
result |
- | 获取结果 |
help |
- | 显示帮助 |
cancel |
- | 取消测评 |
用户: /assessment start
系统: [发送第一个问题卡片]
用户: 这是我的答案
系统: [评估答案并发送下一个问题]
用户: /assessment status
系统: 测评状态: 进度 3/10, 状态: 进行中
用户: /assessment result
系统: [发送测评结果报告]
server/src/feishu/dto/assessment-command.dto.ts - 命令DTOserver/src/feishu/entities/feishu-assessment-session.entity.ts - 测评会话实体server/src/feishu/services/assessment-command.parser.ts - 命令解析器server/src/feishu/services/feishu-assessment.service.ts - 测评服务server/src/migrations/1773200000000-AddFeishuBotKnowledgeFields.ts - 迁移脚本1server/src/migrations/1773200000001-CreateFeishuAssessmentSessionTable.ts - 迁移脚本2server/src/feishu/entities/feishu-bot.entity.ts - 添加知识库字段server/src/feishu/dto/create-bot.dto.ts - 添加知识库配置字段server/src/feishu/feishu.service.ts - 添加命令识别方法server/src/feishu/feishu.controller.ts - 集成测评服务server/src/feishu/feishu.module.ts - 注册新服务userId 和 tenantId 过滤运行数据库迁移
yarn migration:run
测试命令解析
node test-feishu-assessment.js
集成测试
/assessment start 命令文档完善
本次实现完成了飞书机器人与人才测评的完整集成:
系统架构清晰,代码结构良好,易于维护和扩展。
相关文档: