Claude Architect · บทเรียน

เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง

ยึดโยงแต่ละระดับความรุนแรงด้วยตัวอย่างโค้ด

บทเรียน 3 จาก 413 ขั้นตอน

เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง เป็นบทเรียน Claude Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Claude Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Claude Architect มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดระดับความรุนแรงจึงต้องมีเกณฑ์

เมื่อคุณขอให้ Claude ตรวจสอบโค้ด คำสั่งที่อ่อนแอที่สุดที่ให้ได้คือคำสั่งคลุมเครือ เช่น be more precise หรือ only flag important issues โมเดลไม่มีคำจำกัดความร่วมกันของคำว่า "สำคัญ" ดังนั้นเกณฑ์ของโมเดลจึงเปลี่ยนไปในแต่ละไฟล์

หลักการของข้อสอบนั้นตรงไปตรงมา: เกณฑ์ที่ชัดเจนดีกว่าคำคุณศัพท์คลุมเครือ ระดับความรุนแรง (วิกฤต / สูง / ปานกลาง / ต่ำ) จะมีประโยชน์ก็ต่อเมื่อแต่ละระดับมีกฎที่เขียนไว้อย่างชัดเจนและโมเดลนำไปใช้ได้อย่างสม่ำเสมอ — วิธีที่น่าเชื่อถือที่สุดในการกำหนดกฎให้ชัดคือ ยึดโยงกฎนั้นด้วยตัวอย่างโค้ดที่เป็นรูปธรรม

บทเรียนนี้จะสร้างเกณฑ์ระดับความรุนแรงสำหรับเอเจนต์ตรวจสอบ CI/CD ทีละระดับ โดยแต่ละระดับจะเชื่อมโยงกับตัวอย่างหนึ่งตัวอย่าง

รูปแบบความล้มเหลว: คำคุณศัพท์ที่ไม่มีจุดยึด

นี่คือตัวอย่างคำสั่งที่ดูเหมือนใช้ได้ แต่ให้ผลลัพธ์แย่ คำสั่งระบุระดับความรุนแรงไว้ แต่ไม่เคยให้คำจำกัดความ โมเดลจึงต้องเดา และเดาแตกต่างกันในแต่ละครั้งที่ทำงาน

ผลลัพธ์ตรงกับรูปแบบต่อต้านที่ข้อสอบเตือนไว้พอดี นั่นคือการตรวจสอบที่มีสัญญาณรบกวน ซึ่งทั้งการขาดการตรวจสอบค่า null และความคิดเห็นที่สะกดผิดต่างก็ถูกติดป้ายว่า "สูง" ผู้ตรวจสอบจึงเลิกเชื่อถือป้ายกำกับเหล่านี้

system = (
    "You are a code reviewer. "
    "Rate each issue as Critical, High, Medium, or Low. "
    "Be precise and only report important problems."
)

# Problem: 'important', 'precise', and the four levels are
# never defined. The bar is whatever the model infers today.

วิธีแก้: กฎหนึ่งข้อ + ตัวอย่างหนึ่งตัวอย่างต่อระดับ

การแก้ไขอยู่ที่โครงสร้าง สำหรับทุกระดับความรุนแรง ให้โมเดลสองสิ่งต่อไปนี้:

  • กฎ — เงื่อนไขที่ทดสอบได้ ("ทำให้ข้อมูลสูญหาย เกิดการละเมิดความปลอดภัย หรือระบบล้มเหลวในสภาพแวดล้อมจริง")
  • ตัวอย่างยึดโยง — ข้อมูลโค้ดสั้น ๆ ที่อยู่ในระดับนั้นอย่างชัดเจนและไม่มีข้อกังขา

นี่คือการใช้การป้อนคำสั่งแบบตัวอย่างน้อยกับเกณฑ์ประเมิน: ใช้ตัวอย่างที่เจาะจง 2-4 ตัวอย่างต่อจุดกำกวม โมเดล สรุปเป็นหลักทั่วไป จากจุดยึดเหล่านี้ ไม่ได้เพียงทวนซ้ำ ดังนั้นตัวอย่างที่เลือกมาอย่างดีเพียงไม่กี่ตัวอย่างก็ช่วยปรับเทียบทั้งมาตราส่วนได้

วิกฤต — ใช้ตัวอย่างด้านความปลอดภัยเป็นจุดยึด

วิกฤต สงวนไว้สำหรับปัญหาที่ทำให้ข้อมูลสูญหาย เกิดการละเมิดความปลอดภัย หรือระบบล้มเหลวในสภาพแวดล้อมจริง ให้ใช้สิ่งที่ชัดเจนไร้ข้อกังขาเป็นจุดยึด — ในที่นี้คือการแทรกสตริงดิบลงใน SQL

สังเกตว่าจุดยึดนี้ทำหน้าที่สองอย่าง: กำหนดขีดสูงสุดของมาตราส่วน ทำให้โมเดลรู้ว่าปัญหาที่รุนแรงน้อยกว่าจะต้องไม่ขึ้นมาถึงระดับนี้

CRITICAL = """
Critical: causes data loss, a security breach, or a
production crash. Always report, even if low-confidence.

Example (SQL injection):
    query = f"SELECT * FROM users WHERE id = {user_input}"
    db.execute(query)
Why: user_input is interpolated unescaped -> injectable.
"""

สูง — ใช้ข้อผิดพลาดทางตรรกะเป็นจุดยึด

สูง ครอบคลุมพฤติกรรมที่ผิดพลาดซึ่งไม่ทำให้กระบวนการล้มเหลว แต่สร้างผลลัพธ์ที่ไม่ถูกต้อง เช่น ข้อผิดพลาดทางตรรกะ กรณีขอบเขตที่ทำงานผิดพลาด หรือการนับคลาดไปหนึ่ง จุดยึดช่วยทำให้เส้นแบ่งกับระดับวิกฤตเป็นรูปธรรม: ไม่มีการละเมิดความปลอดภัย ไม่มีการล้มเหลว แต่ผลลัพธ์ผิด

HIGH = """
High: produces incorrect results or a test failure, but
does not breach security or crash production.

Example (off-by-one):
    for i in range(len(items) - 1):
        process(items[i])     # last item never processed
Why: range stops one element early; silent wrong output.
"""

ปานกลางและต่ำ — ใช้จุดยึดกับปลายด้านเงียบ

ปลายด้านต่ำของมาตราส่วนเป็นจุดที่คำสั่งคลุมเครือทำให้เกิดผลบวกลวงมากที่สุด จึงต้องใช้จุดยึดอย่างระมัดระวังเช่นเดียวกัน

  • ปานกลาง — ความเสี่ยงด้านการดูแลรักษาหรือความน่าเชื่อถือที่ยังไม่กลายเป็นข้อผิดพลาด (เช่น ไม่มี timeout หรือมีเส้นทางข้อผิดพลาดที่ไม่ได้จัดการแต่เกิดขึ้นไม่บ่อย)
  • ต่ำ — เกี่ยวกับรูปแบบและการตั้งชื่อเท่านั้น ไม่ส่งผลต่อพฤติกรรม

การกำหนดระดับต่ำอย่างชัดเจนทำให้ภายหลังคุณสามารถบอกว่า "อย่ารายงานระดับต่ำในขั้นตอนตรวจสอบก่อนผสาน" ได้โดยที่โมเดลไม่โต้แย้ง

MEDIUM = """
Medium: reliability or maintainability risk, not yet a bug.
Example:
    requests.get(url)        # no timeout -> can hang forever
"""

LOW = """
Low: style or naming only, no behavioral impact.
Example:
    def calc(x): return x*2  # name 'calc' is unclear
"""

ประกอบเกณฑ์ประเมินเข้ากับคำสั่งระบบ

ระดับที่มีจุดยึดจะกลายเป็นบล็อกหนึ่งในคำสั่งระบบ ทำให้บล็อกนี้ คงที่และอยู่ก่อน — ใช้เหมือนกันกับทุกไฟล์ที่คุณตรวจสอบ จึงเหมาะอย่างยิ่งที่จะเป็นคำนำหน้าสำหรับการแคชคำสั่ง ส่วนส่วนต่างของแต่ละไฟล์ให้ใส่ในข้อความจากผู้ใช้ หลังเกณฑ์ประเมินที่แคชไว้

import anthropic

client = anthropic.Anthropic()

system = [{
    "type": "text",
    "text": "You are a code reviewer.\n"
            + CRITICAL + HIGH + MEDIUM + LOW
            + "\nAssign exactly one level per finding using the\n"
              "rules and examples above. When unsure between two\n"
              "levels, pick the lower one.",
    "cache_control": {"type": "ephemeral"},
}]

บังคับโครงสร้าง: ระดับความรุนแรงเป็น Enum

เกณฑ์ที่เขียนไว้จะบอกโมเดลว่า ควรตัดสินอย่างไร ส่วนผลลัพธ์แบบมีโครงสร้างจะรับประกัน รูปแบบของคำตอบ ผูกระดับความรุนแรงเข้ากับ enum ของ JSON Schema เพื่อไม่ให้ฟิลด์นี้กลายเป็นคำคุณศัพท์ที่เป็นข้อความอิสระ เช่น "prettyBad" ได้

กฎของข้อสอบที่ควรจำ: กำหนดฟิลด์เป็น required เฉพาะเมื่อฟิลด์นั้นมีอยู่ เสมอ เท่านั้น severity และ line มีอยู่เสมอสำหรับข้อค้นพบจริง จึงเป็นฟิลด์ที่จำเป็น ส่วน suggested_fix ที่ไม่บังคับนั้นไม่ใช่

finding_schema = {
    "type": "object",
    "properties": {
        "line": {"type": "integer"},
        "severity": {
            "type": "string",
            "enum": ["critical", "high", "medium", "low"],
        },
        "rule": {"type": "string"},
        "suggested_fix": {"type": "string"},
    },
    "required": ["line", "severity", "rule"],
    "additionalProperties": False,
}

เชื่อมเกณฑ์ประเมินเข้ากับการเรียกตรวจสอบ

ตอนนี้ให้รวมเกณฑ์ประเมินที่แคชและมีจุดยึดไว้กับสคีมาที่จำกัดค่าโดย enum ในคำขอเดียว ส่วนต่างเป็นเพียงส่วนที่เปลี่ยนแปลงบ่อย จึงอยู่ท้ายข้อความจากผู้ใช้

การจับคู่นี้ — ใช้เกณฑ์ที่ชัดเจนสำหรับการตัดสิน และใช้ผลลัพธ์แบบมีโครงสร้างสำหรับรูปแบบ — เป็นรูปแบบที่ข้อสอบแนะนำสำหรับการดึงข้อมูลและการจัดประเภทที่น่าเชื่อถือ

resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    thinking={"type": "adaptive"},
    system=system,                      # cached rubric prefix
    output_config={
        "format": {
            "type": "json_schema",
            "schema": {
                "type": "object",
                "properties": {"findings": {
                    "type": "array", "items": finding_schema}},
                "required": ["findings"],
                "additionalProperties": False,
            },
        }
    },
    messages=[{"role": "user", "content": diff_text}],
)

ระดับความรุนแรงใช้กำหนดการกั้น ไม่ใช่โมเดล

เมื่อระดับความรุนแรงเป็น enum ที่สะอาด การ ตัดสินใจ ว่าจะบล็อกการผสานหรือไม่ก็เป็นโค้ดที่กำหนดแน่นอน ไม่ใช่การตัดสินของโมเดล โมเดลทำหน้าที่จัดประเภท ส่วนไปป์ไลน์ของคุณเป็นผู้ใช้เกณฑ์ระดับ

เรื่องนี้สอดคล้องกับหลักการฮุกของข้อสอบ: เมื่อความล้มเหลวมีผลกระทบจริง (การผสานที่เสียหาย) ให้บังคับใช้ด้วยโค้ดที่กำหนดแน่นอน ไม่ใช่คำสั่งที่มีความน่าจะเป็น เกณฑ์ประเมินทำให้ป้ายกำกับของโมเดลน่าเชื่อถือเพียงพอที่จะนำไปใช้กั้นได้

import json

findings = json.loads(resp.content[0].text)["findings"]

BLOCKING = {"critical", "high"}
blockers = [f for f in findings if f["severity"] in BLOCKING]

if blockers:
    print(f"BLOCK MERGE: {len(blockers)} issue(s)")
    raise SystemExit(1)
print("OK to merge (medium/low only)")

อย่าให้โมเดลกรองระดับความรุนแรงด้วยตนเอง

กับดักที่ละเอียดอ่อนประการหนึ่งคือการบอกโมเดล ในขั้นตอนรายงานข้อค้นพบ ว่า "ให้รายงานเฉพาะระดับวิกฤตและสูง" ซึ่งจะลดความครอบคลุมลง โมเดลจะตัดปัญหาที่ตัดสินว่ามีระดับต่ำกว่าออกไปอย่างเงียบ ๆ และคุณจะสูญเสียสิ่งที่อาจต้องการตรวจพบ

รูปแบบที่แข็งแกร่งคือ ให้โมเดล รายงานข้อค้นพบทุกข้อพร้อมระดับความรุนแรง จากนั้นกรองในขั้นตอนแยกต่างหากภายหลัง (ชุด BLOCKING ของคุณ หรือการตรวจสอบอิสระอีกรอบ) ให้ตรวจพบให้ครบก่อน แล้วค่อยจัดลำดับทีหลัง เกณฑ์ที่มีจุดยึดคือสิ่งที่ทำให้การจัดลำดับภายหลังนี้น่าเชื่อถือ

ตรวจสอบอย่างรวดเร็ว: การใช้จุดยึดกับระดับความรุนแรง

นำบทเรียนนี้ไปใช้กับตัวเลือกด้านการออกแบบที่สมจริง

สรุปทบทวน: เกณฑ์ที่คุณชี้ให้เห็นได้

ประเด็นสำคัญ:

  • คำคุณศัพท์คลุมเครือเปลี่ยนไปมา แต่กฎที่เขียนไว้ไม่เปลี่ยน แทนที่คำว่า "สำคัญ" ด้วยเงื่อนไขที่ทดสอบได้สำหรับแต่ละระดับความรุนแรง
  • ใช้ตัวอย่างโค้ดเป็นจุดยึดให้ทุกระดับ ตัวอย่างแบบตัวอย่างน้อยที่เจาะจง 2-4 ตัวอย่างช่วยปรับเทียบมาตราส่วน โมเดลสรุปเป็นหลักทั่วไปจากตัวอย่างเหล่านั้น
  • ล็อกป้ายกำกับด้วย enum ผลลัพธ์แบบมีโครงสร้างทำให้ severity เป็นหนึ่งในค่าที่ถูกต้องเสมอ และให้กำหนดเฉพาะฟิลด์ที่มีอยู่เสมอเป็นฟิลด์บังคับ
  • แคชเกณฑ์ประเมินและเปลี่ยนส่วนต่าง วางเกณฑ์ที่คงที่ไว้ก่อนในคำสั่งระบบ และวางโค้ดของแต่ละไฟล์ไว้ท้ายสุด
  • ให้โมเดลจัดประเภท และให้โค้ดเป็นผู้กั้น รายงานข้อค้นพบทั้งหมดพร้อมระดับความรุนแรง แล้วกรองหรือบล็อกอย่างเป็นระบบในขั้นตอนภายหลัง อย่าให้โมเดลกรองตัวเองในขั้นตอนรายงานข้อค้นพบ
เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
26
บทเรียน
104

คำถามที่พบบ่อย

บทเรียน “เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Claude Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Claude Architect มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง”

ยึดโยงแต่ละระดับความรุนแรงด้วยตัวอย่างโค้ด คุณปฏิบัติ Claude Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Claude Architect หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Claude Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Claude Architect นี้ได้ไหม

ได้ บทเรียน Claude Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เกณฑ์ที่ชัดเจนเทียบกับคำสั่งกำกวม
  2. ตัวอย่างแบ่งตามหมวดหมู่
  3. เกณฑ์ระดับความรุนแรงพร้อมตัวอย่าง
  4. การลดผลบวกเท็จ
← กลับไปที่ Claude Architect