Core Components: - PDFStorageService with Dify/OSS adapters - LLM12FieldsService with Nougat-first + dual-model + 3-layer JSON parsing - PromptBuilder for dynamic prompt assembly - MedicalLogicValidator with 5 rules + fault tolerance - EvidenceChainValidator for citation integrity - ConflictDetectionService for dual-model comparison Prompt Engineering: - System Prompt (6601 chars, Section-Aware strategy) - User Prompt template (PICOS context injection) - JSON Schema (12 fields constraints) - Cochrane standards (not loaded in MVP) Key Innovations: - 3-layer JSON parsing (JSON.parse + json-repair + code block extraction) - Promise.allSettled for dual-model fault tolerance - safeGetFieldValue for robust field extraction - Mixed CN/EN token calculation Integration Tests: - integration-test.ts (full test) - quick-test.ts (quick test) - cached-result-test.ts (fault tolerance test) Documentation Updates: - Development record (Day 2-3 summary) - Quality assurance strategy (full-text screening) - Development plan (progress update) - Module status (v1.1 update) - Technical debt (10 new items) Test Results: - JSON parsing success rate: 100% - Medical logic validation: 5/5 passed - Dual-model parallel processing: OK - Cost per PDF: CNY 0.10 Files: 238 changed, 14383 insertions(+), 32 deletions(-) Docs: docs/03-涓氬姟妯″潡/ASL-AI鏅鸿兘鏂囩尞/05-寮€鍙戣褰?2025-11-22_Day2-Day3_LLM鏈嶅姟涓庨獙璇佺郴缁熷紑鍙?md
166 lines
4.9 KiB
SQL
166 lines
4.9 KiB
SQL
-- ========================================
|
||
-- 简化版验证脚本
|
||
-- ========================================
|
||
|
||
-- 验证10个Schema是否创建
|
||
DO $$
|
||
DECLARE
|
||
schema_count INTEGER;
|
||
BEGIN
|
||
SELECT COUNT(*) INTO schema_count
|
||
FROM information_schema.schemata
|
||
WHERE schema_name IN (
|
||
'platform_schema', 'aia_schema', 'pkb_schema',
|
||
'asl_schema', 'common_schema', 'dc_schema',
|
||
'rvw_schema', 'admin_schema', 'ssa_schema', 'st_schema'
|
||
);
|
||
|
||
RAISE NOTICE '========================================';
|
||
IF schema_count = 10 THEN
|
||
RAISE NOTICE '✅ 10个Schema全部创建成功';
|
||
ELSE
|
||
RAISE WARNING '⚠️ Schema数量异常: 预期10个,实际%个', schema_count;
|
||
END IF;
|
||
RAISE NOTICE '========================================';
|
||
END $$;
|
||
|
||
-- 验证表数量
|
||
DO $$
|
||
DECLARE
|
||
platform_tables INTEGER;
|
||
aia_tables INTEGER;
|
||
pkb_tables INTEGER;
|
||
BEGIN
|
||
SELECT COUNT(*) INTO platform_tables FROM pg_tables WHERE schemaname = 'platform_schema';
|
||
SELECT COUNT(*) INTO aia_tables FROM pg_tables WHERE schemaname = 'aia_schema';
|
||
SELECT COUNT(*) INTO pkb_tables FROM pg_tables WHERE schemaname = 'pkb_schema';
|
||
|
||
RAISE NOTICE '表数量统计:';
|
||
RAISE NOTICE 'platform_schema: % 个表 (预期1个)', platform_tables;
|
||
RAISE NOTICE 'aia_schema: % 个表 (预期5个)', aia_tables;
|
||
RAISE NOTICE 'pkb_schema: % 个表 (预期5个)', pkb_tables;
|
||
|
||
IF platform_tables = 1 AND aia_tables = 5 AND pkb_tables = 5 THEN
|
||
RAISE NOTICE '✅ 所有表创建成功';
|
||
ELSE
|
||
RAISE WARNING '⚠️ 表数量存在异常';
|
||
END IF;
|
||
RAISE NOTICE '========================================';
|
||
END $$;
|
||
|
||
-- 验证数据量
|
||
DO $$
|
||
DECLARE
|
||
public_users INTEGER;
|
||
platform_users INTEGER;
|
||
public_projects INTEGER;
|
||
aia_projects INTEGER;
|
||
public_kb INTEGER;
|
||
pkb_kb INTEGER;
|
||
BEGIN
|
||
-- 统计users
|
||
SELECT COUNT(*) INTO public_users FROM public.users;
|
||
SELECT COUNT(*) INTO platform_users FROM platform_schema.users;
|
||
|
||
-- 统计projects
|
||
SELECT COUNT(*) INTO public_projects FROM public.projects;
|
||
SELECT COUNT(*) INTO aia_projects FROM aia_schema.projects;
|
||
|
||
-- 统计knowledge_bases
|
||
SELECT COUNT(*) INTO public_kb FROM public.knowledge_bases;
|
||
SELECT COUNT(*) INTO pkb_kb FROM pkb_schema.knowledge_bases;
|
||
|
||
RAISE NOTICE '数据量对比:';
|
||
RAISE NOTICE 'users: public.% -> platform_schema.%', public_users, platform_users;
|
||
RAISE NOTICE 'projects: public.% -> aia_schema.%', public_projects, aia_projects;
|
||
RAISE NOTICE 'knowledge_bases: public.% -> pkb_schema.%', public_kb, pkb_kb;
|
||
|
||
IF public_users = platform_users AND
|
||
public_projects = aia_projects AND
|
||
public_kb = pkb_kb THEN
|
||
RAISE NOTICE '✅ 数据迁移完整';
|
||
ELSE
|
||
RAISE WARNING '⚠️ 数据量存在差异';
|
||
END IF;
|
||
RAISE NOTICE '========================================';
|
||
END $$;
|
||
|
||
-- 验证外键约束
|
||
DO $$
|
||
DECLARE
|
||
fk_count INTEGER;
|
||
BEGIN
|
||
SELECT COUNT(*) INTO fk_count
|
||
FROM information_schema.table_constraints
|
||
WHERE constraint_type = 'FOREIGN KEY'
|
||
AND table_schema IN ('platform_schema', 'aia_schema', 'pkb_schema');
|
||
|
||
RAISE NOTICE '外键约束统计:';
|
||
RAISE NOTICE '外键约束总数:%', fk_count;
|
||
RAISE NOTICE '✅ 外键约束已建立';
|
||
RAISE NOTICE '========================================';
|
||
END $$;
|
||
|
||
-- 验证跨Schema引用
|
||
DO $$
|
||
DECLARE
|
||
invalid_aia_projects INTEGER;
|
||
invalid_pkb_kb INTEGER;
|
||
BEGIN
|
||
-- 验证aia_schema.projects
|
||
SELECT COUNT(*) INTO invalid_aia_projects
|
||
FROM aia_schema.projects p
|
||
LEFT JOIN platform_schema.users u ON p.user_id = u.id
|
||
WHERE u.id IS NULL;
|
||
|
||
-- 验证pkb_schema.knowledge_bases
|
||
SELECT COUNT(*) INTO invalid_pkb_kb
|
||
FROM pkb_schema.knowledge_bases kb
|
||
LEFT JOIN platform_schema.users u ON kb.user_id = u.id
|
||
WHERE u.id IS NULL;
|
||
|
||
RAISE NOTICE '跨Schema引用验证:';
|
||
IF invalid_aia_projects = 0 THEN
|
||
RAISE NOTICE '✅ aia_schema.projects外键全部有效';
|
||
ELSE
|
||
RAISE WARNING '⚠️ aia_schema.projects有%条无效user_id', invalid_aia_projects;
|
||
END IF;
|
||
|
||
IF invalid_pkb_kb = 0 THEN
|
||
RAISE NOTICE '✅ pkb_schema.knowledge_bases外键全部有效';
|
||
ELSE
|
||
RAISE WARNING '⚠️ pkb_schema.knowledge_bases有%条无效user_id', invalid_pkb_kb;
|
||
END IF;
|
||
RAISE NOTICE '========================================';
|
||
END $$;
|
||
|
||
-- 最终总结
|
||
DO $$
|
||
BEGIN
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE '🎉🎉🎉 Schema迁移验证完成 🎉🎉🎉';
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE '下一步:';
|
||
RAISE NOTICE '1. 更新Prisma配置(schema.prisma)';
|
||
RAISE NOTICE '2. 生成Prisma Client';
|
||
RAISE NOTICE '3. 更新代码以使用新Schema';
|
||
RAISE NOTICE '4. 测试现有功能';
|
||
RAISE NOTICE '';
|
||
RAISE NOTICE '========================================';
|
||
END $$;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|