emas.ai
DecisionCore
oleh TechnoNet Sdn Bhd
Panduan Pelaksanaan · REST API · Pelayan MCP

Daripada sifar kepada penjelasan pertama anda
dalam masa kurang sejam.

DecisionCore menyediakan REST API standard dan pelayan MCP. Mana-mana sistem yang boleh membuat permintaan HTTP POST boleh berintegrasi. Panduan ini merangkumi pengesahan, kedua-dua titik akhir API, contoh Python dan curl, serta corak integrasi MCP.

Mula pantas

Tiga langkah ke arah
penjelasan pertama anda.

Dapatkan kunci API percuma, hantar POST ujian, sahkan respons. Saluran penuh selesai dalam beberapa saat.

Peringkat percuma: 3 laporan penjelasan penuh sebulan. Tiada kad kredit. Saluran penaakulan DeepSeek R1 yang sama seperti peringkat berbayar — hanya had jumlah yang berbeza. Dapatkan kunci anda di /portal.
Langkah 1 — Dapatkan kunci API anda
# Register at /portal and copy your API key.
# Keys are prefixed with "dc-".

export DC_API_KEY="dc-your-key-here"
Langkah 2 — Hantar penjelasan ujian (curl)
curl -s -X POST https://decisioncore.emas.ai/explain \
  -H "Authorization: Bearer $DC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "decision": "Loan application rejected",
    "subject_description": "Applicant DSR 62%, policy ceiling 60%",
    "sector": "financial",
    "tenant_id": "my-org"
  }'
Langkah 3 — Respons
{
  "audit_id": "ADMT-EXP-8a2f1c3d",
  "decision": "Loan application rejected",
  "explanation": "The loan application was rejected because the applicant's
Debt Service Ratio (DSR) of 62% exceeds the institution's affordability
limit of 60% (Credit Policy §3.1). The applicant may ask for a
human review of this automated decision...",
  "regulations_cited": [
    "Credit Policy §3.1 — Affordability limit (DSR)",
    "Credit Policy §5 — Human review on request"
  ],
  "reasoning_chain": "THOUGHT: DSR 62% exceeds the 60% limit. Matched Credit Policy §3.1...",
  "report_url": "/explain/report/ADMT-EXP-8a2f1c3d",
  "results_used": 1,
  "results_remaining": 2
}
Pengesahan

Pengesahan
token Bearer.

Semua permintaan API memerlukan token Bearer dalam pengepala Authorization. Token dikeluarkan semasa pendaftaran dan tidak tamat tempoh — tukar token daripada papan pemuka.

Format pengepala
Authorization: Bearer dc-your-api-key-here
Awalan kunciSkopPotongan
dc-Akses API penuh — /explain, /explain/report1 keputusan bagi setiap panggilan /explain
401 Unauthorized — kunci tidak sah atau tiada. 402 Payment Required — baki token sifar. Tambah nilai di /portal tanpa menukar kunci API anda.
Titik akhir

POST /explain

Menjana rekod penjelasan JSON. Memulangkan teks penjelasan, petikan peraturan, rantaian penaakulan DeepSeek R1 dan URL bagi laporan PDF. Menolak 1 keputusan (RM5 pada pelan Starter).

POST https://decisioncore.emas.ai/explain
MedanJenisWajibPerihalan
decisionstringYaHasil keputusan yang hendak dijelaskan. Contohnya "Pinjaman ditolak", "Permohonan disenarai pendek", "Percubaan akademik".
subject_descriptionstringYaKonteks tentang subjek dan faktor yang mendorong keputusan. Contohnya "DSR 62%, had institusi 60%". Maksimum 2,000 aksara.
sectorstringTidakPetunjuk untuk pemilihan korpus peraturan. Salah satu daripada: financial, hr, academic. Lalai kepada korpus umum.
tenant_idstringTidakPengecam organisasi anda — menentukan skop log audit. Lalai kepada slug akaun anda.
languagestringTidakBahasa output bagi teks penjelasan. en (lalai) atau ms (Bahasa Malaysia).
Skema respons
{
  "audit_id":         "ADMT-EXP-{uuid}",       // unique record ID
  "decision":         "string",                // echoed from request
  "explanation":      "string",                // plain-language explanation
  "regulations_cited": ["string", ...],        // matched provisions
  "reasoning_chain":  "string",                // DeepSeek R1 thought trace
  "report_url":       "/explain/report/{id}", // PDF download URL
  "results_used":      1,
  "results_remaining": integer
}
Titik akhir

POST /explain/report

Menjana dan memulangkan laporan penjelasan PDF A4 rasmi. Badan permintaan sama seperti /explain. Memulangkan application/pdf. TIDAK menolak keputusan tambahan — PDF sudah termasuk dalam kos panggilan /explain.

POST https://decisioncore.emas.ai/explain/report
Muat turun PDF melalui curl
curl -s -X POST https://decisioncore.emas.ai/explain/report \
  -H "Authorization: Bearer $DC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "decision": "Loan application rejected",
    "subject_description": "Applicant DSR 62%, policy ceiling 60%",
    "sector": "financial",
    "tenant_id": "my-org"
  }' \
  --output dc-explanation.pdf
PDF mengandungi: sepanduk keputusan, konteks subjek, petikan peraturan (dengan nombor seksyen), rantaian penaakulan DeepSeek R1, ID Audit, cap masa, dan notis dalam bahasa mudah tentang cara subjek boleh meminta semakan.

Anda juga boleh mendapatkan semula PDF yang dijana sebelum ini mengikut ID Audit menggunakan URL yang dikembalikan dalam respons /explain :

Dapatkan semula mengikut ID Audit
curl -s https://decisioncore.emas.ai/explain/report/ADMT-EXP-8a2f1c3d \
  -H "Authorization: Bearer $DC_API_KEY" \
  --output ADMT-EXP-8a2f1c3d.pdf
Contoh bahasa

Integrasi Python

Menggunakan pustaka requests yang standard. Serasi dengan mana-mana persekitaran Python 3.8+.

Python — penjelasan + muat turun PDF
import requests
import os

DC_API_KEY = os.environ["DC_API_KEY"]
BASE_URL   = "https://decisioncore.emas.ai"

HEADERS = {
    "Authorization": f"Bearer {DC_API_KEY}",
    "Content-Type":  "application/json",
}

def explain(decision: str, subject_description: str,
            sector: str = "financial", tenant_id: str = "my-org") -> dict:
    r = requests.post(
        f"{BASE_URL}/explain",
        json={
            "decision":            decision,
            "subject_description": subject_description,
            "sector":             sector,
            "tenant_id":          tenant_id,
        },
        headers=HEADERS,
        timeout=60,
    )
    r.raise_for_status()
    return r.json()


def download_report(audit_id: str, output_path: str) -> None:
    r = requests.get(
        f"{BASE_URL}/explain/report/{audit_id}",
        headers=HEADERS,
        timeout=60,
    )
    r.raise_for_status()
    with open(output_path, "wb") as f:
        f.write(r.content)


# Example: loan rejection
result = explain(
    decision="Loan application rejected",
    subject_description="DSR 62%, institution limit 60%",
    sector="financial",
)

print(f"Audit ID:    {result['audit_id']}")
print(f"Explanation: {result['explanation'][:200]}...")
print(f"Regulations: {result['regulations_cited']}")

# Download the formal PDF
download_report(result["audit_id"], "dc-explanation.pdf")
print("PDF saved to dc-explanation.pdf")
Contoh bahasa

Integrasi Node.js

Menggunakan API fetch asli (Node 18+). Tiada pakej tambahan diperlukan.

Node.js — penjelasan + simpan PDF
const fs = require('fs');

const DC_API_KEY = process.env.DC_API_KEY;
const BASE_URL   = 'https://decisioncore.emas.ai';

async function explain(decision, subjectDescription, sector = 'financial') {
  const res = await fetch(`${BASE_URL}/explain`, {
    method:  'POST',
    headers: {
      'Authorization': `Bearer ${DC_API_KEY}`,
      'Content-Type':  'application/json',
    },
    body: JSON.stringify({ decision, subject_description: subjectDescription, sector }),
  });
  if (!res.ok) throw new Error(`API error ${res.status}: ${await res.text()}`);
  return res.json();
}

async function downloadReport(auditId, outputPath) {
  const res = await fetch(`${BASE_URL}/explain/report/${auditId}`, {
    headers: { 'Authorization': `Bearer ${DC_API_KEY}` },
  });
  if (!res.ok) throw new Error(`Report error ${res.status}`);
  const buffer = Buffer.from(await res.arrayBuffer());
  fs.writeFileSync(outputPath, buffer);
}

// Example usage
explain('Candidate rejected', 'ATS score 58/100, threshold 65', 'hr')
  .then(async result => {
    console.log('Audit ID:', result.audit_id);
    console.log('Regulations:', result.regulations_cited);
    await downloadReport(result.audit_id, 'dc-explanation.pdf');
    console.log('PDF saved.');
  })
  .catch(console.error);
Integrasi MCP

Pelayan MCP
untuk Claude Desktop.

DecisionCore disediakan sebagai pelayan MCP — boleh dipanggil secara asli daripada Claude dan mana-mana klien yang serasi dengan MCP. Tiga alat tersedia: request_explanation, check_consent, log_decision.

claude_desktop_config.json
{
  "mcpServers": {
    "decisioncore": {
      "command": "/path/to/venv/bin/python3",
      "args": ["/path/to/decisioncore/mcp_server.py"],
      "env": {
        "DC_API_KEY":  "dc-your-key-here",
        "DC_BASE_URL": "https://decisioncore.emas.ai"
      }
    }
  }
}
Alat MCPInputPerihalan
request_explanationdecision, subject_description, sectorMenjana rekod penjelasan JSON dan memulangkan teks penjelasan + ID Audit. Menolak 1 keputusan.
check_consentuser_id, purpose_id, tenant_idMemulangkan status persetujuan semasa bagi gabungan pengguna + tujuan tertentu.
log_decisiondecision, subject_id, outcome, tenant_idMenulis rekod keputusan ke Log Audit Berdaulat tanpa menjana penjelasan.
Pada nod berdaulat Enterprise, pelayan MCP beroperasi sebagai subproses stdio setempat — tanpa pendedahan rangkaian — dan klien MCP berhubung dengannya tanpa data keluar dari mesin anda.
FAQ

Mengapa
DecisionCore?

Mengapa tidak meminta LLM sahaja menjelaskan keputusan itu?

PerkaraMemanggil LLM secara terusDecisionCore
Kedaulatan dataData subjek anda dihantar ke awan AI luarInferens beroperasi pada pelayan TechnoNet sendiri di Kuala Lumpur, atau di premis dengan Enterprise
Jejak auditTiada rekod; penjanaan semula menghasilkan jawapan yang berbezaID Audit dan cap jari rekod bagi setiap penjelasan — boleh disahkan
Format peraturanTeks bebas — tiada petikan atau notis hak untuk disemak oleh juruaudit atau pengawal seliaOutput berstruktur: petikan peraturan, nombor seksyen, notis hak
KonsistensiTidak deterministik — input yang sama, output berbeza setiap kaliRantaian penaakulan deterministik — input yang sama menghasilkan rekod berstruktur yang sama
Laporan PDFAnda perlu membinanya sendiriPDF A4 rasmi disertakan — ID Audit, cap masa, hak subjek, petikan peraturan
Kesediaan tadbir urus AIAnda mentafsir peraturan sendiriKorpus telah dipetakan kepada prinsip AIGE, PDPA, FSA, Akta Kerja dan peraturan akademik; Rang Undang-undang Tadbir Urus AI yang dicadangkan dipantau sepanjang perkembangannya
Rupa respons /explain sebenar
{
  "audit_id":          "ADMT-EXP-8a2f1c3d",
  "decision":          "Loan application rejected",
  "explanation":       "The application was declined because the applicant's Debt Service Ratio (DSR) of 62% exceeds the institution's affordability limit of 60% (Credit Policy §3.1). At this ratio, more than 60% of monthly income would go to debt repayments. The applicant may ask for a human review of this automated decision.",
  "regulations_cited": [
    "Credit Policy §3.1 — Affordability limit (DSR)",
    "Credit Policy §5 — Human review on request",
    "AIGE principles — Transparency"
  ],
  "reasoning_chain":   "THOUGHT: DSR is 62%. The institution's limit is 60%. Exceeded by 2 percentage points. Credit Policy §3.1 applies. CONCLUSION: reject — affordability limit exceeded.",
  "report_url":        "/explain/report/ADMT-EXP-8a2f1c3d",
  "results_used":      1,
  "results_remaining": 9
}
ADMT-EXP-{uuid} ialah ID Audit DecisionCore. Jejak audit anda merujuk ID ini — simpan ID ini dalam rekod sistem anda bersama keputusan berkenaan.
Rujukan ralat

Kod
status HTTP.

StatusMaksudPenyelesaian
400Bad Request — medan wajib tiada atau input tidak sahPastikan decision dan subject_description wujud dan tidak kosong.
401Unauthorised — kunci API tiada atau tidak sahSertakan pengepala Authorization: Bearer dc-… . Sahkan kunci dalam papan pemuka.
402Payment Required — baki keputusan sifarTambah nilai di /portal. Tiada perubahan pelan diperlukan.
422Unprocessable Entity — kegagalan pengesahan inputSemak jenis medan. sector mesti salah satu daripada: financial, hr, academic.
429Too Many Requests — had kadar dilampauiHad kadar: 60 permintaan/minit bagi setiap kunci API. Tambahkan tundaan eksponen.
500Internal Server Error — kegagalan saluran penaakulanCuba semula sekali. Jika berterusan, hubungi [email protected] dengan menyertakan badan permintaan.
503Service Unavailable — pelayan inferens sedang dimulakanPermulaan sejuk pertama boleh mengambil masa 30–60 saat. Cuba semula selepas 10 saat.
Sedia untuk
membina?
Kunci API percuma dalam masa kurang seminit. 3 penjelasan penuh untuk bermula. Tiada kad kredit.
Dapatkan kunci API percuma anda → Tanya soalan integrasi →
WhatsApp kami