🎯 ภารกิจ — สายนักพัฒนา: API และ Claude Code
ลงมือทำจริงใน Claude หรือ Gemini แล้วติ๊กรายการที่ทำได้ครบ ภารกิจที่มีป้าย “บังคับ” ต้องผ่านทุกข้อจึงจะเลื่อนระดับ
ภารกิจบังคับ 0/4
เรียก API ครั้งแรกพร้อมบันทึกค่าใช้จ่าย
บังคับสิ่งที่ต้องทำ
ตั้ง ANTHROPIC_API_KEY เป็น env var แล้วเขียนสคริปต์ที่ถามคำถาม 3 ข้อ เก็บ token และค่าใช้จ่ายโดยประมาณของแต่ละครั้งลงไฟล์ cost_log.csv ลองเปลี่ยน effort เป็น low กับ high แล้วเทียบ token และคุณภาพคำตอบ
prompt เริ่มต้น
ลองในClaude ↗import csv, datetime import anthropic MODEL = "claude-opus-5-5" PRICE_IN, PRICE_OUT = 4.00, 20.00 # USD ต่อ 1M token (ตรวจราคาล่าสุดในหน้า pricing) QUESTIONS = [ "สรุปข้อดีข้อเสียของการผ่อนรถ 48 งวดกับ 60 งวด สั้นๆ", "เขียนข้อความแจ้งลูกค้าว่าระบบชำระเงินปิดปรับปรุงคืนนี้ 2 บรรทัด", "อธิบาย prompt caching ให้เด็กมัธยมเข้าใจใน 3 บรรทัด", ] client = anthropic.Anthropic() with open("cost_log.csv", "a", newline="", encoding="utf-8") as f: writer = csv.writer(f) for effort in ["low", "high"]: for q in QUESTIONS: r = client.messages.create( model=MODEL, max_tokens=4096, messages=[{"role": "user", "content": q}], output_config={"effort": effort}, ) cost = r.usage.input_tokens / 1e6 * PRICE_IN + r.usage.output_tokens / 1e6 * PRICE_OUT writer.writerow([datetime.datetime.now().isoformat(), MODEL, effort, r.stop_reason, r.usage.input_tokens, r.usage.output_tokens, f"{cost:.6f}"]) print(effort, r.stop_reason, f"${cost:.5f}", q[:30])เช็กลิสต์
แปลงอีเมลซัพพอร์ตเป็น JSON ที่ผ่าน Pydantic
บังคับสิ่งที่ต้องทำ
ใช้สคริปต์ทดลอง A บท 02 เป็นฐาน แยก support-emails.txt เป็น tickets.json เพิ่มการตรวจค่าด้วยโค้ดเอง (เลขออเดอร์ต้องเป็นตัวอักษร 1 ตัว + เลข 4 หลัก หรือ null) แล้วตรวจผลเทียบกับอีเมลต้นฉบับด้วยตาทีละฉบับ
prompt เริ่มต้น
ลองในClaude ↗import json, re # ... วาง class Ticket, TicketList และโค้ดเรียก client.messages.parse จากทดลอง A บท 02 ไว้ตรงนี้ ... tickets = response.parsed_output.tickets problems = [t for t in tickets if t.order_id and not re.fullmatch(r"[A-Z]\d{4}", t.order_id)] print("จำนวน ticket:", len(tickets), "| เลขออเดอร์ผิดรูปแบบ:", len(problems)) with open("tickets.json", "w", encoding="utf-8") as f: json.dump([t.model_dump() for t in tickets], f, ensure_ascii=False, indent=2)เช็กลิสต์
สคริปต์ใช้เครื่องมือเรียก API สาธารณะจริง
บังคับสิ่งที่ต้องทำ
สร้างผู้ช่วยตอบเรื่องอากาศที่เรียกบริการพยากรณ์อากาศจริง (Open-Meteo ไม่ต้องใช้คีย์) ผ่าน Tool Runner ตรวจ input ทุกครั้ง ใส่ timeout และจัดการ error แล้วถามคำถามที่ต้องเรียกเครื่องมือมากกว่า 1 ครั้ง
prompt เริ่มต้น
ลองในClaude ↗import anthropic import requests from anthropic import beta_tool CITIES = {"กรุงเทพ": (13.75, 100.50), "เชียงใหม่": (18.79, 98.98), "ภูเก็ต": (7.88, 98.39)} @beta_tool def get_weather(city: str) -> str: """ดูอุณหภูมิและความชื้นปัจจุบันของเมืองในไทย Args: city: ชื่อเมือง ต้องเป็นหนึ่งใน กรุงเทพ, เชียงใหม่, ภูเก็ต """ if city not in CITIES: # whitelist ไม่ให้ AI ส่งค่าอะไรก็ได้ return f"ไม่รองรับเมือง {city} รองรับเฉพาะ {', '.join(CITIES)}" lat, lon = CITIES[city] try: r = requests.get( "https://api.open-meteo.com/v1/forecast", params={"latitude": lat, "longitude": lon, "current": "temperature_2m,relative_humidity_2m"}, timeout=10, ) r.raise_for_status() cur = r.json()["current"] return f"{city}: {cur['temperature_2m']}°C ความชื้น {cur['relative_humidity_2m']}%" except (requests.RequestException, KeyError) as e: return f"เรียกบริการอากาศไม่สำเร็จ: {e}" client = anthropic.Anthropic() runner = client.beta.messages.tool_runner( model="claude-opus-5-5", max_tokens=16000, tools=[get_weather], messages=[{"role": "user", "content": "ตอนนี้เชียงใหม่กับภูเก็ตที่ไหนร้อนกว่ากัน ควรพกร่มไหม"}], ) for message in runner: for block in message.content: if block.type == "tool_use": print("→ เรียก", block.name, block.input) elif block.type == "text": print(block.text)เช็กลิสต์
ส่งฟีเจอร์เล็กๆ ในโปรเจกต์ตัวเองด้วย Claude Code
บังคับสิ่งที่ต้องทำ
ใน repo ของคุณเอง: สร้าง branch ใหม่, เขียน CLAUDE.md (เริ่มจาก /init แล้วตัดให้สั้น), ตั้ง deny rule กันอ่าน .env, แล้วใช้ plan mode ทำฟีเจอร์หรือแก้บั๊กเล็กๆ 1 อย่างจนเทสต์ผ่าน
prompt เริ่มต้น
ลองในClaude ↗ฉันต้องการ [อธิบายฟีเจอร์/บั๊ก 1-2 ประโยค] ไฟล์ที่น่าจะเกี่ยว: [path หรือ "ไม่แน่ใจ ช่วยหา"] เสร็จแล้วต้อง: [เช่น npm test ผ่าน และหน้า /about แสดงปุ่มใหม่] ห้ามแตะ: [เช่น ไฟล์ migration, .env, ระบบชำระเงิน] สำรวจโค้ดก่อน แล้วเสนอแผนเป็นข้อๆ (ไฟล์ที่จะแก้ เทสต์ที่จะเพิ่ม ความเสี่ยง) รอฉันอนุมัติก่อนแก้
เช็กลิสต์
ย้ายงานหนึ่งไปลอง Gemini API แล้วเทียบผล
โบนัสสิ่งที่ต้องทำ
ใช้ wrapper ask() จากบท 05 หรือทดลอง A บท 05 รันงานแยกอีเมลกับทั้ง Claude และ Gemini ด้วย schema Pydantic เดียวกัน แล้วทำตารางเทียบ
| เกณฑ์ | Claude | Gemini | |---|---|---| | จัดหมวดถูก (จาก 9 ฉบับ) | | | | จับอีเมลแฝงคำสั่งได้ไหม | | | | ผ่าน Pydantic ครั้งแรกไหม | | | | เวลาที่ใช้ (วินาที) | | | | token / ค่าใช้จ่ายโดยประมาณ | | | | ความยากในการเขียนโค้ด | | | สรุป: งานนี้ควรใช้ [ค่าย/รุ่น] เพราะ [เหตุผลจากตัวเลขข้างบน]
เช็กลิสต์