核心诉求:合同审核站在我方(德睿福)立场,找出不利条款并给出利好我方的
修改/补充建议;简历审核评估候选人与目标岗位的匹配度。
后端(ruoyi-oa):
- 接入小米 MiMo(OpenAI 兼容 /chat/completions),mimo-v2.5 多模态模型
· MiMoProperties 绑定 application.yml mimo: 配置(base-url/api-key/model/...)
· MiMoClient:text + multimodal(image_url base64) 两种调用,独立长超时
RestTemplate;mimo-v2.5 是推理模型,max-tokens 配 8192 留足思考额度
- DocumentParseUtil:PDF 文字(PDFBox)、Word(POI: docx XWPF / doc HWPF),
扫描版 PDF(提取文字过短)用 PDFRenderer 转 PNG 走多模态
- OaAiReview 实体 + BO/VO/Mapper/Service/Controller(/oa/aiReview)
· analyze 上传解析→构建提示词→调用大模型→留存原件(OSS)→落库
· 合同/简历两套提示词;正则解析风险评级:高/中/低与匹配度评分:NN入库
· 提供 list/detail/delete
- ruoyi-oa/pom.xml 增加 poi-ooxml、poi-scratchpad(Word 解析)
- application.yml 增加 mimo: 配置块
前端(ruoyi-ui):
- views/oa/aiReview/index.vue:类型切换(合同/简历)、拖拽上传(pdf/word)、
简历目标岗位输入、审核(loading)、Markdown 结果渲染、历史记录列表
- api/oa/aiReview.js:analyze 用 FormData,超时放宽到 5 分钟
SQL(已应用到生产库):
- oa_ai_review 表;菜单挂信息下(menu_id 2063910000000000001),授权10个角色
已用真实接口端到端验证:合同审核输出利好我方意见、风险评级可正确解析。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
58 lines
3.5 KiB
SQL
58 lines
3.5 KiB
SQL
-- =====================================================
|
||
-- AI 智能审核(合同 / 简历)
|
||
-- - 使用小米 MiMo 多模态大模型(mimo-v2.5)
|
||
-- - 合同:站在“我方”立场审查,找出不利条款 + 利好我方的修改建议
|
||
-- - 简历:评估候选人与目标岗位匹配度
|
||
-- 本脚本可重复执行(幂等)。
|
||
-- 注意:sys_menu 主键为雪花ID(非自增),必须显式指定。
|
||
-- =====================================================
|
||
|
||
-- ---------------- 审核记录表 ----------------
|
||
CREATE TABLE IF NOT EXISTS `oa_ai_review` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
`review_type` varchar(20) NOT NULL COMMENT '类型 contract合同 / resume简历',
|
||
`file_name` varchar(255) DEFAULT NULL COMMENT '原始文件名',
|
||
`oss_id` bigint(20) DEFAULT NULL COMMENT 'OSS文件ID(原件留存)',
|
||
`file_url` varchar(500) DEFAULT NULL COMMENT 'OSS文件地址',
|
||
`position` varchar(255) DEFAULT NULL COMMENT '简历目标岗位',
|
||
`match_score` int(11) DEFAULT NULL COMMENT '简历匹配度评分 0-100',
|
||
`risk_level` varchar(10) DEFAULT NULL COMMENT '合同风险评级 高/中/低',
|
||
`result_md` longtext COMMENT 'AI 审核结果(Markdown)',
|
||
`model` varchar(50) DEFAULT NULL COMMENT '使用的模型',
|
||
`tokens` int(11) DEFAULT NULL COMMENT '消耗 token',
|
||
`create_by` varchar(64) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
|
||
`update_by` varchar(64) DEFAULT NULL,
|
||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志:0正常 2删除(mybatis-plus logicDeleteValue=2)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_type` (`review_type`),
|
||
KEY `idx_create_time` (`create_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 审核记录(合同/简历)';
|
||
|
||
-- ---------------- 菜单:信息 > AI审核 ----------------
|
||
-- 父菜单 1774989374680858626 = 「信息」
|
||
INSERT IGNORE INTO `sys_menu`
|
||
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`)
|
||
VALUES
|
||
(2063910000000000001, 'AI审核', 1774989374680858626, 4,
|
||
'aiReview', 'oa/aiReview/index', 'C', '0', '0',
|
||
NULL, 'eye-open', 'admin', NOW());
|
||
|
||
-- ---------------- 角色授权(与「信息」下兄弟菜单一致的角色集) ----------------
|
||
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`)
|
||
VALUES
|
||
(1743186990678077442, 2063910000000000001), -- 总经理
|
||
(1743204526291349506, 2063910000000000001), -- 技术总监
|
||
(1743205028123045890, 2063910000000000001), -- 信息化部
|
||
(1852970465740505090, 2063910000000000001), -- 普通员工
|
||
(1859257980152692738, 2063910000000000001), -- 职工
|
||
(1859548445766717441, 2063910000000000001), -- 后勤
|
||
(1893987128812761089, 2063910000000000001), -- 新员工临时身份
|
||
(1914212623781187585, 2063910000000000001), -- 技术总工
|
||
(1914213026883162113, 2063910000000000001), -- 设计主任
|
||
(1925062159919448065, 2063910000000000001); -- 外贸专责
|
||
|
||
-- ---------------- 校验 ----------------
|
||
SELECT menu_id, menu_name, path, component, icon FROM sys_menu WHERE menu_id = 2063910000000000001;
|