ติดตั้ง CORETH Context Processor

คู่มือจากเครื่องใหม่จนพร้อมรับไฟล์ สรุปด้วย AI บันทึกลง db-data สร้าง context ใน db-context และตรวจงานผ่าน Admin Monitor

ระบบทำงานอย่างไร

File Ingestion / Drive / S3 / DB / RESTตรวจขอบเขตและรุ่นไฟล์อ่านและสรุปdb-data+db-contextAI Tool

ครั้งแรกใช้ 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

1
สร้างไฟล์ environment
cd /path/to/ai-coreth-context-processor
cp .env.example .env
2
แก้ค่าอย่างน้อย
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
3
ตรวจและเริ่มระบบ
docker compose config --quiet
docker compose up --build -d
docker compose ps

คำสั่งนี้เริ่ม PostgreSQL, migration, API, worker และ gateway โดยยังไม่เปิด Admin Monitor

4
ตรวจ migration และ health
docker compose run --rm migrate
curl -i http://localhost:8080/health/live

IAM ที่ instance/container ต้องมี

ใช้ทำอะไรสิทธิ์ขั้นต่ำ
อ่าน secretsecretsmanager:GetSecretValue เฉพาะ ARN ที่ใช้
อ่านไฟล์ S3s3: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 และไฟล์ใหม่

1
สแกนครั้งแรก
docker compose exec api python manage.py build_initial_context \
  --customer-id <CUSTOMER_UUID>

สแกนเฉพาะ allowlist ของ source ล่าสุด และบันทึกทั้ง db-context กับ db-data ตาม policy

2
รับไฟล์ใหม่ต่อเนื่อง

service worker ทำ polling/process/reconciliation อัตโนมัติ สำหรับ FILE_READY จะประมวลผล durable event ที่ File Ingestion ส่งเข้ามา ไม่ต้องสแกน bucket ทั้งก้อนทุกครั้ง

docker compose logs -f worker
3
ทดสอบรอบเดียวเมื่อจำเป็น
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 เมื่อต้องการ

1
สร้าง root user
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

2
เปิดเฉพาะหน้า Admin
docker compose --profile admin up -d admin

เปิด http://127.0.0.1:8081/admin/login หน้าเว็บ bind เฉพาะ loopback โดย default

3
ปิดหน้า Admin
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

ตรวจว่าพร้อมใช้งาน

1
ดูสถานะ customer
docker compose exec api python manage.py context_status \
  --customer-id <CUSTOMER_UUID>
2
รัน Doctor
docker compose exec api python manage.py context_doctor \
  --customer-id <CUSTOMER_UUID>
3
ตรวจ endpoint
curl -i http://localhost:8080/health/live
curl -i http://localhost:8080/health/ready

live=200 แปลว่า process ยังทำงาน ส่วน ready=200 จึงแปลว่าผ่านเงื่อนไขพร้อมใช้งาน

Checklist ก่อนส่งมอบ