后端新增风险规则自动生成和模板执行服务,支持从规则资产 批量生成并持久化风险规则文件;知识库入库日志增强图谱 查询和本地 RAG 回退,前端审计页面增加风险规则模型和流 程图组件,知识入库面板拆分为图谱可视化子组件,报销创 建页面增加引导式流程模型,更新知识库索引数据。
147 lines
4.6 KiB
JavaScript
147 lines
4.6 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
|
|
import {
|
|
buildKnowledgeIngestLogModel,
|
|
isKnowledgeIngestRun
|
|
} from '../src/utils/knowledgeIngestLogModel.js'
|
|
|
|
function buildRun() {
|
|
return {
|
|
status: 'running',
|
|
route_json: {
|
|
job_type: 'knowledge_index_sync',
|
|
folder: '制度文件',
|
|
phase: 'indexing',
|
|
progress: {
|
|
total_documents: 2,
|
|
completed_documents: 1,
|
|
failed_documents: 0,
|
|
percent: 55
|
|
},
|
|
knowledge_ingest: {
|
|
status: 'running',
|
|
phase: 'indexing',
|
|
current_document_id: 'doc-2',
|
|
graph: {
|
|
chunk_count: 5,
|
|
entity_count: 3,
|
|
relation_count: 2,
|
|
entities: [
|
|
{
|
|
name: '远光软件',
|
|
type: 'ORGANIZATION',
|
|
description: '远光软件是支出管理制度的公司主体。',
|
|
descriptions: ['远光软件是支出管理制度的公司主体。'],
|
|
properties: { created_at: '2026-05-23' }
|
|
},
|
|
'支出管理'
|
|
],
|
|
relations: [
|
|
{
|
|
source: '远光软件',
|
|
target: '支出管理',
|
|
type: '约束',
|
|
description: '通过制度约束支出审批。',
|
|
keywords: ['制度', '审批'],
|
|
weight: 2.5
|
|
}
|
|
]
|
|
},
|
|
documents: [
|
|
{
|
|
document_id: 'doc-1',
|
|
name: '公司支出管理办法.pdf',
|
|
folder: '制度文件',
|
|
extension: 'pdf',
|
|
status: 'succeeded',
|
|
phase: 'indexed',
|
|
chunk_count: 3,
|
|
entity_count: 2,
|
|
relation_count: 1,
|
|
chunks: [{ id: 'chunk-1', order: 0, tokens: 21, summary: '支出管理范围', excerpt: '支出管理范围正文' }],
|
|
entity_chunks: [{ entity: '支出管理', chunk_ids: ['chunk-1'] }],
|
|
sections: [{ title: '第一章 总则', excerpt: '适用于公司支出。' }],
|
|
events: [{ at: '2026-05-22T08:00:00Z', level: 'info', message: '完成' }]
|
|
},
|
|
{
|
|
document_id: 'doc-2',
|
|
name: '费用审批台账.xlsx',
|
|
folder: '制度文件',
|
|
extension: 'xlsx',
|
|
status: 'running',
|
|
phase: 'indexing',
|
|
chunk_count: 2,
|
|
entity_count: 1,
|
|
relation_count: 1
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function testDetectsKnowledgeIngestRun() {
|
|
assert.equal(isKnowledgeIngestRun(buildRun()), true)
|
|
assert.equal(isKnowledgeIngestRun({ route_json: { job_type: 'daily_check' } }), false)
|
|
}
|
|
|
|
function testBuildsInteractiveModel() {
|
|
const model = buildKnowledgeIngestLogModel(buildRun())
|
|
|
|
assert.equal(model.available, true)
|
|
assert.equal(model.folder, '制度文件')
|
|
assert.equal(model.selectedDocumentId, 'doc-2')
|
|
assert.equal(model.documents.length, 2)
|
|
assert.equal(model.documents[0].statusLabel, '已完成')
|
|
assert.equal(model.documents[0].chunks[0].summary, '支出管理范围')
|
|
assert.equal(model.documents[0].chunks[0].excerpt, '支出管理范围正文')
|
|
assert.deepEqual(model.documents[0].entityChunks, [{ entity: '支出管理', chunkIds: ['chunk-1'] }])
|
|
assert.deepEqual(model.documents[1].chunks, [])
|
|
assert.deepEqual(model.documents[1].sections, [])
|
|
assert.deepEqual(model.documents[1].events, [])
|
|
assert.equal(model.graph.entityCount, 3)
|
|
assert.equal(model.graph.entities[0].name, '远光软件')
|
|
assert.equal(model.graph.entities[0].type, 'ORGANIZATION')
|
|
assert.equal(model.graph.entities[0].descriptions[0], '远光软件是支出管理制度的公司主体。')
|
|
assert.equal(model.graph.relations[0].source, '远光软件')
|
|
assert.equal(model.graph.relations[0].description, '通过制度约束支出审批。')
|
|
assert.deepEqual(model.graph.relations[0].keywords, ['制度', '审批'])
|
|
assert.equal(model.metrics[1].value, '5')
|
|
}
|
|
|
|
function testFallsBackToToolCallDocuments() {
|
|
const model = buildKnowledgeIngestLogModel({
|
|
status: 'succeeded',
|
|
route_json: {
|
|
job_type: 'knowledge_index_sync',
|
|
requested_document_ids: ['doc-1']
|
|
},
|
|
tool_calls: [
|
|
{
|
|
response_json: {
|
|
documents: [
|
|
{
|
|
document_id: 'doc-1',
|
|
name: '归集结果.docx',
|
|
status: 'succeeded',
|
|
chunk_count: 1
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
})
|
|
|
|
assert.equal(model.documents[0].name, '归集结果.docx')
|
|
assert.equal(model.graph.chunkCount, 1)
|
|
}
|
|
|
|
function run() {
|
|
testDetectsKnowledgeIngestRun()
|
|
testBuildsInteractiveModel()
|
|
testFallsBackToToolCallDocuments()
|
|
console.log('knowledge ingest log model tests passed')
|
|
}
|
|
|
|
run()
|