Files
AIclinicalresearch/backend/check_db_data.ts
HaHafeng 40c2f8e148 feat(rag): Complete RAG engine implementation with pgvector
Major Features:
- Created ekb_schema (13th schema) with 3 tables: KB/Document/Chunk
- Implemented EmbeddingService (text-embedding-v4, 1024-dim vectors)
- Implemented ChunkService (smart Markdown chunking)
- Implemented VectorSearchService (multi-query + hybrid search)
- Implemented RerankService (qwen3-rerank)
- Integrated DeepSeek V3 QueryRewriter for cross-language search
- Python service: Added pymupdf4llm for PDF-to-Markdown conversion
- PKB: Dual-mode adapter (pgvector/dify/hybrid)

Architecture:
- Brain-Hand Model: Business layer (DeepSeek) + Engine layer (pgvector)
- Cross-language support: Chinese query matches English documents
- Small Embedding (1024) + Strong Reranker strategy

Performance:
- End-to-end latency: 2.5s
- Cost per query: 0.0025 RMB
- Accuracy improvement: +20.5% (cross-language)

Tests:
- test-embedding-service.ts: Vector embedding verified
- test-rag-e2e.ts: Full pipeline tested
- test-rerank.ts: Rerank quality validated
- test-query-rewrite.ts: Cross-language search verified
- test-pdf-ingest.ts: Real PDF document tested (Dongen 2003.pdf)

Documentation:
- Added 05-RAG-Engine-User-Guide.md
- Added 02-Document-Processing-User-Guide.md
- Updated system status documentation

Status: Production ready
2026-01-21 20:24:29 +08:00

59 lines
2.1 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('\n=== 各模块数据量检查 ===\n');
// 检查各个模块的数据
const queries = [
{ name: 'aia_schema.projects', sql: 'SELECT COUNT(*) as count FROM aia_schema.projects' },
{ name: 'aia_schema.conversations', sql: 'SELECT COUNT(*) as count FROM aia_schema.conversations' },
{ name: 'asl_schema.screening_projects', sql: 'SELECT COUNT(*) as count FROM asl_schema.screening_projects' },
{ name: 'asl_schema.literatures', sql: 'SELECT COUNT(*) as count FROM asl_schema.literatures' },
{ name: 'dc_schema.dc_templates', sql: 'SELECT COUNT(*) as count FROM dc_schema.dc_templates' },
{ name: 'dc_schema.dc_extraction_tasks', sql: 'SELECT COUNT(*) as count FROM dc_schema.dc_extraction_tasks' },
{ name: 'iit_schema.projects', sql: 'SELECT COUNT(*) as count FROM iit_schema.projects' },
{ name: 'pkb_schema.knowledge_bases', sql: 'SELECT COUNT(*) as count FROM pkb_schema.knowledge_bases' },
{ name: 'pkb_schema.documents', sql: 'SELECT COUNT(*) as count FROM pkb_schema.documents' },
{ name: 'platform_schema.users', sql: 'SELECT COUNT(*) as count FROM platform_schema.users' },
{ name: 'platform_schema.tenants', sql: 'SELECT COUNT(*) as count FROM platform_schema.tenants' },
{ name: 'platform_schema.departments', sql: 'SELECT COUNT(*) as count FROM platform_schema.departments' },
{ name: 'capability_schema.prompt_templates', sql: 'SELECT COUNT(*) as count FROM capability_schema.prompt_templates' },
];
for (const q of queries) {
try {
const result: any = await prisma.$queryRawUnsafe(q.sql);
console.log(`${q.name}: ${result[0].count} 条记录`);
} catch (e: any) {
console.log(`${q.name}: 查询失败 - ${e.message}`);
}
}
// 检查 platform_schema.users 的具体数据
console.log('\n=== platform_schema.users 详情 ===');
const users = await prisma.$queryRaw`SELECT id, name, phone, role, tenant_id FROM platform_schema.users;`;
console.log(users);
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());