fix: 完善提示词管理页面的优化,数据库中添加相关字段来区分vlm和llm提示词。评查点设置中抽取设置的多模态抽取的类型通过查询数据库来返回数据。

This commit is contained in:
2025-11-11 01:16:27 +08:00
parent ddad57529d
commit 95381ddcc2
7 changed files with 261 additions and 76 deletions
+35 -43
View File
@@ -45,6 +45,7 @@ interface ExtractionSettingsProps {
export function ExtractionSettings({
onChange,
initialData,
vlmFieldTypeOptions = EVALUATION_OPTIONS.vlmFieldTypeOptions,
}: ExtractionSettingsProps) {
// 核心数据状态
@@ -84,7 +85,10 @@ export function ExtractionSettings({
vlm: initialData?.extraction_config?.vlm?.fields || []
});
// VLM字段类型
const [selectedVlmFieldType, setSelectedVlmFieldType] = useState('vlm_default_prompt');
const [selectedVlmFieldType, setSelectedVlmFieldType] = useState(() => {
// 使用传入的选项中的第一个作为默认值,如果没有则使用 vlm_default_prompt
return vlmFieldTypeOptions.length > 0 ? vlmFieldTypeOptions[0].value : 'vlm_default_prompt';
});
// 自定义字段的提示词模板
const [customVlmPrompt, setCustomVlmPrompt] = useState('请识别文档中的印章信息,提取以下字段');
// 提示词类型
@@ -117,6 +121,14 @@ export function ExtractionSettings({
setCurrentTab(tab);
};
// 当 vlmFieldTypeOptions 加载完成时,更新默认选中的类型
useEffect(() => {
if (vlmFieldTypeOptions.length > 0 && !vlmFieldTypeOptions.find(opt => opt.value === selectedVlmFieldType)) {
// 如果当前选中的类型不在新的选项列表中,选择第一个选项
setSelectedVlmFieldType(vlmFieldTypeOptions[0].value);
}
}, [vlmFieldTypeOptions, selectedVlmFieldType]);
// 初始化自定义字段的提示词
useEffect(() => {
// 在编辑模式下,如果有自定义类型的字段,加载其 template
@@ -249,52 +261,32 @@ export function ExtractionSettings({
if (typeof field === 'string') {
const parts = field.split('_');
fieldName = parts[0];
fieldType = parts.length > 1 ? parts[1] : 'default';
fieldType = parts.length > 1 ? parts[1] : 'vlm_default_prompt';
} else {
fieldName = field.name;
fieldType = field.type;
}
switch (fieldType) {
case 'vlm_default_prompt':
typeName = '默认';
badgeClass = 'bg-gray-100 text-gray-800';
break;
case 'vlm_currency_prompt':
typeName = '货币';
badgeClass = 'bg-green-100 text-green-800';
break;
case 'vlm_print_prompt':
typeName = '打印';
badgeClass = 'bg-blue-100 text-blue-800';
break;
case 'vlm_seal_prompt':
typeName = '印章';
badgeClass = 'bg-red-100 text-red-800';
break;
case 'vlm_acrossPageSeal_prompt':
typeName = '骑缝章';
badgeClass = 'bg-orange-100 text-orange-800';
break;
case 'vlm_english_prompt':
typeName = '英文';
badgeClass = 'bg-purple-100 text-purple-800';
break;
case 'vlm_number_prompt':
typeName = '数字';
badgeClass = 'bg-yellow-100 text-yellow-800';
break;
case 'vlm_handwriting_prompt':
typeName = '手写';
badgeClass = 'bg-pink-100 text-pink-800';
break;
case 'custom':
typeName = '自定义';
badgeClass = 'bg-indigo-100 text-indigo-800';
break;
default:
typeName = '默认';
badgeClass = 'bg-gray-100 text-gray-800';
// 首先尝试从 vlmFieldTypeOptions 中查找对应的标签
const optionItem = vlmFieldTypeOptions.find(opt => opt.value === fieldType);
if (optionItem) {
typeName = optionItem.label;
// 根据不同类型设置不同的颜色
switch (fieldType) {
case 'vlm_default_prompt':
badgeClass = 'bg-gray-100 text-gray-800';
break;
case 'custom':
badgeClass = 'bg-indigo-100 text-indigo-800';
break;
default:
// 对于从数据库获取的类型,使用统一的蓝色系
badgeClass = 'bg-blue-100 text-blue-800';
}
} else {
// 如果找不到,使用默认值
typeName = '未知类型';
badgeClass = 'bg-gray-100 text-gray-800';
}
return { fieldName, fieldType, typeName, badgeClass };
@@ -408,7 +400,7 @@ export function ExtractionSettings({
value={selectedVlmFieldType}
onChange={(e) => setSelectedVlmFieldType(e.target.value)}
>
{EVALUATION_OPTIONS.vlmFieldTypeOptions.map((option) => (
{vlmFieldTypeOptions.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>