เซิร์ฟเวอร์ MCP จะสร้างเฟรมเวิร์กสำหรับการเชื่อมต่อฟังก์ชันของแอป (เครื่องมือ MCP) กับแพลตฟอร์มแอปที่เชื่อมต่อ เพื่อให้สามารถเลือก เรียกใช้ และประมวลผลผลลัพธ์ของบริการได้อย่างน่าเชื่อถือมากขึ้น การกำหนดค่า MCP ของคุณต้องเป็นไปตามมาตรฐานต่อไปนี้อย่างเคร่งครัด
หลักการชี้นำ
สำหรับแต่ละฟังก์ชัน ให้มุ่งเน้นที่ความตั้งใจของผู้ใช้และกรณีการใช้งาน ไม่ใช่ความสามารถของฟังก์ชัน คำอธิบายเป็นวิธีหลักในการบอกโมเดลว่าเครื่องมือของคุณมีไว้เพื่ออะไรและสามารถตอบสนองต่อกรณีการใช้งานใดได้บ้าง
การกำหนดเวอร์ชัน
หากต้องการรองรับการติดตั้งใช้งาน MCP ที่ปรับขนาดได้และมีประสิทธิภาพ ให้ใช้สถาปัตยกรรม URI ที่มีโครงสร้างซึ่งใช้การกำหนดเวอร์ชันตามเส้นทาง เช่น /v1, /v2 การดำเนินการดังกล่าวจะช่วยรักษาความเข้ากันได้แบบย้อนหลังและควบคุมฟีเจอร์ใหม่ๆ
การเสริมด้วยโดเมนย่อยเฉพาะผู้ให้บริการ เช่น https://gemini.mcp.company.com/mcp/v1 จะช่วยให้จัดการการเข้าชมแบบละเอียดและเพิ่มประสิทธิภาพคำจำกัดความของเครื่องมือที่ปรับให้เหมาะกับบริบทและลักษณะการประมวลผลที่ไม่ซ้ำกันของโมเดล AI ต่างๆ ได้
ความเข้ากันได้ของเวอร์ชันโปรโตคอล MCP
แพลตฟอร์มแอปที่เชื่อมต่อรองรับข้อกำหนดเฉพาะของ Model Context Protocol (MCP) สูงสุดถึงเวอร์ชัน 2025-11-25 ระบบยังไม่รองรับข้อกำหนดเวอร์ชันใหม่
- ความรับผิดชอบของนักพัฒนาแอป: คุณมีหน้าที่ตรวจสอบว่าเซิร์ฟเวอร์ MCP ของคุณเป็นไปตามเวอร์ชันโปรโตคอลที่แพลตฟอร์มแอปที่เชื่อมต่อ (
2025-11-25) รองรับอย่างเคร่งครัดในระหว่างแฮนด์เชคinitializeและในคำจำกัดความของเครื่องมือและสคีมาทั้งหมด - ความเข้ากันได้แบบย้อนหลังของแพลตฟอร์ม: เนื่องจากแพลตฟอร์มแอปที่เชื่อมต่อจะใช้ข้อกำหนด MCP เวอร์ชันใหม่ในอนาคต ไคลเอ็นต์ของเราจะรักษาความเข้ากันได้แบบย้อนหลังกับเวอร์ชันโปรโตคอลที่รองรับก่อนหน้านี้ เพื่อให้การผสานรวมเวอร์ชันที่ใช้งานจริงที่มีอยู่ยังคงทำงานต่อไปได้โดยไม่หยุดชะงัก
- การจัดการการอัปเกรด: เมื่อคุณพร้อมที่จะใช้ข้อกำหนดเฉพาะของ MCP ที่รองรับใหม่หรือแนะนำการเปลี่ยนแปลงสคีมา ให้แสดงการอัปเดตเหล่านั้นในเส้นทาง URI ที่กำหนดเวอร์ชันใหม่ (เช่น
/mcp/v2) ขณะที่ยังคงรักษาปลายทางที่มีอยู่ (/mcp/v1) สำหรับการเข้าชมที่ใช้งานอยู่
อนุญาตให้ทำการเปลี่ยนแปลงสคีมา MCP ระหว่างแอปเวอร์ชันต่างๆ ได้ เราขอแนะนำให้คุณใช้ประโยชน์จากฟีเจอร์นี้และกำหนดเวอร์ชันของปลายทาง MCP เพื่อรองรับการเปิดตัวฟีเจอร์ใหม่ๆ อย่างค่อยเป็นค่อยไป หรือพึ่งพาการเปลี่ยนแปลงที่เข้ากันได้แบบย้อนหลังอย่างเคร่งครัด
ข้อกำหนดของโปรโตคอลการนำส่ง
แพลตฟอร์มแอปที่เชื่อมต่อรองรับข้อกำหนดเฉพาะของ Model Context Protocol สำหรับการรับส่งข้อมูล HTTP ที่สตรีมได้เวอร์ชัน 2025-03-26 ขึ้นไปอย่างเคร่งครัด แต่ไม่รองรับ HTTP เดิมที่มีการส่ง SSE ตามที่อธิบายไว้ในข้อกำหนดเฉพาะวันที่ 5 พฤศจิกายน 2024
- ปลายทาง HTTP เดียว ปลายทาง MCP ที่ระบุไว้ใน Connected Console (เช่น
https://api.example.com/mcp) คือ URL เดียวที่ผลิตภัณฑ์ Google ที่เกี่ยวข้องจะส่งคำขอ JSON-RPC ทั้งหมด (initialize,tools/list,tools/call) ผ่านHTTP POSTมาตรฐาน - สตรีมมิง SSE ภายใน HTTP ที่สตรีมได้ ระบบไม่รองรับการส่ง SSE แบบหลายปลายทางเดิม แต่รองรับ Server-Sent Events เช่น
text/event-streamภายใน Streamable HTTP คำขอขาออกจากผลิตภัณฑ์ Google ที่เกี่ยวข้องจะมีAccept: application/json, text/event-streamซึ่งหมายความว่าเซิร์ฟเวอร์ของคุณสามารถแสดงผลเพย์โหลดapplication/jsonมาตรฐานหรือสตรีมการตอบกลับแบบเพิ่มทีละส่วนโดยใช้Content-Type: text/event-streamในเนื้อหาการตอบกลับHTTP POSTโดยตรงได้ - สตรีม GET และ 405 Method Not Allowed ไคลเอ็นต์อาจพยายามใช้สตรีม
GETที่ไม่บังคับในปลายทางสำหรับการแจ้งเตือนจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์ หากเซิร์ฟเวอร์ของคุณเป็นแบบไม่เก็บสถานะหรือแบบคำขอ-การตอบกลับเท่านั้น พร็อกซีไคลเอ็นต์ของผลิตภัณฑ์ Google ที่เกี่ยวข้องจะรองรับและจัดการการแสดงผลHTTP 405 Method Not Allowedอย่างชัดเจน
วิธีการสำหรับเซิร์ฟเวอร์
แพลตฟอร์มแอปที่เชื่อมต่อได้รับการเพิ่มประสิทธิภาพให้รับคำสั่งจากเซิร์ฟเวอร์ ซึ่งช่วยให้ควบคุมพฤติกรรมของโมเดลได้ในระดับที่วิธีอื่นๆ ทำไม่ได้
ถือเป็น "คำแนะนำโมเดล" ที่มีบริบทการใช้งาน
ทำตามหลักเกณฑ์ต่อไปนี้เกี่ยวกับการให้คำแนะนำแก่โมเดล
- เขียนวิธีการเป็น "คำแนะนำ" ระดับสูงหรือแนวทางเพื่อช่วยให้ LLM เข้าใจวัตถุประสงค์และความสามารถโดยรวมของเซิร์ฟเวอร์
- อธิบายสิ่งที่ทำได้ แทนที่จะแสดงรายการฟีเจอร์หรืออธิบายวิธีที่โมเดลควรใช้เครื่องมือและทรัพยากรของเซิร์ฟเวอร์ หากโมเดลเข้าใจ "สิ่งที่" ผู้ใช้ต้องการอย่างถูกต้อง ก็จะระบุวิธีดำเนินการได้ค่อนข้างดีโดยอิงตามเส้นทางของผู้ใช้
- สมมติว่าระบบจะเพิ่มข้อความนี้ลงในพรอมต์ของระบบของโมเดลโดยตรง ทำให้ชัดเจน เป็นคำสั่ง และใช้โทเค็นอย่างมีประสิทธิภาพ
ควรเสริมข้อมูล ไม่ควรทำซ้ำ
ใช้พื้นที่นี้สำหรับบริบทส่วนกลางที่ใช้กับเครื่องมือทั้งหมด โดยหลีกเลี่ยงความซ้ำซ้อนกับคำอธิบายเครื่องมือแต่ละรายการ
ตัวอย่างวิธีการใช้เซิร์ฟเวอร์
ตัวอย่างต่อไปนี้แสดงสิ่งที่ควรทำและไม่ควรทำเกี่ยวกับการเขียนวิธีการของเซิร์ฟเวอร์อย่างถูกต้อง
| แนะนำ | ไม่แนะนำ |
|---|---|
สมมติว่าคุณเป็นผู้ดูแลที่เก็บ GitHub ที่มีความเชี่ยวชาญเฉพาะทาง เซิร์ฟเวอร์นี้ให้สิทธิ์เข้าถึงข้อมูลเมตาของที่เก็บ Issue Tracker และเวิร์กโฟลว์ PR อย่างละเอียด ใช้เพื่อรักษาประสิทธิภาพของโปรเจ็กต์ จัดการการคัดแยกโดยอัตโนมัติ และตรวจสอบมาตรฐานของโค้ด ถือว่าการดำเนินการทั้งหมดเกิดขึ้นภายในบริบทขององค์กรที่ตรวจสอบสิทธิ์แล้ว เว้นแต่จะระบุไว้เป็นอย่างอื่น ให้ความสำคัญกับการระบุชุดข้อความที่ไม่มีการอัปเดตหรือ PR ที่ไม่ได้ลิงก์เพื่อจัดระเบียบที่เก็บข้อมูล กระชับ เป็นคำสั่ง และเสริมโมเดล
|
เซิร์ฟเวอร์นี้มีเครื่องมือสำหรับ GitHub คุณควรใช้เครื่องมือ
|
หลักเกณฑ์ของเครื่องมือ
หลักเกณฑ์ต่อไปนี้อธิบายแนวทางปฏิบัติแนะนำในการสร้างการกำหนดค่าเซิร์ฟเวอร์ MCP สำหรับฟังก์ชันหรือเครื่องมือต่างๆ ภายในแอปของคุณ
รูปแบบการตั้งชื่อเครื่องมือ
ดูหลักเกณฑ์ต่อไปนี้สำหรับการตั้งชื่อเครื่องมือ
ใช้ชื่อที่เข้าใจง่ายและมนุษย์อ่านได้
ใช้ชื่อที่มนุษย์อ่านได้ซึ่งมีความหมายชัดเจนและเข้าใจง่ายแทนชื่อที่กำกวม ตัวอย่างเช่น get_user_information จะตรงไปตรงมามากกว่า userInfo
ใช้รูปแบบตัวพิมพ์ที่เหมาะสม
ปฏิบัติตามกฎการใช้อักษรตัวพิมพ์ใหญ่-เล็กต่อไปนี้สำหรับชื่อฟังก์ชันเครื่องมือและทริกเกอร์แอป
- ตัวพิมพ์ของฟังก์ชันเครื่องมือ ใช้
snake_caseหรือcamelCaseสำหรับชื่อฟังก์ชันเครื่องมือที่กำหนดไว้ในสคีมา MCP (เช่นget_user_informationหรือpublishDraft) - ตัวพิมพ์ของแฮนเดิลทริกเกอร์แอป ทริกเกอร์และการพูดถึงแอป (เช่น
@MyTwoWordApp) ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แพลตฟอร์มจะปรับข้อมูลที่ผู้ใช้ป้อนให้เป็นมาตรฐานเดียวกัน ทั้งตัวพิมพ์เล็ก (@mytwowordapp), PascalCase (@MyTwoWordApp) และ camelCase (@myTwoWordApp) - การจัดรูปแบบชื่อที่แสดง ลงทะเบียนชื่อแอปอย่างเป็นทางการโดยใช้ PascalCase หรือเว้นวรรคตามมาตรฐานเพื่อให้แสดงผลได้อย่างชัดเจนในองค์ประกอบ UI
- การจัดการคำที่สะกดผิด แม้ว่าระบบจะจัดการรูปแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยอัตโนมัติ แต่การพิมพ์ผิด (เช่น
@mytwowrodapp) จะอาศัยการจดจำ Intent สำรองแทนการจับคู่สตริงโดยตรง นักพัฒนาแอปควรส่งเสริมให้มีการสะกดแฮนเดิลอย่างถูกต้องในเอกสารประกอบ
ใช้การตั้งชื่อแบบคำกริยา-คำนามที่ชัดเจน
ใช้การตั้งชื่อ verb_noun ที่เฉพาะเจาะจงและหลีกเลี่ยงความกำกวม เช่น publish_draft ดีกว่า handle_content
รายละเอียดของเครื่องมือ
โปรดปฏิบัติตามหลักเกณฑ์ต่อไปนี้เกี่ยวกับรายละเอียดของเครื่องมือ
มองเครื่องมือเป็นปลายทางแบบอะตอม
มองเครื่องมือเป็นปลายทางแบบอะตอมมิกที่ไม่มีเงื่อนไขเครื่องมือภายในหรือฟังก์ชันการทำงานหลายอย่างพร้อมพารามิเตอร์ที่จำเป็นที่เกี่ยวข้อง เครื่องมือที่ละเอียดช่วยให้โมเดลเชื่อมโยงขั้นตอนต่างๆ ได้อย่างสมเหตุสมผล ซึ่งช่วยลดอาการหลอนได้
ใช้สคีมาที่แบนราบกว่า
หากคุณต้องการออบเจ็กต์ที่ซ้อนกันหลายชั้นหรือตรรกะสคีมา oneOf / anyOf ที่ซับซ้อนเพื่อตรวจสอบอินพุต เครื่องมือของคุณอาจกว้างเกินไป
สังเกตการป้องกันการรวมข้อมูลล่วงหน้าและเพย์โหลด
แม้ว่าโปรโตคอลจะไม่บังคับให้รวมข้อมูลล่วงหน้าสำหรับเพย์โหลดขนาดเล็กที่มีขอบเขตจำกัด แต่ในทางปฏิบัติแล้ว การรวมข้อมูลล่วงหน้าในแบ็กเอนด์เป็นสิ่งจำเป็นอย่างยิ่งเมื่อทำงานกับชุดระเบียนขนาดใหญ่ ประวัติระยะยาว และชุดข้อมูลจากหลายแหล่ง แพลตฟอร์มแอปที่เชื่อมต่อจะบังคับใช้มาตรการป้องกันเกี่ยวกับขีดจำกัดของหน้าต่างบริบท เวลาในการตอบสนองของการดำเนินการ และขั้นตอนการให้เหตุผลของโมเดล โปรดทำตามหลักเกณฑ์ต่อไปนี้เพื่อให้เป็นไปตามมาตรการป้องกันเหล่านี้
- กรองและสรุปในแบ็กเอนด์ กรอง รวมข้อมูลล่วงหน้า หรือสรุปสตรีมข้อมูลขนาดใหญ่บนเซิร์ฟเวอร์ MCP ของคุณเสมอก่อนที่จะแสดงคำตอบไปยังผลิตภัณฑ์ Google ที่เกี่ยวข้อง
- หลีกเลี่ยงการดัมพ์ข้อมูลดิบ อย่าดัมพ์แถวฐานข้อมูลดิบหรือบันทึกที่ไม่มีการจัดทำดัชนีแบบสมบูรณ์ลงในเพย์โหลดที่เครื่องมือแสดงผล
ละเว้นเครื่องมือภายในและเครื่องมือเมตา
แสดงเฉพาะความสามารถที่โมเดลใช้ได้ในการตอบกลับ tools/list ของเซิร์ฟเวอร์ ดังนี้
- กรองเครื่องมือตัวช่วย: ละเว้นเครื่องมือภายใน เครื่องมือการดูแลระบบ หรือเครื่องมือเมตาที่ไม่ได้มีไว้ให้โมเดลเรียกใช้ (เช่น การตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์ รูทีนการตั้งค่าภายใน หรือตัวช่วยยูทิลิตีสำหรับนักพัฒนาซอฟต์แวร์)
- ประสิทธิภาพของหน้าต่างบริบท: การยกเว้นเครื่องมือที่ไม่จำเป็นจะช่วยให้สคีมา MCP ของคุณกระชับ ลดการใช้โทเค็นหน้าต่างบริบท และป้องกันความสับสนในการกำหนดเส้นทางเครื่องมือของโมเดล เซิร์ฟเวอร์ MCP ที่แสดงเครื่องมือหลายสิบรายการหรือสคีมา "เครื่องมือขนาดใหญ่" ที่ซ้อนกันอย่างซับซ้อนจะได้รับการแจ้งว่าไม่เหมาะสมในระหว่างการตรวจสอบเพื่อแก้ไข
สิ่งที่ควรและไม่ควรทำเกี่ยวกับรายละเอียดของเครื่องมือ
ตัวอย่างต่อไปนี้แสดงสิ่งที่ควรทำและไม่ควรทำเกี่ยวกับการตั้งชื่อเครื่องมือและการใช้รายละเอียด
| แนะนำ | ไม่แนะนำ |
|---|---|
|
เครื่องมือแบบละเอียดที่มีชื่อและพารามิเตอร์ที่ชัดเจน สคีมอินพุตสำหรับเครื่องมือแต่ละรายการมีความเข้มงวด หาก LLM ต้องการสร้างผู้ใช้ ก็ต้องระบุอีเมล หากต้องการลบ คุณต้องระบุรหัส คุณจึงไม่ต้องคาดเดา |
ชื่อเครื่องมือ: manage_user คำอธิบาย: "ใช้เครื่องมือนี้เพื่อสร้าง อัปเดต ลบ หรือเรียกดูผู้ใช้" |
ประกาศคำอธิบายประกอบเครื่องมือเพื่อความปลอดภัย
กำหนดค่าคำอธิบายประกอบโปรโตคอลภายในคำจำกัดความของเครื่องมือเพื่อสื่อถึงลักษณะการทำงานของการดำเนินการและทริกเกอร์เกตความปลอดภัยในตัวในผลิตภัณฑ์ Google ที่เกี่ยวข้อง ดังนี้
- เกตการยืนยันรันไทม์: ผลิตภัณฑ์ Google ที่เกี่ยวข้องจะใช้
annotations.destructiveHint: trueและannotations.openWorldHint: trueเป็นแฟล็กหลักเพื่อทริกเกอร์ข้อความแจ้งการยืนยันของผู้ใช้รันไทม์ ประกาศdestructiveHint: trueในการดำเนินการที่เปลี่ยนสถานะ เขียน หรือทำลาย และตั้งค่าopenWorldHint: trueสำหรับเครื่องมือที่โต้ตอบกับสภาพแวดล้อมแบบโอเพนเวิลด์หรือภายนอก เพื่อให้แพลตฟอร์มแจ้งให้ผู้ใช้ยืนยันก่อนดำเนินการโดยค่าเริ่มต้น - คำแนะนำการค้นหาแบบอ่านอย่างเดียว: ตั้งค่า
readOnlyHint: trueในเครื่องมือ Query ที่ดึงข้อมูลเท่านั้นโดยไม่ต้องแก้ไขสถานะแบ็กเอนด์ - ค่าเริ่มต้นของคำอธิบายประกอบที่ชัดเจน: ตามข้อกำหนดเฉพาะของ Model Context Protocol การละเว้น
readOnlyHintจะทำให้ไคลเอ็นต์ถือว่าreadOnlyHint: falseและdestructiveHint: trueเป็นค่าเริ่มต้นเพื่อความปลอดภัย การประกาศคำอธิบายประกอบอย่างชัดเจนในเครื่องมือทั้งหมดช่วยให้มั่นใจได้ว่าการกำหนดเส้นทางโมเดลจะคาดการณ์ได้และความปลอดภัยในการดำเนินการที่เหมาะสม
คำอธิบายเครื่องมือ
คำอธิบายเป็นบริบทเดียวที่โมเดลมีเพื่อตัดสินใจว่าเครื่องมือของคุณสามารถแก้ปัญหาปัจจุบันได้หรือไม่ ดูหลักเกณฑ์ต่อไปนี้สำหรับการเขียนคำอธิบาย
เขียนคำสั่ง ไม่ใช่ความคิดเห็น
เขียนคำอธิบายเครื่องมือเป็นวิธีการ ไม่ใช่ความคิดเห็นในโค้ด ซึ่งมักจะเป็นแบบพาสซีฟ LLM ตอบสนองต่อคำสั่งได้ดี
อธิบาย "วิธีการ"
คำอธิบายที่ดีจะช่วยเชื่อมช่องว่างระหว่าง "ฉันมีเครื่องมือ" กับ "ฉันรู้วิธีเชื่อมต่อเครื่องมือนี้เข้ากับการสนทนา"
อธิบาย "เหตุผล"
แยกความแตกต่างของเครื่องมือนี้จากเครื่องมือที่คล้ายกัน เช่น "ใช้เครื่องมือนี้สำหรับผู้ใช้ภายใน ใช้ customer_update สำหรับผู้ใช้ภายนอก"
ระบุลิงก์
บอกโมเดลว่าจะหาอาร์กิวเมนต์ได้จากที่ใด เช่น "จากเครื่องมือ order_search"
ระบุรูปแบบ
ระบุหน่วย (เมตรเทียบกับฟุต) และรูปแบบ (วันที่ ISO, เวอร์ชันเชิงความหมาย)
หลีกเลี่ยงการใช้ดุลยพินิจของโมเดล
อย่าสั่งให้โมเดลใช้ "การพิจารณาที่ดีที่สุด" หรือแนะนำการดำเนินการที่ไม่บังคับและไม่มีคำแนะนำ
ตัวอย่างคำอธิบายเครื่องมือ
ตัวอย่างต่อไปนี้แสดงสิ่งที่ควรทำและไม่ควรทำเกี่ยวกับการเขียนคำอธิบายเครื่องมือ
| แนะนำ | ไม่แนะนำ |
|---|---|
|
แหล่งข้อมูลที่เชื่อถือได้ "อัปเดตอีเมลของผู้ใช้ ต้องใช้ UUID "id" ที่แสดงผลจากเครื่องมือ (โดยจะลิงก์เอาต์พุตของเครื่องมือหนึ่งกับอินพุตของเครื่องมือนี้อย่างชัดเจน) |
"อัปเดตอีเมลของผู้ใช้" (โมเดลอาจเดารหัส เช่น 12345) |
|
รูปแบบและข้อจำกัด "นัดหมายการประชุม "date" ต้องอยู่ในรูปแบบ ISO 8601 (YYYY-MM-DD) หากผู้ใช้พูดว่า "พรุ่งนี้" หรือการอ้างอิงที่เกี่ยวข้องอื่นๆ ให้คำนวณวันที่ตามบริบทปัจจุบัน" |
"นัดหมายการประชุมสำหรับวันที่ที่ระบุ" (ดูถูกต้องสำหรับมนุษย์ (เช่น "พรุ่งนี้") แต่ไม่ผ่านการตรวจสอบสคีมา (ต้องเป็น "2025-10-12")) |
|
ความคาดหวังด้านเอาต์พุต "ดึงข้อมูลบันทึกของเซิร์ฟเวอร์ แสดงข้อความดิบ 50 บรรทัดสุดท้าย สำหรับการวิเคราะห์ ให้ขอหน้าต่างเวลาที่เล็กลงเพื่อหลีกเลี่ยงขีดจำกัดโทเค็น" |
"รับบันทึกของเซิร์ฟเวอร์" (โมเดลอาจเรียกใช้เครื่องมือที่คาดหวังข้อมูลสรุป แต่ได้รับข้อมูลดิบขนาด 5 MB ในรูปแบบ JSON ซึ่งอาจส่งผลให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี) |
คำอธิบายนี้ทำหน้าที่เป็นคู่มือขนาดเล็ก โดยจะจัดการแหล่งที่มา (ตำแหน่งที่จะรับรหัส) ข้อจำกัด (Enum ที่ถูกต้อง) และการดำเนินการ |
ซึ่งจะใช้ชื่อตัวแปรเพื่อทำงานทั้งหมด ซึ่งทำให้โมเดลต้องเดาค่าที่ถูกต้องสำหรับ "status" |
พารามิเตอร์เครื่องมือ
นอกเหนือจากตัวเครื่องมือเองแล้ว ให้อธิบายพารามิเตอร์เพื่อให้เข้าใจได้ชัดเจน
ประเภทที่อาจไม่เหมาะสม
ใช้ประเภทที่เฉพาะเจาะจงและชัดเจน (string, integer, boolean, array)
ใช้ Enum สำหรับชุดค่าคงที่
หากพารามิเตอร์ยอมรับเฉพาะชุดค่าคงที่ (เช่น daylight, cool, warm) ให้แสดงรายการในอาร์เรย์ enum ซึ่งจะช่วยปรับปรุงความแม่นยำได้อย่างมาก
ระบุพารามิเตอร์ที่จำเป็นอย่างชัดเจน
กำหนดให้ชัดเจนว่าพารามิเตอร์ใดจำเป็นสำหรับการทำงานของฟังก์ชัน
ใช้การจับคู่สคีมาเชิงความหมาย
เมื่อผสานรวมแอป คุณอาจต้องจับคู่สคีมาเชิงความหมายจากพารามิเตอร์เครื่องมือกับประเภทธุรกิจที่คุณกำลังพัฒนา คุณจะได้รับสคีมาประเภทธุรกิจที่คาดไว้ (สคีมา JSON) ในระหว่างกระบวนการเริ่มต้นใช้งาน
ตัวอย่างพารามิเตอร์เครื่องมือ
ตัวอย่างต่อไปนี้แสดงสิ่งที่ควรทำและไม่ควรทำเกี่ยวกับการจัดการพารามิเตอร์เครื่องมือ
| แนะนำ | ไม่แนะนำ |
|---|---|
|
รูปแบบและหน่วยของอาร์กิวเมนต์ radius: "รัศมีในหน่วยเมตร ต้องเป็นค่าแบบลอยตัว > 0" (ป้องกันอาการหลอนของ AI เกี่ยวกับหน่วย) |
radius: "รัศมีของวงกลม" |
|
รูปแบบและบริบทของรหัส user_id: "UUID ของฐานข้อมูล (เช่น 550e8400-e29b...) อย่าใช้อีเมลที่นี่" หมายเหตุ: แนวทางปฏิบัติแนะนำคือควรจัดการฟิลด์รหัสที่เป็นตัวเลขทั้งหมดเป็นค่าสตริง โดยเฉพาะอย่างยิ่ง หากรหัสของคุณอาจมีตัวเลขมากกว่า 10 หลัก คุณอาจเสี่ยงที่รหัสจะถูกตัดโดยระบบภายใน (บังคับให้อยู่ในคอนเทนเนอร์ 32 บิต) และโมเดลจะใช้เวอร์ชันนี้ในการเรียกใช้เครื่องมือในอนาคต (ป้องกันข้อผิดพลาดของประเภท) |
user_id: "รหัสของผู้ใช้" |
|
ความคาดหวังเกี่ยวกับผลลัพธ์ "อัปเดตระเบียนและแสดงผลออบเจ็กต์ JSON ที่อัปเดตแล้ว รวมถึงการประทับเวลาใหม่" (บอกโมเดลว่าไม่จำเป็นต้องเรียกใช้เครื่องมือ "get" ทันทีหลังจาก "update" เพื่อยืนยันการเปลี่ยนแปลง) |
"อัปเดตระเบียน" |
|
LLM ไม่ทราบว่า "การค้นหา" รองรับไวยากรณ์ใด (SQL? นิพจน์ทั่วไป? ข้อความธรรมดา) เนื่องจากไม่ทราบว่า "ขีดจำกัด" สูงสุดคือเท่าใด |
การตอบกลับและการจัดการข้อผิดพลาด
ตามหลักการสำคัญของคำตอบคือพรอมต์ถัดไป เครื่องมือจะรายงานผลลัพธ์ของการดำเนินการที่สำคัญโดยแสดงผลเพย์โหลดข้อมูล ซึ่งจะวางลงในหน้าต่างบริบทของ LLM โดยตรง ผลลัพธ์ที่สำเร็จหรือไม่สำเร็จจะเป็นตัวกำหนดสิ่งที่จะเกิดขึ้นต่อไป ดังนี้
- หากสำเร็จ: โมเดลต้องการค่าที่แสดงผลเพื่อทราบว่าเกิดอะไรขึ้นเพื่อตัดสินใจขั้นตอนถัดไป
- หากไม่สำเร็จ: โมเดลต้องทราบสาเหตุที่ดำเนินการไม่สำเร็จและวิธีแก้ไข ข้อขัดข้อง (ข้อผิดพลาด 500) จะหยุดการสนทนา ข้อความแสดงข้อผิดพลาดที่สื่อความหมายจะช่วยให้โมเดลแก้ไขตัวเองได้
ไม่ว่าตรรกะพื้นฐานของเครื่องมือจะสำเร็จหรือล้มเหลว คุณต้องจัดรูปแบบเพย์โหลดค่าที่แสดงผลเพื่อให้โมเดลแยกวิเคราะห์ได้ง่าย ทำตามแนวทางปฏิบัติแนะนำเหล่านี้เมื่อจัดแพ็กเกจเพย์โหลดการตอบกลับ
ใช้ JSON
จัดรูปแบบ Structured Data ใน TextContent (ข้อจำกัดชั่วคราว) เนื่องจากแพลตฟอร์มแอปที่เชื่อมต่อยังไม่รองรับ structuredContent ให้ทำการจัดเรียงข้อมูลของคุณด้วยตนเอง แม้ว่าจะแสดงรายการที่ตรงไปตรงมาก็ตาม ให้json.dumps()
รวม URL ในคำตอบ
URL ที่แสดงผลควรสั้นและไม่มีพารามิเตอร์มากนัก ขอแนะนำให้ใช้บริการย่อ URL เพื่อประหยัดจำนวนโทเค็นและลดความเสี่ยงที่จะเกิดภาพหลอน
เพย์โหลดป้องกันภาพหลอนที่อธิบายตนเองได้
จับคู่รหัสข้อมูลดิบหรือรหัสภายในกับชื่อที่แสดงที่มนุษย์อ่านได้ หน่วยวัดที่ชัดเจน และช่วงอ้างอิงเสมอ อย่าแสดงคีย์พจนานุกรมที่บีบอัดหรือรหัสตัวเลขที่ไม่ได้แมปซึ่งบังคับให้โมเดลอนุมานบริบท
ใช้การจัดการข้อผิดพลาดที่มีประสิทธิภาพ
แสดงข้อความแสดงข้อผิดพลาดที่ชัดเจนและมีความหมายเพื่อให้โมเดลเข้าใจสิ่งที่ผิดพลาดและแจ้งให้ผู้ใช้ทราบ ดูการจัดการข้อผิดพลาดของ MCP
ใช้ try/except
รวมตรรกะของเครื่องมือไว้ในบล็อก try/except และแสดงผลข้อผิดพลาดที่แปลงเป็นสตริง
ระบุข้อผิดพลาดที่นำไปใช้ได้จริง
แนะนำขั้นตอนถัดไปในข้อความแสดงข้อผิดพลาด (เช่น "ลองใช้เครื่องมือ X ก่อน")
ยืนยันการทำงาน
อย่าแสดงสตริงว่างสำหรับเครื่องมือที่มีผลข้างเคียง (สร้าง/อัปเดต/ลบ)
ตัวอย่างการตอบกลับและการจัดการข้อผิดพลาด
ตัวอย่างต่อไปนี้แสดงสิ่งที่ควรทำและไม่ควรทำเกี่ยวกับการตอบกลับและการจัดการข้อผิดพลาด
| แนะนำ | ไม่แนะนำ |
|---|---|
|
การทำให้เป็นอนุกรมอย่างชัดเจน |
|
|
ตรวจจับและแจ้งให้ทราบ (เครื่องมือ "ประสบความสำเร็จ" ในทางเทคนิค (แสดงผลสตริง) แต่สตริงมีรายละเอียดข้อผิดพลาด โมเดลจะอ่านข้อมูลนี้และตระหนักว่า "โอ้ รหัสนั้นไม่มีอยู่" และสามารถขอรหัสที่ถูกต้องจากผู้ใช้ได้) |
(หาก |
|
การตอบกลับที่ว่างเปล่า |
LLM มักจะสับสนกับคำตอบที่ว่างเปล่า โมเดลอาจสร้างภาพหลอนว่า "เครื่องมือทำงานไม่สำเร็จ" หรือเพียงแค่เรียกใช้ซ้ำ |
|
เพย์โหลดป้องกันภาพหลอนที่อธิบายตนเอง จับคู่รหัสข้อมูลดิบหรือรหัสภายในกับชื่อที่แสดงที่มนุษย์อ่านได้ หน่วยวัดที่ชัดเจน และช่วงอ้างอิงปกติเสมอ (วิธีนี้จะบอกโมเดลอย่างชัดเจนว่าค่าหมายถึงอะไร โดยไม่ต้องบังคับให้โมเดลอนุมานหน่วยหรือเกณฑ์อ้างอิง) |
รหัสดิบ การบีบอัดที่กำหนดเอง หรือรหัสที่ไม่ได้จับคู่ การแสดงรหัสภายในแบบข้อมูลดิบ ตัวย่อพจนานุกรมที่กำหนดเอง หรือรหัสตัวเลขที่ไม่มีป้ายกำกับ (บังคับให้โมเดลคาดเดาว่า 105 หมายถึงอะไร ซึ่งนำไปสู่หน่วยที่เกิดจากการคิดไปเอง บริบทที่ขาดหายไป หรือคำอธิบายที่ไม่ถูกต้อง) |
การจัดการข้อผิดพลาดของ MCP
การจัดการข้อผิดพลาดอย่างเหมาะสมเป็นสิ่งสำคัญอย่างยิ่ง
- สำหรับข้อผิดพลาดที่กู้คืนได้ (เช่น รหัสผู้ใช้ไม่ถูกต้องหรือไม่มีพารามิเตอร์ที่ไม่บังคับ) ให้แสดงผลสตริงข้อความปกติที่มีรายละเอียดข้อผิดพลาดที่อธิบายไว้ในการตอบกลับของเครื่องมือ ซึ่งช่วยให้โมเดลตรวจสอบความคิดเห็น เข้าใจสิ่งที่ผิดพลาด และแก้ไขด้วยตนเองหรือแจ้งให้ผู้ใช้ชี้แจงได้
- สำหรับข้อผิดพลาดที่ทำให้ไม่สามารถดำเนินการต่อได้ (เช่น การจำกัดอัตราคำขอ การตรวจสอบสิทธิ์หรือสิทธิ์ไม่สำเร็จ หรือเซิร์ฟเวอร์แบ็กเอนด์หยุดทำงาน) ให้แสดง
McpErrorพร้อมรหัสข้อผิดพลาดที่เหมาะสมเพื่อให้แพลตฟอร์มจัดการกับความล้มเหลวได้อย่างเป็นระบบ
ตัวอย่างเนื้อหาการตอบกลับข้อผิดพลาด (JSON)
{
"jsonrpc": "2.0",
"error": {
"code": -32302,
"message": "User permission denied for the requested operation.",
"data": null
},
"id": 1
}
Message มีดัมพ์ JSON ของช่อง ErrorData ของ MCP การแสดงผล code ที่ถูกต้องและ message ที่โมเดลมองเห็นได้จะช่วยให้แพลตฟอร์มแอปที่เชื่อมต่อสามารถอ่านข้อความแสดงข้อผิดพลาดและส่งต่อคำอธิบายที่เป็นประโยชน์ในภาษาธรรมชาติกลับไปยังผู้ใช้ได้ เช่น "ขออภัย ไม่พบสถานที่จัดงานที่มีรหัสดังกล่าว ช่วยตรวจสอบชื่อหน่อยได้ไหม"
MCP ช่วยให้ไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ MCP โดยใช้ข้อกำหนด JSON-RPC 2.0 ได้ JSON-RPC มีข้อผิดพลาดที่กำหนดไว้ล่วงหน้าบางอย่างซึ่งส่งสำหรับข้อผิดพลาดที่เกิดขึ้นบ่อย เช่น คำขอไม่ถูกต้อง ข้อผิดพลาดในการแยกวิเคราะห์ เป็นต้น คู่มือนี้จะอธิบายวิธีที่เซิร์ฟเวอร์ MCP สามารถส่งข้อผิดพลาดที่กำหนดเองกลับมา
| รหัส สถานะ |
ข้อความ | การใช้งาน | หากต้องการ แสดงผล อย่างชัดเจน |
|---|---|---|---|
| ข้อผิดพลาดของผู้ใช้/ลูกค้า | |||
| -32300 | USER_RATE_LIMITED | ผู้ใช้ใช้งานถึงขีดจำกัดการใช้งานสูงสุดแล้ว | ใช่ |
| -32301 | MISSING_REQUIRED_INFORMATION | คำขออินพุตไม่มีข้อมูลที่จำเป็นทั้งหมด | ใช่ |
| -32302 | USER_PERMISSION_DENIED | ผู้ใช้ปฏิเสธสิทธิ์ในการใช้เครื่องมือ เช่น ผู้ใช้ต้องมีบัญชีองค์กร การจำกัดอายุผู้ชม ภาษา ฯลฯ หรือไม่มีการสมัครใช้บริการเครื่องมือสำหรับองค์กร | ใช่ |
| ข้อผิดพลาดของแอปพลิเคชัน/ข้อผิดพลาดด้านตรรกะทางธุรกิจ | |||
| -32400 | RUNTIME_ERROR | การเรียกใช้โค้ดของเซิร์ฟเวอร์ทำให้เกิดข้อผิดพลาด | ใช่ |
| -32401 | NULL_POINTER_EXCEPTION | พยายามเรียกใช้พอยน์เตอร์/ออบเจ็กต์ Null | ใช่ |
| -32402 | OUT_OF_MEMORY | หน่วยความจำในโค้ดเซิร์ฟเวอร์ไม่เพียงพอที่จะจัดสรรให้กับออบเจ็กต์ | ใช่ |
| ข้อผิดพลาดเกี่ยวกับโครงสร้างพื้นฐาน | |||
| -32500 | DEADLINE_EXCEEDED | คำขอใช้เวลานานกว่าที่อนุญาต อาจเกิดขึ้นได้จากหลายสาเหตุ เช่น เซิร์ฟเวอร์ทำงานหนักเกินไป ปัญหาเครือข่าย เป็นต้น | ใช่ |
| -32501 | RESOURCE_EXHAUSTED | เซิร์ฟเวอร์มีหน่วยความจำไม่เพียงพอ พื้นที่ในดิสก์ เทรด เวลา CPU ฯลฯ ไม่เพียงพอ | ใช่ |
| -32502 | SERVICE_UNAVAILABLE | บริการที่เกี่ยวข้อง (เช่น Microservice, ฐานข้อมูล, แคช ฯลฯ อื่นๆ) ไม่พร้อมใช้งาน | ใช่ |
| ข้อผิดพลาด JSON-RPC (ข้อผิดพลาดเหล่านี้เป็นส่วนหนึ่งของการส่ง MCP) | |||
| -32700 | PARSE_ERROR | เซิร์ฟเวอร์แยกวิเคราะห์คำขอไม่ได้ | ไม่ |
| -32600 | INVALID_REQUEST | คำขอของไคลเอ็นต์มีรูปแบบไม่ถูกต้อง | ไม่ |
| -32601 | METHOD_NOT_FOUND | ชื่อเครื่องมือ MCP ไม่ถูกต้อง | ไม่ |
| -32602 | INVALID_PARAMS | พารามิเตอร์คำขอไม่ถูกต้อง รวมถึงไม่มีพารามิเตอร์หรือประเภทพารามิเตอร์ไม่ตรงกัน | ไม่ |
| -32603 | INTERNAL_ERROR | คำตอบเริ่มต้น | ไม่ |
ต่อไปนี้คือตัวอย่างวิธีสร้างข้อผิดพลาด MCP ในเซิร์ฟเวอร์โดยใช้ Python SDK อย่างเป็นทางการ (mcp) สร้าง McpError ที่มีเพย์โหลด ErrorData ซึ่ง SDK จะแปลงเป็นรูปแบบข้อผิดพลาด JSON-RPC ที่จำเป็นโดยอัตโนมัติพร้อมป้อนสถานะข้อผิดพลาด
from mcp import types
from mcp.shared.exceptions import McpError
@mcp.tool()
def foo_tool() -> list[types.TextContent]:
"""Always returns an error."""
raise McpError(
types.ErrorData(
code=-32302, # USER_PERMISSION_DENIED
message="Message to show to the model."
),
)
บริบทของเครื่องมือ
ผลิตภัณฑ์ Google ที่เกี่ยวข้องรองรับ Tool Context API สำหรับส่งสัญญาณไปยังเซิร์ฟเวอร์ MCP API นี้ใช้ในกรณีการใช้งานที่ถูกต้องซึ่งต้องใช้ข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลเมตาที่ไม่ได้เป็นส่วนหนึ่งของคำจำกัดความของเครื่องมือหลัก เช่น ในกรณีของภาษาสำหรับเครื่องมือที่ต้องมีการแปล Tool Context API จะแสดงผ่าน Connected Console เท่านั้น
เมื่อคุณลงทะเบียนสัญญาณ เช่น current_user_location_fine กับแอปใน Connected Console ผลิตภัณฑ์ Google ที่เกี่ยวข้องจะเพิ่มคำขอ MCP tools/call ด้วยรายการ _meta เพิ่มเติมที่ให้ข้อมูลที่ขอ ชุดสัญญาณที่รองรับมีดังนี้
current_user_location_fine(Gemini เท่านั้น สำหรับหมวดหมู่ที่ได้รับอนุญาต)user_localecurrent_user_location_coarse
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "find-restaurant",
"arguments": {"query": "restaurants near me"},
"_meta": {
"current_user_location_fine": {
"latitude_degrees": 37.7749,
"longitude_degrees": -122.4194,
"accuracy_meters": 112.4221
},
"user_locale": {
"language_code": "en",
"region_code": "US"
}
}
}
}
วิธีแยกข้อมูลนี้
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("remote_mcp")
@mcp.tool()
async def find_restaurants(query: str, ctx: Context) -> str:
# Access context directly from _meta
request_context = ctx.request_context
meta_dict = ctx.request_context.meta.model_dump() if ctx.request_context.meta else {}
location_context = meta_dict.get("current_user_location_fine", {})
lat = location_context.get("latitude_degrees")
lng = location_context.get("longitude_degrees")
if lat and lng:
return f"Finding '{query}' near ({lat}, {lng})"
return f"Finding '{query}' (no location provided)"
การแสดงผล UX
แอป MCP
ผลิตภัณฑ์ Google ที่เกี่ยวข้องรองรับการผสานรวมแอป MCP สำหรับเส้นทางของผู้ใช้ที่เลือกเพื่ออนุญาตให้สร้างอินเทอร์เฟซผู้ใช้ที่กำหนดเอง ทำตามข้อกำหนดสำหรับวิธีการผสานรวมทั่วไป
การผสานรวมแอป MCP ในผลิตภัณฑ์ Google ที่เกี่ยวข้องมาพร้อมกับข้อควรระวังต่อไปนี้
การนำเข้าทรัพยากร ณ เวลาที่ลงทะเบียน
ผลิตภัณฑ์ Google ที่เกี่ยวข้องจะดึงข้อมูลทรัพยากร UI ในระหว่างการนำเข้าเครื่องมือ เช่นเดียวกับรายการเครื่องมือและคำอธิบายเครื่องมือ ซึ่งหมายความว่าระบบจะไม่รับการอัปเดตทรัพยากร เช่น การเปลี่ยนแปลงใน JavaScript โดยอัตโนมัติ และต้องมีการนำเข้าเครื่องมืออีกครั้ง
ทรัพยากร UI รายการเดียวต้องมีขนาดไม่เกิน 15 MB และทรัพยากร UI สะสมในเซิร์ฟเวอร์ต้องไม่เกิน 100 MB
ทรัพยากร UI ต้องใช้ประเภท MIME ที่รองรับอย่างใดอย่างหนึ่งต่อไปนี้ text/html, text/javascript, text/css หรือ text/html;profile=mcp-app ประเภท MIME ที่ไม่ได้มาตรฐานหรือเฉพาะแพลตฟอร์มจะตรวจสอบไม่ผ่านเมื่อพุชไปยังตัวอย่าง
หลักเกณฑ์ CSP
ผลิตภัณฑ์ Google ที่เกี่ยวข้องจะเป็นไปตามข้อกำหนดอย่างเป็นทางการของ MCP Apps ซึ่งรวมถึง CSP [1], [2] และจะบล็อกคำขอที่ละเมิดคำสั่ง CSP
ผลิตภัณฑ์ Google ที่เกี่ยวข้องยังกำหนดให้เพิ่ม blob: และ data: ลงใน CSP ด้วย หากใช้ ระบบจะไม่เพิ่มรายการเหล่านี้โดยค่าเริ่มต้น นักพัฒนาแอปสามารถเลือกได้ว่าจะเพิ่ม (หรือไม่เพิ่ม) ลงใน CSP
Script-src เป็นข้อยกเว้น
คำสั่งเดียวที่เราอนุญาตคือ unsafe-inline (เพิ่มโดยค่าเริ่มต้น), wasm-unsafe-eval และ data: (หากรวมอยู่ใน resource_domains) หาก iframe กำลังโหลดสคริปต์ภายนอก คุณสามารถแก้ไขได้โดยการรวม JS ไว้ใน HTML หรือใช้แฮช Subresource Integrity (SRI)
ตัวเลือกที่ 1: JS แบบในบรรทัด/แพ็กเกจใน HTML (ง่ายที่สุด)
โค้ด JS ของแพ็กเกจ:
แทรกเนื้อหาของ
component-init.jsไว้ในแท็ก<script>โดยตรงในเพย์โหลด HTML ที่แสดงผลสำหรับทรัพยากร UI ดังนี้<script> // Paste component-init.js content directly here </script>
นำแท็ก
<script src>ระยะไกลออก- ลบการอ้างอิง
<script src="https://api.mycompany.com/...">ออกจากเอกสาร HTML
- ลบการอ้างอิง
เครื่องมืออัปเดต/นำเข้าอีกครั้ง
ตัวเลือกที่ 2: ใช้แฮช Subresource Integrity (SRI)
ใช้ตัวเลือกนี้หากต้องโฮสต์สคริปต์ภายนอกที่
https://api.company.com/...- คำนวณแฮช SHA-256 ของสคริปต์
- สร้างแฮช SHA-256 แบบ base64 ของ
component-init.js
- สร้างแฮช SHA-256 แบบ base64 ของ
- เพิ่มแฮชลงใน
resourceDomains(ต้องใส่คำนำหน้าsha256-เพื่อให้ตรงกับแอตทริบิวต์integrity) - อัปเดตแท็ก HTML
<script>- เพิ่มแอตทริบิวต์
integrityและcrossoriginลงในแท็กสคริปต์ในวิดเจ็ต HTML
- เพิ่มแอตทริบิวต์
- ยืนยันส่วนหัว CORS ใน CDN/เซิร์ฟเวอร์
- ตรวจสอบว่า
api.company.comแสดงcomponent-init.jsด้วยAccess-Control-Allow-Origin: *(หรืออนุญาตscf.usercontent.goog) เพื่อให้เบราว์เซอร์อ่านเนื้อหาการตอบกลับสำหรับการยืนยัน SRI ได้
- ตรวจสอบว่า
- เครื่องมือส่งข้อมูลอีกครั้ง/อัปเดต
- คำนวณแฮช SHA-256 ของสคริปต์
หลักเกณฑ์ด้านความปลอดภัยสำหรับคำอธิบายเครื่องมือ MCP
เนื่องจากคำอธิบายเป็นบริบทเดียวที่โมเดลมีเพื่อทำความเข้าใจความสามารถของเครื่องมือ จึงต้องเขียนคำอธิบายอย่างถูกต้องและปลอดภัยเพื่อป้องกันพฤติกรรมที่ไม่พึงประสงค์ โปรดปฏิบัติตามหลักเกณฑ์ต่อไปนี้เมื่อร่างคำอธิบายเครื่องมือ
- อธิบายฟังก์ชันการทำงาน แต่อย่ากำหนดลักษณะการทำงาน คำอธิบายต้องอธิบายสิ่งที่เครื่องมือทำอย่างถูกต้อง ไม่ใช่สั่งให้โมเดลดำเนินการต่อๆ ไป
- กำหนดขอบเขตและข้อกำหนด ระบุเป้าหมายหลักของเครื่องมือ สถานการณ์ที่เฉพาะเจาะจง (เมื่อใด) สำหรับการใช้งาน และอินพุต (พารามิเตอร์/อาร์กิวเมนต์) ที่จำเป็นทั้งหมดให้ชัดเจน
- ตรวจสอบความถูกต้อง คำอธิบายต้องแสดงถึงโค้ดพื้นฐานของเครื่องมืออย่างตรงไปตรงมา อย่าอ้างว่าเครื่องมือเป็นแบบอ่านอย่างเดียวหากเครื่องมือดำเนินการเขียนหรือลบ
ความเสี่ยงด้านความปลอดภัยและวิธีหลีกเลี่ยง
| พื้นที่เสี่ยง | แนะนำ | หลีกเลี่ยงแนวทางปฏิบัตินี้โดยเด็ดขาด |
|---|---|---|
การแทรกพรอมต์ |
ใช้ภาษาที่สื่อถึงวัตถุประสงค์และเป็นประโยคบอกเล่าเพื่อระบุวัตถุประสงค์และฟังก์ชันการทำงานของเครื่องมืออย่างชัดเจน |
ใช้คำสั่งบังคับเพื่อลบล้างลักษณะการทำงานของโมเดลหรือเปลี่ยนแปลงขั้นตอนของระบบ (เช่น "คุณต้องพูดว่า..." "หลังจากวิ่ง คุณต้อง...") คำสั่ง เช่น "ต้อง" หรือ "สำคัญ" จะยอมรับได้ก็ต่อเมื่อกำหนดข้อจำกัดของพารามิเตอร์ที่มีโครงสร้างหรือกฎการใช้งานเท่านั้น |
ใช้การจัดรูปแบบธรรมดามาตรฐานสำหรับข้อความคำอธิบายเครื่องมือ |
ใช้การจัดรูปแบบที่ดึงดูดความสนใจ เช่น การใช้อักษรตัวพิมพ์ใหญ่มากเกินไปและแท็ก เช่น |
|
มุ่งเน้นที่ฟังก์ชันและลักษณะการทำงานที่คาดหวังของเครื่องมือเท่านั้น |
มีคำสั่งหรือคำแนะนำให้สวมบทบาทเพื่อเพิกเฉยต่อคำแนะนำก่อนหน้า |
|
การแอบใช้และการลักลอบใช้เครื่องมือ |
ตรวจสอบว่าคำอธิบายมีความเจาะจงและจำกัดเฉพาะความสามารถจริงที่เกี่ยวข้องของเครื่องมือ |
เขียนคำอธิบายเครื่องมือที่กว้างหรือคลุมเครือเกินไป หรืออ้างว่าเครื่องมือเดียวสามารถทำฟังก์ชันที่ไม่เกี่ยวข้องได้หลายอย่าง |
เลือกชื่อเครื่องมือที่ไม่ซ้ำกัน สื่อความหมาย และสมเหตุสมผล |
ใช้ชื่อเครื่องมือที่แตกต่างจากเครื่องมือที่เชื่อถือได้เพียงเล็กน้อย หรือใช้ชื่อทั่วไป (เช่น |
|
อย่าพูดถึงชื่อเครื่องมือของแอปอื่นหรือแพลตฟอร์มภายนอกในคำอธิบาย |
อ้างอิงเครื่องมืออื่นๆ อย่างชัดเจน หรือสร้างกฎใหม่เกี่ยวกับเวลาหรือวิธีที่ควรใช้เครื่องมืออื่นๆ |
|
อนุญาตให้เครื่องมือวางแผนของโมเดลเลือกเครื่องมือที่เหมาะสมที่สุดตามบริบทของผู้ใช้ |
รวมภาษาที่ต่อต้านการแข่งขันหรือพรอมต์ SEO ประเภทใดก็ตามที่สั่งให้โมเดลเลือกใช้เครื่องมือของคุณมากกว่าเครื่องมือที่คล้ายกัน |
|
การจัดการทริกเกอร์ |
คำอธิบายไม่ได้อ้างอิงหรือตอบสนองต่อวลีในประวัติการสนทนาทั่วไป |
สร้างตรรกะแบบมีเงื่อนไขที่ทริกเกอร์การดำเนินการที่เป็นอันตรายโดยอิงตามวลีของผู้ใช้ที่พบบ่อยและไม่เป็นอันตราย (เช่น "ขอบคุณ" "เพื่อสรุป") |
การใช้พารามิเตอร์ในทางที่ผิด |
กำหนดเฉพาะพารามิเตอร์ที่จำเป็นสำหรับฟังก์ชันของเครื่องมือ และใช้ชื่อที่เจาะจงสำหรับข้อมูลอินพุต (เช่น |
กำหนดพารามิเตอร์ฟังก์ชันด้วยชื่อที่สอดคล้องกับสถานะภายในของ Agent (เช่น |
การขโมยข้อมูล |
การออกแบบโดยคำนึงถึงความเป็นส่วนตัว - ตัวระบุแบบทึบแสงและการตรวจสอบสิทธิ์ที่จัดการโดยโฮสต์ |
ขอ PII, PHI หรือข้อมูลส่วนบุคคลและ/หรือข้อมูลที่ละเอียดอ่อนอื่นๆ จากผู้ใช้ ข้อมูลส่วนตัวหรือข้อมูลทางธุรกิจ หรือนิติบุคคลในลักษณะใดก็ตามที่ละเมิดข้อกำหนดในการให้บริการของผลิตภัณฑ์ Google ที่เกี่ยวข้อง |
แนวทางปฏิบัติแนะนำด้านฟังก์ชันและการตั้งชื่อ
นอกจากการรักษาความปลอดภัยให้กับคำอธิบายเครื่องมือแล้ว คุณยังต้องตรวจสอบว่าโมเดลสามารถเลือกและดำเนินการได้อย่างน่าเชื่อถือโดยไม่สับสน ปฏิบัติตามแนวทางปฏิบัติแนะนำด้านฟังก์ชันและการตั้งชื่อต่อไปนี้
- ความถูกต้องของพารามิเตอร์ ตรวจสอบว่าชื่อและประเภทพารามิเตอร์ทั้งหมดในคำอธิบายตรงกับการใช้งานจริงของเครื่องมือทุกประการ
- การตั้งชื่อที่เหมาะสม ชื่อของเครื่องมือควรเป็นคำใบ้ที่ชัดเจนและชัดเจนเกี่ยวกับฟังก์ชันของเครื่องมือ หลีกเลี่ยงชื่อที่ธรรมดาเกินไป เช่น "execute" นอกจากนี้ ชื่อยังต้องสอดคล้องกับระบบนิเวศของเครื่องมือที่กว้างขึ้นด้วย
ภาคผนวก: การเพิ่มโครงสร้างพื้นฐานและเครือข่ายลงในรายการที่อนุญาต
หากโครงสร้างพื้นฐานการโฮสต์, เกตเวย์ API หรือไฟร์วอลล์จำกัดการเชื่อมต่อขาเข้าตามที่อยู่ IP ต้นทาง ให้เพิ่มบล็อก CIDR ขาออกของ Google ต่อไปนี้ลงในรายการที่อนุญาต
108.177.64.0/20142.250.88.0/22172.217.80.0/20192.178.20.0/22192.179.0.0/2074.125.232.0/24136.121.40.0/21
ตรวจสอบว่าสภาพแวดล้อมของคุณอนุญาตการเข้าชมจากช่วง IP เหล่านี้ในพอร์ต HTTPS 443 เพื่อให้ผลิตภัณฑ์ Google ที่เกี่ยวข้องเข้าถึงเซิร์ฟเวอร์ MCP ระยะไกลของคุณสำหรับการเริ่มต้น MCP, การค้นหาเครื่องมือ และการดำเนินการตามคำขอได้