690606:1354 ADR-035-135 #03.1 [skip CI]
CI / CD Pipeline / build (push) Has been skipped
CI / CD Pipeline / deploy (push) Has been skipped

This commit is contained in:
2026-06-06 13:54:36 +07:00
parent 866fea7946
commit e3e0de66e9
6 changed files with 416 additions and 2 deletions
@@ -0,0 +1,157 @@
# ทดสอบ typhoon2.5-np-dms โดยใช้ prompt template จริง + OCR text จาก test.md + master data context จาก DB
# รันด้วย: powershell -ExecutionPolicy Bypass -File test_llm.ps1
$ErrorActionPreference = "Stop"
$OLLAMA_URL = "http://192.168.10.100:11434"
$MODEL = "typhoon2.5-np-dms:latest"
$OCR_TEXT_FILE = Join-Path $PSScriptRoot "test.md"
# --- Prompt Template (ดึงจาก DB: ai_prompts version=2, prompt_type=ocr_extraction) ---
$TEMPLATE = @"
(Document Intelligence Engine)
OCR Laem Chabang Port Phase 3 JSON object
OCR :
{{ocr_text}}
(Master Data Context):
{{master_data_context}}
:
1. OCR Master Data Context
2. (project) UUID (projectPublicId)
3. (correspondence type) (correspondenceTypeCode) RFA, Transmittal
4. (discipline) (disciplineCode) GEN, STR
5. (originator) availableOrganizations UUID (originatorOrganizationPublicId)
6. (recipients) Array UUID (organizationPublicId) (recipientType: "TO" "CC")
7. (subject)
8. (documentDate) YYYY-MM-DD
9. (tags) Tags ( availableTags )
10. (summary) 4-5
11. confidence: ( 0.0 1.0)
JSON Object markdown
JSON :
{
"projectPublicId": "string null",
"correspondenceTypeCode": "string null",
"disciplineCode": "string null",
"originatorOrganizationPublicId": "string null",
"recipients": [
{
"organizationPublicId": "string",
"recipientType": "TO CC"
}
],
"subject": "string null",
"documentDate": "string:YYYY-MM-DD null",
"tags": ["string"],
"summary": "string null",
"confidence": 0.95
}
"@
# --- Master Data Context (ดึงจาก DB จริง) ---
$MASTER_DATA = @{
availableProjects = @(
@{code = "LCBP3"; uuid = "c957f1e3-538b-11f1-8c7d-0242ac1d0007"; name = "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)"}
@{code = "LCBP3-C1"; uuid = "c957f44b-538b-11f1-8c7d-0242ac1d0007"; name = "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1) งานก่อสร้างงานทางทะเล"}
@{code = "LCBP3-C2"; uuid = "c957f523-538b-11f1-8c7d-0242ac1d0007"; name = "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 2) งานก่อสร้างอาคาร ท่าเทียบเรือ ระบบถนน และระบบสาธารณูปโภค"}
@{code = "LCBP3-C3"; uuid = "c957f57c-538b-11f1-8c7d-0242ac1d0007"; name = "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 3) งานก่อสร้าง"}
@{code = "LCBP3-C4"; uuid = "c957f5cc-538b-11f1-8c7d-0242ac1d0007"; name = "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 4) งานก่อสร้าง"}
)
availableOrganizations = @(
@{code = "กทท."; uuid = "c94cb0b4-538b-11f1-8c7d-0242ac1d0007"; name = "การท่าเรือแห่งประเทศไทย"}
@{code = "สคฉ.3"; uuid = "c94cb3f6-538b-11f1-8c7d-0242ac1d0007"; name = "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3"}
@{code = "สคฉ.3-01"; uuid = "c94cb532-538b-11f1-8c7d-0242ac1d0007"; name = "ตรวจรับพัสดุ ที่ปรึกษาควบคุมงาน"}
@{code = "สคฉ.3-02"; uuid = "c94cb5ab-538b-11f1-8c7d-0242ac1d0007"; name = "ตรวจรับพัสดุ งานทางทะเล"}
@{code = "สคฉ.3-03"; uuid = "c94cb616-538b-11f1-8c7d-0242ac1d0007"; name = "ตรวจรับพัสดุ อาคารและระบบสาธารณูปโภค"}
@{code = "คคง."; uuid = "c94cb8ac-538b-11f1-8c7d-0242ac1d0007"; name = "Construction Supervision Ltd."}
@{code = "ผรม.1"; uuid = "c94cb907-538b-11f1-8c7d-0242ac1d0007"; name = "Contractor งานทางทะเล"}
@{code = "ผรม.2"; uuid = "c94cb95e-538b-11f1-8c7d-0242ac1d0007"; name = "Contractor งานก่อสร้าง"}
@{code = "ผรม.3"; uuid = "c94cb9b3-538b-11f1-8c7d-0242ac1d0007"; name = "Contractor งานก่อสร้าง ส่วนที่ 3"}
@{code = "ผรม.4"; uuid = "c94cba0c-538b-11f1-8c7d-0242ac1d0007"; name = "Contractor งานก่อสร้าง ส่วนที่ 4"}
)
availableDisciplines = @(
@{code = "GEN"; name = "งานบริหารโครงการ"}
@{code = "COD"; name = "สัญญาและข้อโต้แย้ง"}
@{code = "QSB"; name = "สำรวจปริมาณและควบคุมงบประมาณ"}
@{code = "PPG"; name = "บริหารแผนและความก้าวหน้า"}
@{code = "BST"; name = "งานโครงสร้างอาคาร"}
@{code = "UTL"; name = "งานระบบสาธารณูปโภค"}
@{code = "EPW"; name = "งานระบบไฟฟ้า"}
@{code = "SRV"; name = "งานสำรวจ"}
@{code = "ODC"; name = "สำนักงาน-ควบคุมเอกสาร"}
)
availableCorrespondenceTypes = @(
@{code = "RFA"; name = "Request for Approval"}
@{code = "RFI"; name = "Request for Information"}
@{code = "TRANSMITTAL"; name = "Transmittal"}
@{code = "LETTER"; name = "Letter"}
@{code = "MEMO"; name = "Memorandum"}
@{code = "MOM"; name = "Minutes of Meeting"}
@{code = "NOTICE"; name = "Notice"}
@{code = "OTHER"; name = "Other"}
)
availableTags = @()
}
function Check-Models {
try {
$resp = Invoke-RestMethod -Uri "$OLLAMA_URL/api/ps" -Method Get -TimeoutSec 5
if ($resp.models) {
Write-Host " Models in VRAM: $($resp.models.name -join ', ')"
} else {
Write-Host " VRAM: ไม่มี model โหลดอยู่ (ว่าง)"
}
} catch {
Write-Host " Error checking models: $_"
}
}
Write-Host "=" * 60
Write-Host "🔍 ตรวจสอบ VRAM ก่อนรัน..."
Check-Models
$ocrText = Get-Content $OCR_TEXT_FILE -Raw -Encoding UTF8
Write-Host "`n📄 OCR text: $($ocrText.Length) chars"
$masterDataJson = $MASTER_DATA | ConvertTo-Json -Depth 10 -Compress:$false
$prompt = $TEMPLATE -replace "{{ocr_text}}", $ocrText -replace "{{master_data_context}}", $masterDataJson
Write-Host "📝 Total prompt: $($prompt.Length) chars"
Write-Host "=" * 60
Write-Host "⏳ กำลังส่งไปยัง Ollama..."
$body = @{
model = $MODEL
prompt = $prompt
stream = $false
} | ConvertTo-Json -Depth 10
$start = Get-Date
try {
$resp = Invoke-RestMethod -Uri "$OLLAMA_URL/api/generate" -Method Post -Body $body -ContentType "application/json" -TimeoutSec 180
$elapsed = (Get-Date - $start).TotalSeconds
$rawResponse = $resp.response
Write-Host "`n✅ Response ใน $([math]::Round($elapsed, 1))s"
Write-Host "-" * 60
Write-Host $rawResponse
Write-Host "-" * 60
$cleaned = $rawResponse -replace "```json", "" -replace "```", "" -replace "^\s+", "" -replace "\s+$", ""
try {
$parsed = $cleaned | ConvertFrom-Json
Write-Host "`n JSON parse สำเร็จ!"
$parsed | ConvertTo-Json -Depth 10
} catch {
Write-Host "`n JSON parse ล้มเหลว: $_"
Write-Host " Raw (200 chars): $($rawResponse.Substring(0, [Math]::Min(200, $rawResponse.Length)))"
}
} catch {
Write-Host "`n Error: $_"
}
Write-Host "`n🔍 ตรวจสอบ VRAM หลังรัน..."
Check-Models