ระบบทำงานอย่างไร
ครั้งแรกใช้ build_initial_context สแกนรายการในขอบเขตที่อนุญาต หลังจากนั้น worker รับไฟล์ใหม่จาก event หรือ polling และมี reconciliation เป็นระยะเพื่อจับรายการที่ตกหล่น การประมวลผลซ้ำใช้รหัสไฟล์/รุ่น/checksum ป้องกันข้อมูลซ้ำ
FILE_READY จาก non-ai-coreth-file-ingestion เป็นทางแนะนำ: ส่งตำแหน่ง S3 พร้อม VersionId หรือ ETag และ SHA-256 ระบบจะอ่านไฟล์ exact version โดยไม่อ่านฐานข้อมูลของ File Ingestion โดยตรง
สิ่งที่ต้องเตรียม
เครื่องหมายถูกบันทึกเฉพาะใน browser นี้ด้วย localStorage
ติดตั้งด้วย Docker Compose
cd /path/to/ai-coreth-context-processor cp .env.example .env
DJANGO_SECRET_KEY=<ค่าสุ่มยาวสำหรับ production> POSTGRES_PASSWORD=<รหัสผ่านฐานข้อมูล> CORETH_DEPLOYMENT_CUSTOMER_ID=<CUSTOMER_UUID> CORETH_ENVIRONMENT=production AWS_REGION=ap-southeast-1 # ใช้ reference ใน production; ห้ามใส่ key จริงใน Git OPENAI_API_KEY_REF=aws-secretsmanager://coreth/production/openai
docker compose config --quiet docker compose up --build -d docker compose ps
คำสั่งนี้เริ่ม PostgreSQL, migration, API, worker และ gateway โดยยังไม่เปิด Admin Monitor
docker compose run --rm migrate curl -i http://localhost:8080/health/live
IAM ที่ instance/container ต้องมี
| ใช้ทำอะไร | สิทธิ์ขั้นต่ำ |
|---|---|
| อ่าน secret | secretsmanager:GetSecretValue เฉพาะ ARN ที่ใช้ |
| อ่านไฟล์ S3 | s3:GetObject, s3:GetObjectVersion, s3:ListBucket เฉพาะ bucket/prefix |
| Admin อ่าน log (ถ้าเปิด) | logs:FilterLogEvents เฉพาะ log group |
IAM ที่กว้างกว่าไม่ได้ทำให้ source อ่านได้กว้างขึ้น ระบบยังบังคับ allowlist ใน source configuration อีกชั้น
เพิ่ม source ด้วย command
ทุกครั้งที่แก้ config จะสร้าง version ใหม่ เก็บ version เก่าไว้ตรวจสอบย้อนหลัง
A. FILE_READY จาก File Ingestion แนะนำ
docker compose exec api python manage.py configure_source \
--customer-id <CUSTOMER_UUID> \
--source-id file-ingestion \
--source-type FILE_READY \
--approved-scope-json '{"buckets":["<RAW_BUCKET>"]}' \
--settings-json '{"semantic_processing":{"mode":"AI_OPTIONAL","provider":"openai","model":"gpt-4.1-mini","data_classification":"INTERNAL","allowed_data_classifications":["INTERNAL"],"allow_external_model":true,"redaction_required":true},"structured_data":{"enabled":true,"semantic_domain":"documents","dataset_key":"file_summaries","unstructured_summary":{"enabled":true}}}'
ตั้ง public key ของ trusted issuer ใน CORETH_SERVICE_JWT_PUBLIC_KEYS_JSON แล้วให้สิทธิ์ service ของ File Ingestion ก่อน:
docker compose exec api python manage.py manage_tool_grant configure \ --customer-id <CUSTOMER_UUID> --environment production \ --tool-type file-ingestion --tool-instance-id production \ --allowed-scopes-json '["source:write"]' \ --allowed-actions-json '["source.file_ready.write"]' \ --allowed-project-ids-json '[]' --allowed-entity-types-json '[]' \ --allowed-predicate-prefixes-json '[]' --allowed-relationship-prefixes-json '[]' \ --max-entities 1 --max-facts 1 --max-relationships 1 --max-evidence-refs 1
File Ingestion ส่ง POST /api/v1/ingestion/file-ready ด้วย service JWT อายุสั้นที่มี action source.file_ready.write และ scope source:write พร้อม source_gid, event/file version ID, bucket/key, VersionId หรือ ETag และ SHA-256 checksum
ตัวอย่าง payload
{
"source_gid": "<SOURCE_GID>",
"event_id": "file-ready:<FILE_VERSION_ID>",
"file_version_id": "<FILE_VERSION_ID>",
"object_reference": {
"bucket": "<RAW_BUCKET>", "key": "raw-ready/pdf/report.pdf",
"version_id": "<S3_VERSION_ID>", "content_type": "application/pdf"
},
"checksum": "<SHA256_HEX>"
}B. Google Drive
docker compose exec api python manage.py configure_source \
--customer-id <CUSTOMER_UUID> --source-id drive-main \
--source-type GOOGLE_DRIVE \
--approved-scope-json '{"drive_ids":["<DRIVE_ID>"],"folder_ids":["<FOLDER_ID>"]}' \
--settings-json '{"semantic_processing":{"mode":"AI_OPTIONAL"}}' \
--secret-ref aws-secretsmanager://coreth/production/google-drive
เปิด Google Drive API และให้ service account มีสิทธิ์ Viewer เฉพาะ Shared Drive/folder ที่ระบุ
C. Direct S3
docker compose exec api python manage.py configure_source \
--customer-id <CUSTOMER_UUID> --source-id s3-direct \
--source-type S3 \
--approved-scope-json '{"buckets":["<BUCKET>"],"prefixes":{"<BUCKET>":["incoming/"]},"use_version_id":true}' \
--settings-json '{"semantic_processing":{"mode":"AI_OPTIONAL"}}'
D. PostgreSQL / MySQL / MariaDB / REST
รองรับผ่าน configure_source เช่นกัน ฐานข้อมูลต้องระบุ table และ primary key ทุกตาราง ส่วน REST ต้องเป็น HTTPS และระบุ path allowlist ดูรายละเอียดใน คู่มือ connectors
Local folder ยังไม่รองรับโดยตรง เพราะ container ไม่ควรสแกน filesystem แบบไม่กำหนดขอบเขต ให้ upload เข้า S3 แล้วใช้ FILE_READY หรือ Direct S3
Initial scan และไฟล์ใหม่
docker compose exec api python manage.py build_initial_context \ --customer-id <CUSTOMER_UUID>
สแกนเฉพาะ allowlist ของ source ล่าสุด และบันทึกทั้ง db-context กับ db-data ตาม policy
service worker ทำ polling/process/reconciliation อัตโนมัติ สำหรับ FILE_READY จะประมวลผล durable event ที่ File Ingestion ส่งเข้ามา ไม่ต้องสแกน bucket ทั้งก้อนทุกครั้ง
docker compose logs -f worker
docker compose exec api python manage.py sync_sources \ --customer-id <CUSTOMER_UUID> --poll --process-pending --reconcile
ไฟล์ไม่มีตาราง เช่น PDF, DOCX และรูปภาพ จะลง db-data เป็น summary record ก็ต่อเมื่อเปิด structured_data.unstructured_summary.enabled และ semantic mode เป็น AI_OPTIONAL หรือ AI_REQUIRED
เปิด Admin Monitor เมื่อต้องการ
docker compose run --rm --profile admin admin \ python manage.py bootstrap_root_user \ --customer-id <CUSTOMER_UUID> \ --environment production \ --username root \ --email root@coreth.co
ระบบถามรหัสผ่านสองครั้งและบังคับ password policy
docker compose --profile admin up -d admin
เปิด http://127.0.0.1:8081/admin/login หน้าเว็บ bind เฉพาะ loopback โดย default
docker compose --profile admin stop admin
API และ worker หลักยังทำงานต่อ
สิทธิ์ผู้ใช้
| Role | ทำอะไรได้ |
|---|---|
| Viewer | ดูสถานะ source, ไฟล์, run, event และ activity |
| Operator | สิทธิ์ Viewer และรองรับงานปฏิบัติการที่อนุญาตในอนาคต |
| Admin | สร้างผู้ใช้ เปลี่ยน role และเปิด/ปิด membership ใน customer/environment ปัจจุบัน |
CloudWatch log (ไม่บังคับ)
CORETH_ADMIN_LOG_GROUP=/coreth/context-processor CORETH_ADMIN_LOG_STREAM_PREFIX=worker
หน้า Activity แสดงเฉพาะ structured log ที่มี customer_id ตรง scope และไม่แสดง raw message/secret
ตรวจว่าพร้อมใช้งาน
docker compose exec api python manage.py context_status \ --customer-id <CUSTOMER_UUID>
docker compose exec api python manage.py context_doctor \ --customer-id <CUSTOMER_UUID>
curl -i http://localhost:8080/health/live curl -i http://localhost:8080/health/ready
live=200 แปลว่า process ยังทำงาน ส่วน ready=200 จึงแปลว่าผ่านเงื่อนไขพร้อมใช้งาน