תחילת העבודה עם מדיניות בנושא טוקנים של LLM

הדף הזה מתייחס ל-Apigee, אבל לא ל-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

סקירה כללית

מדיניות הטוקנים של LLM ב-Apigee חיונית לשליטה בעלויות, לאופטימיזציה של הביצועים וליציבות הפלטפורמה. המדיניות הזו מתבססת על מדדים של שימוש בטוקנים של LLM וטוקנים של הנחיות משתמשים כדי לאכוף מגבלות ולספק מעקב בזמן אמת.

במאמר הזה נסביר איך מתחילים להשתמש במדיניות הבאה בנושא טוקנים של מודלים גדולים של שפה (LLM):

  • המדיניות PromptTokenLimit: מגנה על יעדים מפני שימוש לרעה באסימונים על ידי הגבלת קצב האסימונים על סמך הודעת ההנחיה למשתמש. המדיניות PromptTokenLimit דומה למנגנון להגבלת שימוש ב-CPU במקרה של עלייה חדה בביקוש, והיא מיועדת להנחיות ל-AI. הוא עוזר לכם לשלוט בקצב השימוש בטוקנים מהנחיות למשתמשים, כדי למנוע ניצול לרעה ולוודא שלא יהיה עומס יתר על שירותי הקצה העורפי.
  • מדיניות LLMTokenQuota: שולטת בהוצאות על LLM ומחילת ניהול מכסות גרנולרי שמבוסס על מוצרי API. המדיניות LLMTokenQuota מאפשרת לכם לאכוף מגבלות על צריכת טוקנים בממשקי ה-API של LLM במהלך תקופת זמן ספציפית (למשל, לדקה, לשעה, ליום או לחודש). הנתונים האלה חשובים מאוד לניהול העלויות ולהבטחה של שימוש הוגן בשירותי ה-AI.

המדיניות PromptTokenLimit

כדי להגן על שירותי הקצה העורפי מפני קפיצות פתאומיות בשימוש באסימונים מהנחיות משתמשים, אפשר להשתמש במדיניות PromptTokenLimit. לדוגמה, אפשר להגביל את מספר האסימונים בדקה למספר סביר כדי למנוע ממשתמש יחיד להעמיס על השירות.

מוסיפים את המדיניות הזו לזרימת הבקשות של ה-proxy ל-API.

בדוגמה הבאה של מדיניות PromptTokenLimit, קצב האסימונים מוגבל ל-1,000 אסימונים לדקה:

<PromptTokenLimit continueOnError="false" enabled="true" name="PTL-limitTokens-1">
  <DisplayName>Limit Prompt Tokens</DisplayName>
  <!-- The rate at which to limit tokens. Here, 1,000 per minute -->
  <Rate>1000pm</Rate>
  <!-- Specifies where to get the user's prompt from the request -->
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</PromptTokenLimit>

כאשר:

  • <Rate>: קצב הגבלת האסימונים.
  • <UserPromptSource>: מציין מאיפה לקבל את ההנחיה של המשתמש מהבקשה.

בדף ההפניה PromptTokenLimit policy מפורטים:

מגדירים את המדיניות PromptTokenLimit בממשק המשתמש של Apigee כשמבצעים את המשימות הבאות:

מדיניות LLMTokenQuota

משתמשים במדיניות LLMTokenQuota כשרוצים להגדיר ולאכוף מכסות של צריכת אסימונים למוצרי API שונים, למפתחים או לאפליקציות שונות. לדוגמה, אפשר להציע מכסות שונות של טוקנים לרמות שונות של מינויים.

אפשר להשתמש במדיניות בשתי דרכים עיקריות:

  • ספירת טוקנים: אפשר להשתמש בהגדרה CountOnly כדי לעקוב אחרי השימוש בטוקנים בלי להגביל אותו. כדאי להיעזר בזה אם רוצים לעקוב אחרי הנתונים ולדווח עליהם.
  • אכיפת מכסות: משתמשים בהגדרה EnforceOnly כדי לדחות קריאות ל-API אחרי שחורגים ממכסת הטוקנים.

מוסיפים מדיניות EnforceOnly לתהליך הבקשה כדי לבדוק אם חרגתם מהמכסה. מוסיפים מדיניות CountOnly לתהליך התשובה כדי לספור את האסימונים שנעשה בהם שימוש בתשובה של ה-LLM.

בדוגמה הבאה של מדיניות LLMTokenQuota נאכפת מכסה של 10,000 טוקנים לשעה, וההגדרות נלקחות באופן דינמי ממוצר API:

<LLMTokenQuota name="Quota-Enforce-Only" type="rollingwindow">
  <EnforceOnly>true</EnforceOnly>
  <!-- The interval and time unit for the quota -->
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.timeunit">hour</TimeUnit>
  <!-- The number of tokens allowed in the interval -->
  <Allow count="10000" countRef="verifyapikey.verify-api-key.apiproduct.developer.llmQuota.limit"/>
  <!-- Specifies where to get the token usage from the LLM's response -->
  <LLMTokenUsageSource>{jsonPath('$.usageMetadata.candidatesTokenCount',response.content,true)}</LLMTokenUsageSource>
  <!-- Specifies where to get the model name from the LLM's response -->
  <LLMModelSource>{jsonPath('$.model',response.content,true)}</LLMModelSource>
</LLMTokenQuota>

כאשר:

  • <EnforceOnly>: כשהערך מוגדר ל-true, נעשה שימוש ברכיב הזה כדי לדחות קריאות ל-API אחרי שחורגים ממכסת הטוקנים. כך ספקי API יכולים להגדיר מגבלות מחמירות על מספר הטוקנים שאפליקציות צורכות במרווח זמן מוגדר.
  • <Interval>: הרכיב הזה מציין את מרווח הזמן שבו מחושב מספר הטוקנים מתשובות של מודל שפה גדול. הוא משמש בשילוב עם <TimeUnit> ועם <Allow> כדי להגדיר את מכסת האסימונים.
  • <TimeUnit>: הרכיב הזה מגדיר את יחידת הזמן של <Interval>. הערכים התקפים כוללים minute,‏ hour,‏ day או month.
  • <Allow>: האלמנט הזה מגדיר את מספר האסימונים שמותרים ב-<Interval>.
  • <LLMTokenUsageSource>: הרכיב הזה מספק את המקור של השימוש בטוקן מתוך תגובת ה-LLM. הוא צריך להיות תבנית הודעה שמספקת ערך יחיד של השימוש בטוקן.
  • <LLMModelSource>: הרכיב הזה מספק את המקור של המודל מתוך התגובה או הבקשה של ה-LLM. הוא צריך להיות תבנית הודעה שמספקת ערך יחיד של שם המודל.

במאמר LLMTokenQuota policy מפורטים:

מגדירים את מדיניות LLMTokenQuota בממשק המשתמש של Apigee כמו שמתואר בקטעים הבאים:

מגבלות

יש מגבלות על כללי המדיניות בנושא אסימונים של מודלים גדולים של שפה (LLM):

  • הגבלות על המדיניות LLMTokenQuota
    • בשלב הזה, המדיניות תומכת רק בטוקנים מבוססי-טקסט.
    • יכול להיות שהבקשה האחרונה שמותרת תצרוך יותר טוקנים מהמכסה שנותרה.
    • המדיניות מחייבת לציין את נתיב ה-JSON המדויק של טוקני ה-LLM שנצרכו במטען הייעודי (payload) של התגובה, ולא ניתן לזהות אותו באופן אוטומטי.
  • מגבלות המדיניות PromptTokenLimit
    • בשלב הזה, המדיניות תומכת רק בטוקנים מבוססי-טקסט.
    • המדיניות משתמשת בספרייה רגילה כדי לספור את הטוקנים, והספירה הזו עשויה להיות שונה מהספירה של ספקי מודלים גדולים של שפה (LLM) מסוימים.
    • המדיניות דורשת את נתיב ה-JSON המדויק של טקסט ההנחיה, ולא ניתן למצוא אותו באופן דינמי.

מידע נוסף