1 line
5.2 KiB
JSON
1 line
5.2 KiB
JSON
{"repo": "1005025127-afk/lawflow", "files": {".env.example": {"f74a029535ff2e928434ed02331446f791167214": {"t": 1785768987.4691432, "n": 144, "h": "26ab05cfe51cab43", "c": "# AIHubMix API Configuration\nAIHUBMIX_API_KEY=sk-njWgt3c0AByZVXwX04CaA5731fE7426c89377dA75b5dA892\nAIHUBMIX_BASE_URL=https://api.aihubmix.com/v1\n"}}, "src/services/lseService.ts": {"f74a029535ff2e928434ed02331446f791167214": {"t": 1785769003.1913016, "n": 3890, "h": "c682a9819db4944d", "c": "export interface FactItem {\n id: string;\n text: string;\n original_snippet: string;\n is_unfavorable?: boolean; // For defendant perspective\n}\n\nexport interface LSEResult {\n case_id: string;\n legal_tags: string[];\n dispute_focus: string;\n jurisdiction_level: string;\n cleaned_text: string;\n perspective: 'plaintiff' | 'defendant';\n summary: {\n subject: string;\n timeline: string;\n claims: string;\n evidence: string;\n };\n granular_facts: FactItem[];\n diagnosis: {\n missing_elements: string[];\n suggestions: string[];\n };\n evaluation: {\n legal_accuracy: number;\n fact_completeness: number;\n diagnosis_depth: number;\n traceability: number;\n professionalism: number;\n total_score: number;\n };\n similar_cases: {\n id: string;\n title: string;\n court: string;\n similarity: number;\n key_points: string;\n differences: string;\n radar_data: {\n facts: number;\n evidence: number;\n law: number;\n procedure: number;\n logic: number;\n };\n }[];\n}\n\nexport async function processLegalCase(rawText: string, perspective: 'plaintiff' | 'defendant' = 'plaintiff'): Promise<LSEResult> {\n try {\n const apiKey = process.env.AIHUBMIX_API_KEY || \"sk-njWgt3c0AByZVXwX04CaA5731fE7426c89377dA75b5dA892\";\n const baseUrl = process.env.AIHUBMIX_BASE_URL || 'https://api.aihubmix.com/v1';\n\n if (!apiKey) {\n throw new Error(\"AIHUBMIX_API_KEY is not set in environment variables.\");\n }\n\n const systemPrompt = `你是一个专业的法律案情结构化引擎 (LSE)。\n你的任务是将非标的法律语料(如谈话记录、微信记录)转化为结构化的法律语言。\n\n当前视角:${perspective === 'plaintiff' ? '原告视角' : '被告视角'}。\n\n请严格遵循以下步骤:\n1. 数据清洗:移除语气词、废话,将大白话映射为标准法律术语。\n2. 案情理解:剥离情绪,提取核心事实。\n3. 颗粒度拆解:将案情拆解为具体的动作、转账、沟通瞬间等细颗粒度事实。\n4. 被告预警:如果是被告视角,自动生成抗辩逻辑,并标注对被告不利的证据。\n5. 要件诊断:扫描缺失的法律要件。\n6. 类案模拟:基于案情生成3个模拟的类案,包含五维雷达图数据。\n\n请严格返回以下格式的JSON对象(不要包含任何其他文字或Markdown代码块标记):\n{\n \"case_id\": \"LSE-2024-XXXX\",\n \"legal_tags\": [\"标签1\", \"标签2\"],\n \"dispute_focus\": \"争议焦点描述\",\n \"jurisdiction_level\": \"管辖建议\",\n \"cleaned_text\": \"清洗后的文本\",\n \"perspective\": \"${perspective}\",\n \"summary\": {\n \"subject\": \"主体关系\",\n \"timeline\": \"时间线\",\n \"claims\": \"核心诉求\",\n \"evidence\": \"关键证据\"\n },\n \"granular_facts\": [\n {\n \"id\": \"1\",\n \"text\": \"事实描述\",\n \"original_snippet\": \"原始片段\",\n \"is_unfavorable\": false\n }\n ],\n \"diagnosis\": {\n \"missing_elements\": [\"缺失要件1\"],\n \"suggestions\": [\"补强建议1\"]\n },\n \"evaluation\": {\n \"legal_accuracy\": 90,\n \"fact_completeness\": 85,\n \"diagnosis_depth\": 80,\n \"traceability\": 95,\n \"professionalism\": 90,\n \"total_score\": 88\n },\n \"similar_cases\": [\n {\n \"id\": \"CASE-001\",\n \"title\": \"类似案例标题\",\n \"court\": \"某某法院\",\n \"similarity\": 0.85,\n \"key_points\": \"裁判要旨\",\n \"differences\": \"案情差异\",\n \"radar_data\": {\n \"facts\": 80,\n \"evidence\": 70,\n \"law\": 90,\n \"procedure\": 85,\n \"logic\": 80\n }\n }\n ]\n}`;\n\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`\n },\n body: JSON.stringify({\n model: 'gpt-4o-mini',\n response_format: { type: \"json_object\" },\n temperature: 0.7,\n messages: [\n { role: \"system\", content: systemPrompt },\n { role: \"user\", content: `请处理以下案情:\\n\\n${rawText}` }\n ]\n })\n });\n\n if (!response.ok) {\n const errorData = await response.text();\n console.error(\"AIHubMix API Error:\", errorData);\n throw new Error(`AIHubMix API Error: ${response.status}`);\n }\n\n const data = await response.json();\n const content = data.choices[0].message.content;\n \n return JSON.parse(content);\n } catch (error) {\n console.error(\"Error analyzing request:\", error);\n throw new Error(error instanceof Error ? error.message : \"Failed to analyze request.\");\n }\n}\n"}}}} |