0Pricing
AI Prompt Engineering · บทเรียน

สคีมาของเครื่องมือและฟังก์ชัน

สคีมาสำหรับการเรียกใช้ฟังก์ชัน

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

เครื่องมือคือโครงร่างบวกเจตนา

การเรียกใช้ฟังก์ชันเปิดโอกาสให้แบบจำลองขอให้โค้ดของคุณดำเนินการบางอย่าง เครื่องมือแต่ละรายการประกาศด้วยชื่อ คำอธิบาย (ควรใช้เมื่อใด) และโครงร่าง JSON สำหรับพารามิเตอร์

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

ส่วนประกอบของคำจำกัดความเครื่องมือ

คำจำกัดความเครื่องมือคือคำประกาศความสามารถที่ห่อด้วยโครงร่าง

{
  'type': 'function',
  'function': {
    'name': 'get_weather',
    'description': 'Get current weather for a city. Use when the user asks about weather.',
    'parameters': {
      'type': 'object',
      'properties': {
        'city': {'type': 'string'},
        'units': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}
      },
      'required': ['city', 'units'],
      'additionalProperties': False
    }
  }
}

คำอธิบายเป็นตัวขับเคลื่อนการเลือก

เมื่อมีเครื่องมือจำนวนมากให้ใช้ แบบจำลองจะเลือกโดยอาศัย คำอธิบาย เป็นหลัก ให้เขียนคำอธิบายในรูปแบบกฎการตัดสินใจ:

  • ระบุว่า ควรใช้เมื่อใด และ ไม่ควรใช้เมื่อใด
  • แยกความแตกต่างจากเครื่องมือที่เกี่ยวข้องระดับเดียวกัน
  • ระบุเงื่อนไขเบื้องต้นที่จำเป็น

คำอธิบายที่ไม่ดีทำให้เลือกเครื่องมือผิดบ่อยกว่าที่โครงร่างที่ไม่ดีจะทำให้เกิดข้อผิดพลาดของอาร์กิวเมนต์

วงจรเรียกใช้-ดำเนินการ-ส่งกลับ

การเรียกใช้ฟังก์ชันมีหลายรอบ แบบจำลองส่งคำขอเรียกใช้ คุณดำเนินการ แล้ว append ผลลัพธ์ และแบบจำลองทำงานต่อ

resp = client.chat.completions.create(model='gpt-4o', messages=msgs, tools=tools)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append(resp.choices[0].message)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
             'content': json.dumps(result)})
# call the model again to continue with the tool result

การเรียกใช้เครื่องมือแบบขนาน

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

อย่าคิดว่ามีคำขอเรียกใช้เพียงรายการเดียว ให้ใช้วงวนเสมอ

for call in resp.choices[0].message.tool_calls:
    args = json.loads(call.function.arguments)
    result = dispatch(call.function.name, args)
    msgs.append({'role': 'tool', 'tool_call_id': call.id,
                 'content': json.dumps(result)})

การบังคับและการจำกัดการใช้เครื่องมือ

ควบคุมการเลือกด้วย tool_choice:

  • auto — แบบจำลองเป็นผู้ตัดสินใจ
  • required — ต้องเรียกใช้เครื่องมือบางรายการ
  • {name: ...} — บังคับใช้เครื่องมือที่ระบุ
  • none — ปิดใช้เครื่องมือสำหรับรอบนี้

การบังคับใช้เครื่องมือเฉพาะทำให้การเรียกใช้ฟังก์ชันกลายเป็นการดึงข้อมูลแบบมีโครงสร้างล้วน ๆ

client.chat.completions.create(
    model='gpt-4o', messages=msgs, tools=tools,
    tool_choice={'type': 'function', 'function': {'name': 'get_weather'}}
)

ตรวจสอบความถูกต้องของอาร์กิวเมนต์ก่อนดำเนินการ

แม้จะใช้โครงร่างเข้มงวด ก็ให้ถือว่าอาร์กิวเมนต์ของเครื่องมือเป็น ข้อมูลนำเข้าที่ไม่ควรเชื่อถือ ตรวจสอบความถูกต้องกับโครงร่างอีกครั้งและใช้กฎทางธุรกิจก่อนเข้าถึงระบบจริง (ฐานข้อมูล การชำระเงิน การลบไฟล์)

def dispatch(name, args):
    schema = TOOLS[name]['function']['parameters']
    jsonschema.validate(args, schema)   # defense in depth
    if name == 'refund' and args['amount'] > MAX_AUTO_REFUND:
        return {'error': 'requires human approval'}
    return HANDLERS[name](**args)

ข้อผิดพลาดของเครื่องมือเป็นส่วนหนึ่งของโพรโทคอล

เมื่อเครื่องมือทำงานล้มเหลว ให้ส่งคืน ข้อผิดพลาดที่มีโครงสร้าง เป็นผลลัพธ์ของเครื่องมือแทนการโยนข้อผิดพลาด แบบจำลองจะได้กล่าวขอโทษ ลองใหม่ด้วยอาร์กิวเมนต์ที่แก้ไขแล้ว หรือเลือกเครื่องมืออื่น

ทำให้ข้อผิดพลาดนำไปแก้ไขได้ โดยระบุเหตุผลและคำใบ้สำหรับการกู้คืนเมื่อปลอดภัย

{'status': 'error',
 'code': 'CITY_NOT_FOUND',
 'message': 'No city named Xyz. Ask the user to clarify the city.'}

รักษาขอบเขตเครื่องมือให้เล็ก

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

  • จัดกลุ่มการดำเนินการที่เกี่ยวข้องไว้หลังเครื่องมือเดียวด้วยค่าแจกแจง action
  • เปิดเผยเฉพาะเครื่องมือที่เกี่ยวข้องกับสถานะปัจจุบันแบบไดนามิก
  • ใช้การจัดกลุ่มด้วยเนมสเปซเพื่อลดความสับสนระหว่างเครื่องมือที่คล้ายกัน

การทำให้โครงร่างรัดกุมสำหรับผลกระทบข้างเคียง

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

{
  'name': 'delete_records',
  'parameters': {
    'type': 'object',
    'properties': {
      'table': {'type': 'string', 'enum': ['logs', 'temp_cache']},
      'confirm': {'type': 'boolean'},
      'max_rows': {'type': 'integer', 'minimum': 1, 'maximum': 1000}
    },
    'required': ['table', 'confirm', 'max_rows'],
    'additionalProperties': False
  }
}

การทดสอบนิยามเครื่องมือ

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

cases = [
  {'prompt': 'Whats it like in Paris?', 'expect_tool': 'get_weather'},
  {'prompt': 'Convert 10 USD to EUR', 'expect_tool': 'fx_convert'}
]
for c in cases:
    assert run(c['prompt']).tool_name == c['expect_tool']

ตรวจสอบอย่างรวดเร็ว

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

สรุปทบทวน

สคีมาของเครื่องมือและฟังก์ชันในการใช้งานจริง:

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

ถัดไป: ลูปซ่อมแซมและตรวจสอบสำหรับกรณีที่ผลลัพธ์ยังผิดพลาด

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

บทเรียน “สคีมาของเครื่องมือและฟังก์ชัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “สคีมาของเครื่องมือและฟังก์ชัน”

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

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

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

บทเรียน “สคีมาของเครื่องมือและฟังก์ชัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เหตุผลที่ควรใช้ผลลัพธ์แบบมีโครงสร้าง
  2. สคีมา JSON ในพรอมต์
  3. สคีมาของเครื่องมือและฟังก์ชัน
  4. วงจรการซ่อมแซมและตรวจสอบ
← กลับไปที่ AI Prompt Engineering