เมื่อคุณค้นหา Developer Knowledge API หรือเซิร์ฟเวอร์ Developer Knowledge MCP ในแอปพลิเคชันที่ใช้งานจริง และเอเจนต์ AI จะต้องมีการจัดการข้อผิดพลาดและการจัดการโควต้าเพื่อให้ได้ประสิทธิภาพสูง
ในคู่มือนี้ คุณจะได้เรียนรู้วิธีการทำสิ่งต่อไปนี้
- ใช้ Exponential Backoff ที่ถูกตัดทอนพร้อม Jitter สำหรับการตอบกลับ HTTP 429
- จัดการรหัสข้อผิดพลาด gRPC ที่เป็น Canonical (
INVALID_ARGUMENT,PERMISSION_DENIED,RESOURCE_EXHAUSTED) - จัดการการหมดเวลาการเชื่อมต่อ MCP และตรรกะการลองใหม่
- ใช้แนวทางปฏิบัติแนะนำในการจัดการโควต้าและการแคช
การจำกัดอัตราคำขอ HTTP 429 และ Exponential Backoff
เมื่ออัตราคำขอเกินโควต้า API เริ่มต้น บริการจะแสดงข้อผิดพลาด
HTTP 429 Too Many Requests แอปพลิเคชันต้องใช้ตรรกะการลองใหม่
โดยใช้ Exponential Backoff ที่ถูกตัดทอนพร้อม Jitter เพื่อหลีกเลี่ยงการโอเวอร์โหลดบริการ
Exponential Backoff ที่ถูกตัดทอน
คำนวณการหน่วงเวลาการลองใหม่โดยใช้สูตรต่อไปนี้
retry_delay = min(max_delay, initial_delay * (2 ^ attempt) + jitter)
ใช้พารามิเตอร์ต่อไปนี้เพื่อคำนวณระยะเวลาก่อนลองใหม่
initial_delay: ระยะเวลาก่อนที่จะลองใหม่ครั้งแรก (เช่น 1.0 วินาที)max_delay: ขีดจำกัดสูงสุดของการหยุดชั่วคราว (เช่น 32.0 วินาที)attempt: จำนวนครั้งที่ลองใหม่ในปัจจุบัน (0, 1, 2, ...)jitter: ค่าแบบสุ่มระหว่าง 0 ถึง 1.0 วินาทีเพื่อป้องกันไม่ให้เกิดการเพิ่มขึ้นของ การซิงโครไนซ์เธรด (ปัญหาฝูงชนที่วิ่งตามกัน)
การจัดการข้อผิดพลาดของ gRPC
แอปพลิเคชันที่เข้าถึงบริการผ่าน gRPC ต้องตรวจสอบค่า grpc.StatusCode ที่เป็นมาตรฐาน
รหัสสถานะ gRPC มาตรฐาน
ตารางต่อไปนี้แสดงรหัสสถานะ gRPC ที่เป็นมาตรฐานซึ่งบริการส่งคืน และการจัดการฝั่งไคลเอ็นต์ที่แนะนำ
| รหัสสถานะ gRPC | สถานะ HTTP | สาเหตุของปัญหา | การดำเนินการที่แนะนำ |
|---|---|---|---|
INVALID_ARGUMENT |
400 Bad Request |
สตริงการค้นหามีรูปแบบไม่ถูกต้อง รูปแบบพารามิเตอร์ไม่ถูกต้อง หรือมาสก์ฟิลด์ไม่ถูกต้อง | ไม่ต้องลองใหม่ แก้ไขพารามิเตอร์คำขอก่อนทำซ้ำ |
UNAUTHENTICATED |
401 Unauthorized |
ไม่มีคีย์ API หรือโทเค็นผู้ถือ OAuth หรือคีย์ API หรือโทเค็นผู้ถือ OAuth หมดอายุหรือมีรูปแบบไม่ถูกต้อง | ไม่ต้องลองใหม่ รีเฟรชข้อมูลเข้าสู่ระบบหรือสร้างคีย์ API ที่ถูกต้อง |
PERMISSION_DENIED |
403 Forbidden |
คีย์ API ไม่มีสิทธิ์หรือปิดใช้ Developer Knowledge API ในโปรเจ็กต์ | ไม่ต้องลองใหม่ ยืนยันการเปิดใช้ API ในคอนโซล Google Cloud |
NOT_FOUND |
404 Not Found |
ไม่มีเส้นทางเอกสาร parent ที่ระบุ BatchGetDocuments จะล้มเหลวโดยอัตโนมัติหากไม่พบเอกสารที่ขอ |
ไม่ต้องลองใหม่ ยืนยันชื่อทรัพยากรของเอกสาร |
RESOURCE_EXHAUSTED |
429 Too Many Requests |
เกินขีดจำกัดของอัตราหรือโควต้าโปรเจ็กต์ | ลองอีกครั้งโดยใช้ Exponential Backoff พร้อม Jitter |
UNAVAILABLE |
503 Service Unavailable |
การยกเลิกการเชื่อมต่อเครือข่ายชั่วคราวหรือการรีสตาร์ทเซิร์ฟเวอร์ | ลองอีกครั้งโดยใช้ Exponential Backoff |
DEADLINE_EXCEEDED |
504 Gateway Timeout |
คำขอเกินกำหนดเวลา RPC ที่กำหนดค่าไว้ก่อนที่จะเสร็จสมบูรณ์ | ลองอีกครั้งโดยเพิ่มระยะหมดเวลา RPC ของไคลเอ็นต์ |
การจัดการข้อผิดพลาดและการหมดเวลาการเชื่อมต่อ MCP
เซิร์ฟเวอร์ MCP ความรู้สำหรับนักพัฒนาซอฟต์แวร์เป็นบริการระยะไกลที่โฮสต์อยู่ที่
https://developerknowledge.googleapis.com/mcp ซึ่งเข้าถึงได้ผ่าน HTTPS (โดยใช้ HTTP
POST หรือเหตุการณ์ที่เซิร์ฟเวอร์ส่ง) โฮสต์และเอเจนต์ AI ต้องจัดการการหมดเวลาการเชื่อมต่อ
และข้อผิดพลาดของเครื่องมืออย่างเหมาะสม
การหมดเวลาการดำเนินการเครื่องมือ
เมื่อเอเจนต์เรียกใช้ search_documents, get_documents หรือ answer_query
การเรียกใช้เครื่องมืออาจเกินระยะหมดเวลา (เช่น 30 วินาที) หากการเชื่อมต่อเครือข่าย
ล่าช้า
วิธีจัดการการหมดเวลาการดำเนินการเครื่องมือ
- กำหนดค่าการหมดเวลาของไคลเอ็นต์: ตั้งค่าการหมดเวลาการดำเนินการเครื่องมือเป็น 30-60 วินาที ในการกำหนดค่าไคลเอ็นต์โฮสต์ MCP
- จัดการการหยุดชะงักของเครือข่าย: ลองส่งคำขอ HTTP ที่ล้มเหลวอีกครั้งด้วย Exponential Backoff เมื่อเครือข่ายขาดหายไปชั่วคราวหรือได้รับการตอบกลับ HTTP 503
- ตรวจสอบข้อความแสดงข้อผิดพลาด: แยกวิเคราะห์ข้อความแสดงข้อผิดพลาด JSON-RPC มาตรฐานหรือรหัสสถานะข้อผิดพลาด HTTP เพื่อแยกแยะอาร์กิวเมนต์ที่ไม่ถูกต้องจากการใช้โควต้าจนหมด
แนวทางปฏิบัติแนะนำในการจัดการโควต้า
ทําตามแนวทางปฏิบัติแนะนําเหล่านี้เพื่อรักษาการใช้งาน API ให้ได้ประสิทธิภาพสูงสุดและหลีกเลี่ยงการจํากัดอัตราที่ไม่คาดคิด
- แคชเนื้อหาเอกสารที่ดึงข้อมูล: จัดเก็บเอกสารมาร์กดาวน์ที่ดึงข้อมูล ไว้ในเครื่องหรือในแคช (เช่น Redis) เมื่อสร้างแอปพลิเคชันที่ เข้าถึงหน้าเดียวกันบ่อยๆ
- ใช้การดึงข้อมูลแบบเป็นกลุ่ม: ใช้
documents.batchGetแทนการส่งคำขอdocuments.getหลายรายการตามลำดับ - เพิ่มประสิทธิภาพช่องการค้นหา: ขอเฉพาะช่องการตอบกลับที่จำเป็นโดยใช้
มาสก์ฟิลด์แบบเลือก
(
fields=results(parent,content)) - ตรวจสอบการใช้โควต้า: ติดตามอัตราคำขอ API ในแดชบอร์ด API ของคอนโซล Google Cloud