การยึดมั่นในความเชี่ยวชาญด้านโดเมนของเอเจนต์ RMI ADK ด้วยทักษะ

ภาพรวม

โมเดลภาษาขนาดใหญ่มีความรู้ทั่วไปในวงกว้าง แต่ไม่ทราบเมตริกเฉพาะของโดเมน สคีมาฐานข้อมูล หรือสูตรการคำนวณ หากไม่มีบริบทนี้ โมเดลจะคาดเดา ซึ่งจะทำให้ SQL ไม่ถูกต้องและการวิเคราะห์มีข้อบกพร่อง

RMI ADK Agent แก้ไขข้อจำกัดนี้ผ่านทักษะ พิจารณาผู้ใช้ที่ถามว่า "เมื่อวานถนน Storrow Drive ติดขัดมากไหม" หากต้องการตอบ เจ้าหน้าที่ต้องทราบว่า RMI แสดงความหนาแน่นเป็นการดัชนีเวลาเดินทาง (TTI) ซึ่งเป็นอัตราส่วนของduration_in_seconds แบบเรียลไทม์ต่อstatic_duration_in_seconds แบบไม่มีการจราจรในตารางhistorical_travel_time เอเจนต์ที่ไม่มีทักษะอาจสร้างaverage_speedคอลัมน์ (รายงาน RMI จะแสดงความเร็วเชิงหมวดหมู่เท่านั้น ไม่ใช่กม./ชม.) หรือใช้ สูตรที่ไม่ถูกต้องแทน ซึ่งจะทำให้ได้คำตอบที่มั่นใจแต่ไม่ถูกต้อง

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

ข้อจำกัดของพรอมต์ระบบขนาดใหญ่

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

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

ทักษะ

ทักษะของเอเจนต์จะจัดระเบียบความรู้เฉพาะด้านเป็นโฟลเดอร์แบบโมดูลาร์ที่เอเจนต์ จะโหลดเมื่อจำเป็นเท่านั้น ทักษะแต่ละอย่างคือไดเรกทอรีที่มีไฟล์ SKILL.md พร้อมคำสั่งมาร์กดาวน์และส่วนหัว YAML

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

นอกจากนี้ ทักษะยังช่วยแยกความกังวลได้อย่างชัดเจน คุณสามารถเขียน ทดสอบ และ อัปเดตความสามารถแต่ละอย่างแยกกันได้โดยไม่ต้องเสี่ยงต่อผลข้างเคียงที่ไม่พึงประสงค์ ในโดเมนที่ไม่เกี่ยวข้อง โดยปกติแล้วเอเจนต์การผลิตจะใช้ทักษะที่มุ่งเน้นหลายอย่างแทนที่จะใช้พรอมต์ขนาดใหญ่เพียงอย่างเดียว

โครงสร้างของทักษะ

SKILL.md มี 2 ส่วน ได้แก่ ส่วนหัว YAML สำหรับการกำหนดเส้นทางและเนื้อหามาร์กดาวน์ สำหรับคำสั่ง

1. ส่วนหัว YAML

---
name: rmi-traffic-metrics-grounding
description: >
  Standard traffic performance metrics computable from RMI BigQuery
  tables. Covers congestion severity (TTI), delay, travel time
  reliability (LOTTR, BTI, PTI, CoV), congestion frequency, speed
  breakdowns, and network-wide congestion rates. Use when the user asks
  about traffic conditions, congestion, reliability, delay, or network
  health.
---

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

2. เนื้อความมาร์กดาวน์

เนื้อหาจะให้คำแนะนำเฉพาะโดเมนที่โมเดลจะทำตามเมื่อโหลดแล้ว เนื้อหาทักษะเมตริก RMI มีสูตร TTI ที่แน่นอน (duration_in_seconds / static_duration_in_seconds), เทมเพลต SQL ของ BigQuery ที่ได้รับการยืนยัน สำหรับเมตริกแต่ละรายการ และวลีทริกเกอร์ที่เชื่อมโยงความตั้งใจของผู้ใช้กับเมตริกที่ถูกต้อง การให้คำสั่งที่มีโครงสร้างและได้รับการยืนยันจะช่วยให้โมเดลทำงานได้อย่างถูกต้องและ ป้องกันไม่ให้โมเดลคาดเดารายละเอียดของสคีมาหรือสูตร

ลงทะเบียนทักษะด้วย ADK

จัดกลุ่มทักษะเป็น SkillToolset แล้วเพิ่มลงในรายการเครื่องมือของ Agent โดยทำดังนี้

from google.adk import skills
from google.adk.tools import skill_toolset

rmi_skill_toolset = skill_toolset.SkillToolset(
    skills=[
        # TRAFFIC_METRICS_SKILL_DIR points to the skill's SKILL.md folder.
        skills.load_skill_from_dir(TRAFFIC_METRICS_SKILL_DIR),
    ],
)

# root_agent = llm_agent.Agent(..., tools=[*bq_tools, rmi_skill_toolset])

ในที่นี้ TRAFFIC_METRICS_SKILL_DIR ชี้ไปยังไดเรกทอรีที่มีทักษะการอ้างอิงเมตริกการเข้าชม

รวมเครื่องมือเข้ากับทักษะ

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

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

คุณแนบเครื่องมือที่เฉพาะเจาะจงกับทักษะได้โดยตรงในส่วนหัว YAML ของทักษะ

metadata:
  adk_additional_tools:
    - calculate_custom_metric

เพื่อให้มั่นใจว่าโมเดลจะได้รับทั้งสคีมาเครื่องมือและวิธีการใช้งาน พร้อมกันในเวลาที่เหมาะสม ซึ่งจะช่วยให้ชุดเครื่องมือพื้นฐานมีขนาดเล็ก

ตัวอย่าง: การอ้างอิงคำค้นหาเกี่ยวกับความหนาแน่น

  1. ผู้ใช้ถามว่า "ถนนสโตรว์ไดรฟ์ติดขัดแค่ไหนในช่วงเวลาเร่งด่วนตอนเย็น"
  2. พรอมต์ของระบบฐานจะโฆษณาเฉพาะชื่อและคำอธิบายของแต่ละทักษะ ดังนั้น Agent จึงเห็นว่า rmi-traffic-metrics-grounding ครอบคลุม "การคั่ง" และเรียกใช้ load_skill เพื่อดึงคำสั่งแบบเต็มสำหรับคำค้นหานี้
  3. เมื่อโหลดทักษะแล้ว Agent จะใช้คำจำกัดความ TTI และเทมเพลต SQL ที่ได้รับการยืนยันซึ่งมีให้ โดยจะคำนวณอัตราส่วนเทียบกับ historical_travel_time แทนที่จะคาดเดาสูตร

เนื่องจากระบบจะดึงข้อมูลเนื้อหาของทักษะเมื่อคำค้นหาต้องการเท่านั้น ทักษะที่เอเจนต์ไม่เคยใช้จึงไม่เคยเข้าสู่บริบท ทำให้พรอมต์ของระบบฐานมีขนาดเล็ก

สรุปประเด็นสำคัญ

  • อิงตามคำแนะนำเกี่ยวกับโดเมน: ระบุวิธีการ ข้อจำกัด และตรรกะทางธุรกิจอย่างชัดเจนแทนที่จะอาศัยสมมติฐานทั่วไปของโมเดล
  • ใช้ทักษะแบบแยกส่วน: แบ่งความรู้เป็นทักษะที่มุ่งเน้นแทนที่จะใช้พรอมต์ของระบบขนาดใหญ่เพียงรายการเดียวเพื่อประหยัดโทเค็น ลดเวลาในการตอบสนอง และปรับปรุงความแม่นยำ
  • เขียนคำอธิบายที่ชัดเจน: ใส่วลีทริกเกอร์และคีย์เวิร์ดที่เฉพาะเจาะจง ในคำอธิบายของแต่ละทักษะเพื่อให้เอเจนต์โหลดทักษะได้อย่างน่าเชื่อถือ
  • ใส่ตัวอย่างที่เป็นรูปธรรม: เพิ่มตัวอย่างที่ได้รับการยืนยันและเวิร์กโฟลว์อ้างอิงลงในเนื้อหาของทักษะเพื่อให้เอาต์พุตมีความสอดคล้องและถูกต้อง
  • รวมเครื่องมือเพื่อความแน่นอน: แนบเครื่องมือที่เรียกใช้งานได้กับทักษะเพื่อ จัดการการตรวจสอบและการดำเนินการอย่างเข้มงวดในขณะที่ยังคงชุดเครื่องมือพื้นฐานให้มีขนาดเล็ก

ขั้นตอนถัดไป

ผู้ร่วมให้ข้อมูล

Nathaniel Thomas | นักศึกษาฝึกงานด้านวิศวกรรมซอฟต์แวร์, Google Maps Platform