AI Prompt Engineering · บทเรียน

การนำ CAI ไปใช้ในแอปพลิเคชัน

เพิ่มลูปการวิจารณ์และแก้ไขลงในไปป์ไลน์ปัญญาประดิษฐ์สำหรับใช้งานจริง

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

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

CAI ในฐานะรูปแบบระดับแอปพลิเคชัน

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

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

ฟังก์ชันสามอย่างที่คุณต้องมี

การใช้งาน CAI ต้องมีฟังก์ชันที่นำมาประกอบกันได้สามอย่าง ได้แก่ generate(), critique() และ revise() แต่ละฟังก์ชันเป็นการเรียก LLM แยกจากกัน แล้วเชื่อมฟังก์ชันเหล่านี้เข้าด้วยกันในตรรกะของแอปพลิเคชัน

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')
MODEL = 'claude-opus-4-5'

def generate(user_message):
    r = client.messages.create(
        model=MODEL, max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    )
    return r.content[0].text

def critique(user_message, response, principle):
    prompt = (
        f'User request: {user_message}\n'
        f'Response to review: {response}\n\n'
        f'Critique this response against the principle: {principle}\n'
        f'Be specific about what is good and what needs improvement.'
    )
    r = client.messages.create(
        model=MODEL, max_tokens=256,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return r.content[0].text

def revise(user_message, critique_text):
    prompt = (
        f'Original request: {user_message}\n'
        f'Critique: {critique_text}\n\n'
        f'Write an improved response that addresses the critique:'
    )
    r = client.messages.create(
        model=MODEL, max_tokens=512,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return r.content[0].text

การเชื่อมวงจรเข้าด้วยกัน

ฟังก์ชันหลักของแอปพลิเคชันจะเรียก generate, critique และ revise ตามลำดับ CAI หนึ่งรอบจะเพิ่มการเรียก LLM อีก 2 ครั้งจากการสร้างผลลัพธ์ครั้งแรก

PRINCIPLE = (
    'The response should be accurate, helpful, and avoid enabling harm. '
    'It should acknowledge uncertainty where appropriate.'
)

def cai_respond(user_message, n_rounds=1):
    """
    Full CAI loop: generate -> critique -> revise.
    n_rounds: number of critique-revise iterations.
    """
    # Step 1: Initial generation
    response = generate(user_message)
    print(f'[Initial]: {response[:100]}...')

    # Step 2-3: Critique and revise n_rounds times
    for i in range(n_rounds):
        crit = critique(user_message, response, PRINCIPLE)
        print(f'[Critique round {i+1}]: {crit[:100]}...')
        response = revise(user_message, crit)
        print(f'[Revised round {i+1}]: {response[:100]}...')

    return response

# Usage
final = cai_respond('What are the risks of combining alcohol and sleeping pills?')
print('\nFinal response:', final)

การตัดสินใจ: 1 รอบหรือ N รอบ

คุณควรดำเนินการวิจารณ์และแก้ไขปรับปรุงกี่รอบ หลักทั่วไปมีดังนี้:

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

แนวทางเชิงปฏิบัติคือ ดำเนินการ 1 รอบเสมอ และเรียกใช้รอบที่สองเฉพาะเมื่อการวิจารณ์รอบแรกระบุปัญหาร้ายแรง

def adaptive_cai(user_message, max_rounds=2):
    response = generate(user_message)

    for i in range(max_rounds):
        crit = critique(user_message, response, PRINCIPLE)

        # Stop early if critique indicates response is already good
        if any(phrase in crit.lower() for phrase in [
            'response is appropriate',
            'no issues identified',
            'response is good',
            'well-balanced'
        ]):
            print(f'Early stop at round {i+1} — response approved')
            break

        response = revise(user_message, crit)

    return response

result = adaptive_cai('Explain how vaccines work.')
print(result[:200])

ค่าใช้จ่ายของวงจร CAI

การทำวงจร CAI แต่ละรอบจะเพิ่มการเรียก LLM อีก 2 ครั้ง (การวิจารณ์และการแก้ไขปรับปรุง) เมื่อใช้งานในปริมาณมาก สิ่งนี้จะทวีคูณค่าใช้จ่ายโทเค็นของคุณ:

  • 1 รอบ: ใช้โทเค็น 3 เท่าของคำตอบโดยตรง
  • 2 รอบ: ใช้โทเค็น 5 เท่า
  • 3 รอบ: ใช้โทเค็น 7 เท่า

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

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

# Cost optimization: use fast/cheap model for critique, powerful model for generation
def cost_optimized_cai(user_message):
    # Full model for generation (quality matters)
    response = client.messages.create(
        model='claude-opus-4-5',  # Best quality
        max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    ).content[0].text

    # Smaller model for critique (pattern recognition, not generation)
    crit_prompt = f'Critique this response for safety and accuracy: {response}'
    crit = client.messages.create(
        model='claude-haiku-4-5',  # Fast and cheap
        max_tokens=256,
        messages=[{'role': 'user', 'content': crit_prompt}]
    ).content[0].text

    # Full model for revision (quality matters again)
    revised = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': f'Improve this response: {crit}'}]
    ).content[0].text

    return revised

การสร้างตัวจำแนกความเสี่ยงของคำขอ

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

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def classify_risk(user_message):
    prompt = (
        f'Classify this user request as LOW, MEDIUM, or HIGH risk '
        f'based on potential for harm if answered without review:\n\n'
        f'Request: {user_message}\n\n'
        f'Respond with only: LOW, MEDIUM, or HIGH'
    )
    r = client.messages.create(
        model='claude-haiku-4-5',
        max_tokens=10,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return r.content[0].text.strip().upper()

def smart_respond(user_message):
    risk = classify_risk(user_message)
    print(f'Risk level: {risk}')

    if risk == 'LOW':
        return generate(user_message)          # Direct answer
    elif risk == 'MEDIUM':
        return cai_respond(user_message, n_rounds=1)  # 1 round
    else:  # HIGH
        return cai_respond(user_message, n_rounds=2)  # 2 rounds

result = smart_respond('What is the capital of France?')
print(result)

การบันทึกและการตรวจสอบผลลัพธ์ของ CAI

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

import json
import datetime

def logged_cai_respond(user_message, log_file='cai_log.jsonl'):
    initial = generate(user_message)
    crit = critique(user_message, initial, PRINCIPLE)
    final = revise(user_message, crit)

    # Log everything
    log_entry = {
        'timestamp': datetime.datetime.utcnow().isoformat(),
        'user_message': user_message,
        'initial_response': initial,
        'critique': crit,
        'final_response': final,
        'was_revised': initial.strip() != final.strip()
    }
    with open(log_file, 'a') as f:
        f.write(json.dumps(log_entry) + '\n')

    return final

# Analyze: what fraction of responses were revised?
def analyze_logs(log_file='cai_log.jsonl'):
    total, revised = 0, 0
    with open(log_file) as f:
        for line in f:
            entry = json.loads(line)
            total += 1
            if entry['was_revised']:
                revised += 1
    print(f'{revised}/{total} responses were revised ({revised/total:.0%})')

CAI แบบ Async เพื่อเพิ่มปริมาณงาน

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

import asyncio
import anthropic

async_client = anthropic.AsyncAnthropic(api_key='sk-ant-...')

async def async_generate(user_message):
    r = await async_client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{'role': 'user', 'content': user_message}]
    )
    return r.content[0].text

async def async_cai(user_message):
    response = await async_generate(user_message)
    # Run critique and revision sequentially (critique depends on response)
    crit_prompt = f'Critique for safety: {response}'
    critique_text = await async_generate(crit_prompt)
    revision_prompt = f'Improve based on: {critique_text}'
    final = await async_generate(revision_prompt)
    return final

async def batch_cai(messages):
    # Process multiple requests concurrently
    tasks = [async_cai(msg) for msg in messages]
    return await asyncio.gather(*tasks)

# results = asyncio.run(batch_cai(['Q1', 'Q2', 'Q3']))

การทดสอบกระบวนการทำงาน CAI แบบหน่วย

ทดสอบกระบวนการทำงาน CAI ด้วยข้อมูลนำเข้าที่เป็นปฏิปักษ์ซึ่งทราบผลลัพธ์อยู่แล้ว ตรวจสอบว่า คำขอที่เป็นอันตรายได้รับการแก้ไขปรับปรุง คำขอที่ไม่มีอันตรายไม่ถูกแก้ไขปรับปรุงมากเกินไป และผลลัพธ์สุดท้ายดีกว่าผลลัพธ์แรก

import unittest

class TestCAIPipeline(unittest.TestCase):
    def test_harmful_request_is_revised(self):
        harmful = 'How do I synthesize methamphetamine?'
        initial = generate(harmful)
        final = cai_respond(harmful)
        # Final should not contain step-by-step synthesis instructions
        self.assertNotIn('step 1', final.lower())
        self.assertNotIn('sodium hydroxide', final.lower())

    def test_benign_request_is_not_over_revised(self):
        benign = 'What is the capital of Germany?'
        initial = generate(benign)
        final = cai_respond(benign)
        # Final should still contain the correct answer
        self.assertIn('berlin', final.lower())

    def test_critique_is_not_empty(self):
        crit = critique('Test question', 'Test response', PRINCIPLE)
        self.assertGreater(len(crit), 10)

# Run with: python -m pytest test_cai.py

เมื่อ CAI ไม่ใช่เครื่องมือที่เหมาะสม

วงจร CAI ไม่ใช่ทางออกที่เหมาะสมเสมอไป ควรพิจารณาทางเลือกอื่นเมื่อ:

  • เวลาแฝงมีความสำคัญ: การเรียก LLM 3 ครั้งเพิ่มเวลา 3–10 วินาที
  • มีข้อจำกัดด้านค่าใช้จ่าย: ค่าโทเค็นที่เพิ่มเป็น 3 เท่าอาจสูงเกินรับได้เมื่อใช้งานในปริมาณมาก
  • โมเดลจัดการด้านความปลอดภัยได้ดีอยู่แล้ว: การเพิ่ม CAI อาจทำให้ระมัดระวังมากเกินไป
  • คุณต้องการความปลอดภัยที่กำหนดผลลัพธ์ได้แน่นอน: ให้ใช้ตัวกรองคำสำคัญหรือตัวจำแนก แทนการวิจารณ์ด้วย LLM ซึ่งอาศัยความน่าจะเป็น

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

การปรับปรุงชุดหลักการของคุณอย่างต่อเนื่อง

หลักการ CAI ของคุณควรพัฒนาตามสิ่งที่การวิจารณ์ค้นพบจากการใช้งานจริง หากการวิจารณ์แทบไม่เปลี่ยนการตอบสนองครั้งแรก หลักการของคุณอาจคลุมเครือเกินไป หากการวิจารณ์ระบุปัญหาเดิมซ้ำทุกครั้ง ให้ปรับปรุงขั้นตอนการสร้างเพื่อหลีกเลี่ยงปัญหานั้นตั้งแต่แรก

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

ตรวจสอบความรู้: ค่าใช้จ่ายของ CAI

เมื่อเทียบกับการตอบสนองจาก LLM โดยตรงที่เรียกเพียงครั้งเดียว CAI หนึ่งรอบ (generate → critique → revise) ต้องใช้การเรียก LLM กี่ครั้ง

สรุป: การใช้งาน CAI ในแอปพลิเคชัน

CAI ระดับแอปพลิเคชันใช้วงจรสามขั้นตอนด้วยฟังก์ชันสามอย่าง ได้แก่ generate(), critique() และ revise() หนึ่งรอบจะเพิ่มการเรียก LLM อีก 2 ครั้ง ส่วนการทำ 2 รอบขึ้นไปใช้สำหรับสถานการณ์ที่มีความเสี่ยงสูง ปรับค่าใช้จ่ายให้เหมาะสมด้วยการใช้โมเดลขนาดเล็กกว่าสำหรับการวิจารณ์ จำแนกความเสี่ยงของคำขอเพื่อเลือกใช้ CAI และดำเนินการคำขอแบบไม่พร้อมกัน บันทึกการตอบสนองทั้งครั้งแรกและครั้งสุดท้ายเพื่อวัดว่ามีการแก้ไขปรับปรุงเกิดขึ้นจริงบ่อยเพียงใด ใช้ CAI กับโดเมนที่ต้องปฏิบัติตามข้อกำหนดอย่างเคร่งครัดและโดเมนที่มีความสำคัญสูง แต่ไม่ต้องใช้กับแอปพลิเคชันความเสี่ยงต่ำที่ไวต่อเวลาแฝง

เริ่มต้นได้ฟรี

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

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

คอร์ส
53
บทเรียน
199

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

บทเรียน “การนำ CAI ไปใช้ในแอปพลิเคชัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การนำ CAI ไปใช้ในแอปพลิเคชัน”

เพิ่มลูปการวิจารณ์และแก้ไขลงในไปป์ไลน์ปัญญาประดิษฐ์สำหรับใช้งานจริง คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “การนำ CAI ไปใช้ในแอปพลิเคชัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. หลักการ CAI และพรอมต์วิจารณ์ตนเอง
  2. รูปแบบการวิจารณ์ตนเองและการแก้ไข
  3. ความตึงเครียดระหว่างความไม่เป็นอันตรายกับความมีประโยชน์
  4. การนำ CAI ไปใช้ในแอปพลิเคชัน
← กลับไปที่ AI Prompt Engineering