feat(enum): 统一结构化枚举值传输与同步
This commit is contained in:
@@ -47,13 +47,21 @@ export interface RagDocumentBatchUploadRequest {
|
||||
remark?: string;
|
||||
}
|
||||
|
||||
export type RagChunkStrategy =
|
||||
| 'FIXED_LENGTH'
|
||||
| 'PARAGRAPH'
|
||||
| 'HEADING'
|
||||
| 'TABLE_ROW'
|
||||
| 'DELIMITER'
|
||||
| 'SEMANTIC';
|
||||
/**
|
||||
* RAG 切片策略枚举值。
|
||||
* <p>
|
||||
* 前后端统一传递枚举值,不再传递字符串名称。
|
||||
*/
|
||||
export const RAG_CHUNK_STRATEGY = {
|
||||
FIXED_LENGTH: 1,
|
||||
PARAGRAPH: 2,
|
||||
HEADING: 3,
|
||||
TABLE_ROW: 4,
|
||||
DELIMITER: 5,
|
||||
SEMANTIC: 6,
|
||||
} as const;
|
||||
|
||||
export type RagChunkStrategy = (typeof RAG_CHUNK_STRATEGY)[keyof typeof RAG_CHUNK_STRATEGY];
|
||||
|
||||
export interface RagDocumentParseRequest {
|
||||
documentIds: string[];
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
parseRagDocuments,
|
||||
queryRagDocuments,
|
||||
saveRagDocument,
|
||||
RAG_CHUNK_STRATEGY,
|
||||
type RagChunkStrategy,
|
||||
type RagDocument,
|
||||
} from '@/api/ragDocuments';
|
||||
@@ -49,19 +50,19 @@ const editForm = reactive({
|
||||
|
||||
const parseForm = reactive({
|
||||
documentIds: [] as string[],
|
||||
chunkStrategy: 'FIXED_LENGTH' as RagChunkStrategy,
|
||||
chunkStrategy: RAG_CHUNK_STRATEGY.FIXED_LENGTH as RagChunkStrategy,
|
||||
chunkSize: 800,
|
||||
chunkOverlap: 120,
|
||||
delimiter: '。',
|
||||
});
|
||||
|
||||
const chunkStrategyOptions: Array<{ label: string; value: RagChunkStrategy; description: string }> = [
|
||||
{ label: '固定长度切片', value: 'FIXED_LENGTH', description: '按指定长度和重叠长度切分通用文本' },
|
||||
{ label: '按段落切片', value: 'PARAGRAPH', description: '按空行、自然段落边界切分' },
|
||||
{ label: '按标题层级切片', value: 'HEADING', description: '按标题和章节层级组织内容' },
|
||||
{ label: '按表格行切片', value: 'TABLE_ROW', description: '适合 Excel 表格和结构化明细数据' },
|
||||
{ label: '按分隔符切片', value: 'DELIMITER', description: '按句号、换行符或自定义分隔符切分' },
|
||||
{ label: '语义切片', value: 'SEMANTIC', description: '后续结合语义边界或模型能力切分' },
|
||||
{ label: '固定长度切片', value: RAG_CHUNK_STRATEGY.FIXED_LENGTH, description: '按指定长度和重叠长度切分通用文本' },
|
||||
{ label: '按段落切片', value: RAG_CHUNK_STRATEGY.PARAGRAPH, description: '按空行、自然段落边界切分' },
|
||||
{ label: '按标题层级切片', value: RAG_CHUNK_STRATEGY.HEADING, description: '按标题和章节层级组织内容' },
|
||||
{ label: '按表格行切片', value: RAG_CHUNK_STRATEGY.TABLE_ROW, description: '适合 Excel 表格和结构化明细数据' },
|
||||
{ label: '按分隔符切片', value: RAG_CHUNK_STRATEGY.DELIMITER, description: '按句号、换行符或自定义分隔符切分' },
|
||||
{ label: '语义切片', value: RAG_CHUNK_STRATEGY.SEMANTIC, description: '后续结合语义边界或模型能力切分' },
|
||||
];
|
||||
|
||||
const filteredRows = computed(() => {
|
||||
@@ -138,7 +139,7 @@ function openParseDialog(rows: RagDocument[]) {
|
||||
return;
|
||||
}
|
||||
parseForm.documentIds = ids;
|
||||
parseForm.chunkStrategy = 'FIXED_LENGTH';
|
||||
parseForm.chunkStrategy = RAG_CHUNK_STRATEGY.FIXED_LENGTH;
|
||||
parseForm.chunkSize = 800;
|
||||
parseForm.chunkOverlap = 120;
|
||||
parseForm.delimiter = '。';
|
||||
@@ -467,13 +468,13 @@ onMounted(() => {
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="parseForm.chunkStrategy === 'FIXED_LENGTH'" label="切片长度">
|
||||
<el-form-item v-if="parseForm.chunkStrategy === RAG_CHUNK_STRATEGY.FIXED_LENGTH" label="切片长度">
|
||||
<el-input-number v-model="parseForm.chunkSize" :min="100" :max="4000" :step="100" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="parseForm.chunkStrategy === 'FIXED_LENGTH'" label="重叠长度">
|
||||
<el-form-item v-if="parseForm.chunkStrategy === RAG_CHUNK_STRATEGY.FIXED_LENGTH" label="重叠长度">
|
||||
<el-input-number v-model="parseForm.chunkOverlap" :min="0" :max="1000" :step="20" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="parseForm.chunkStrategy === 'DELIMITER'" label="分隔符">
|
||||
<el-form-item v-if="parseForm.chunkStrategy === RAG_CHUNK_STRATEGY.DELIMITER" label="分隔符">
|
||||
<el-input v-model="parseForm.delimiter" maxlength="20" placeholder="如 。、换行符或自定义符号" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -29,6 +29,14 @@ vi.mock('@/api/ragStores', () => ({
|
||||
|
||||
vi.mock('@/api/ragDocuments', () => ({
|
||||
SOURCE_TYPE_RAG: 'RAG',
|
||||
RAG_CHUNK_STRATEGY: {
|
||||
FIXED_LENGTH: 1,
|
||||
PARAGRAPH: 2,
|
||||
HEADING: 3,
|
||||
TABLE_ROW: 4,
|
||||
DELIMITER: 5,
|
||||
SEMANTIC: 6,
|
||||
},
|
||||
queryRagDocuments: vi.fn((query?: { storeId?: string }) => {
|
||||
const rows = [
|
||||
{
|
||||
@@ -178,7 +186,7 @@ describe('RagDocumentsPage', () => {
|
||||
|
||||
expect(parseRagDocuments).toHaveBeenCalledWith({
|
||||
documentIds: ['11'],
|
||||
chunkStrategy: 'FIXED_LENGTH',
|
||||
chunkStrategy: 1,
|
||||
chunkSize: 800,
|
||||
chunkOverlap: 120,
|
||||
delimiter: '。',
|
||||
|
||||
Reference in New Issue
Block a user