สคีมาของเครื่องมือและฟังก์ชัน
สคีมาสำหรับการเรียกใช้ฟังก์ชัน
สคีมาของเครื่องมือและฟังก์ชัน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ควรใช้ผลลัพธ์แบบมีโครงสร้าง
- สคีมา JSON ในพรอมต์
- สคีมาของเครื่องมือและฟังก์ชัน
- วงจรการซ่อมแซมและตรวจสอบ