אפשר להשתמש בקוד Python בכלים של Python ובפונקציות קריאה חוזרת (callback). במאמר הזה מוסבר על זמן הריצה של Python, על אפשרויות הייבוא והמחלקות, על משתנים גלובליים ועל פונקציות שאפשר להשתמש בהן בקוד.
סביבת Python
הכלים וההחזרות (callbacks) של Python פועלים בסביבת ארגז חול מאובטחת. בסביבה הזו פועלת Python 3.12.
ייבוא
היכולת לייבא מודולים מוגבלת לאפשרויות הבאות:
כיתות
AsyncTools
שם חלופי של מחלקה להפעלת כלי שיחה באופן אסינכרוני.
מידע נוסף זמין במאמר בנושא async_tools משתנה גלובלי.
Blob
נתוני בייטים מוטמעים.
מאפיינים:
| מאפיין | תיאור |
|---|---|
display_name: Optional[str] |
השם המוצג של Blob. משמש כדי לספק תווית או שם קובץ להבחנה בין ה-blobs. |
data: Optional[bytes] |
בייטים בקידוד Base64. |
raw_data: Optional[bytes] |
בייטים גולמיים מפוענחים. |
mime_type: Optional[str] |
סוג ה-MIME התקני של IANA של נתוני המקור. |
שיטות:
| Method | תיאור |
|---|---|
transcript() -> Optional[str] |
הפונקציה מחזירה תמליל שמאוחסן במטמון של נתוני Blob, אם הוא זמין. ההגדרה הזו רלוונטית רק ל-blob של אודיו. |
from_json(data: str) -> Blob |
שיטה של מחלקה ליצירת מופע Blob ממחרוזת JSON, כאשר mime_type מוגדר כ-'application/json'. |
דוגמאות:
# Create a blob from raw bytes
blob = Blob(mime_type='text/plain')
blob.raw_data = b'hello world'
# Create a blob from a JSON string
Blob.from_json(data='{"key": "value"}')
CallbackContext
פרטי הסשן שזמינים במהלך שיחת החזרה.
מאפיינים:
| מאפיין | תיאור |
|---|---|
user_content: Optional[Content] |
הקלט האחרון מהמשתמש. |
invocation_id: str |
מזהה ייחודי של הפעלת הקריאה החוזרת הספציפית, שימושי לניפוי באגים. |
agent_name: str |
השם לתצוגה של הנציג שמשויך לשיחה החוזרת הנוכחית. |
session_id: str |
מזהה סשן ייחודי של הסשן הנוכחי שמתנהל. |
variables: dict[str, Any] |
מילון שמכיל צמדי מפתח/ערך של משתנים שהוגדרו בזמן העיצוב או שהוזרקו במהלך זמן הריצה. זהו המצב הנוכחי של המשתנים ברגע הביצוע של הקריאה החוזרת. |
state: dict[str, Any] |
בדיוק כמו בנכס variables. |
events: list[Event] |
אירועים ברמת הסשן. |
שיטות:
| Method | תיאור |
|---|---|
get_variable(key: str, default: Any) -> Any |
מקבל משתנה מהמצב. אם המשתנה לא קיים, מחזירים את ברירת המחדל. |
set_variable(key: str, value: Any) -> None |
מגדיר משתנה במצב. |
remove_variable(key: str) -> None |
הסרת משתנה מהמצב. |
get_last_user_input() -> list[Part] |
מקבל רשימה של כל החלקים בחלק האחרון של אירועי המשתמשים. |
get_last_agent_output() -> list[Part] |
מקבל רשימה של כל החלקים בחלק האחרון של אירועי הסוכן. |
parts() -> list[Part] |
רשימה של כל החלקים שתועדו בהיסטוריית הפעילות. |
Content
תוכן ההודעה מהמשתמש או מהסוכן.
מאפיינים:
| מאפיין | תיאור |
|---|---|
parts: Optional[list[Part]] |
רשימה של חלקים שמרכיבים הודעה אחת. לכל חלק יכול להיות סוג MIME שונה של IANA. |
role: Optional[str] |
התפקיד של יוצר התוכן. 'user' או 'agent'. |
שיטות:
| Method | תיאור |
|---|---|
is_user() -> bool |
הפונקציה מחזירה True אם התפקיד הוא 'user'. |
is_model() -> bool |
הפונקציה מחזירה True אם התפקיד הוא 'model'. |
Event
ייצוג של אירוע בסשן.
מאפיינים:
| מאפיין | תיאור |
|---|---|
id: str |
מזהה האירוע. |
invocation_id: str |
מזהה הפעלת האירוע. |
author: str |
'user' או שם הסוכן, שמציין מי השתתף באירוע בסשן. |
timestamp: int |
חותמת הזמן של האירוע. |
content: Content |
התוכן שמשויך לאירוע הזה. |
actions: EventActions |
הפעולות שהסוכן ביצע. |
long_running_tool_ids: set[str] |
קבוצת מזהים של קריאות לפונקציות ממושכות. |
partial: bool |
True לחלקים לא שלמים מהתשובה של מודל שפה גדול (LLM) שמוצגת באופן שוטף. |
turn_complete: bool |
True אם התור הנוכחי הסתיים. |
error_code: str |
קוד שגיאה. |
error_message: str |
הודעת שגיאה. |
interrupted: bool |
True אם התור להשתתפות בשיחה הופסק. |
branch: str |
הענף של האירוע. הפורמט הוא כמו agent_1.agent_2.agent_3, כאשר agent_1 הוא ההורה של agent_2, ו-agent_2 הוא ההורה של agent_3.הענף משמש כשלא רוצים שמספר סוכני משנה יראו את היסטוריית השיחות של הסוכנים העמיתים שלהם. |
grounding_metadata: Any |
מטא-נתונים של ביסוס האירוע. |
שיטות:
| Method | תיאור |
|---|---|
is_user() -> bool |
True אם מחבר האירוע הוא 'משתמש'. |
is_agent(agent_name: Optional[str] = None) -> bool |
True אם מחבר האירוע הוא סוכן. אם מצוין agent_name, המערכת בודקת אם המחבר תואם לסוכן הספציפי הזה. |
has_error() -> bool |
True אם לאירוע יש קוד שגיאה משויך. |
parts() -> list[Part] |
שיטה נוחה לקבלת רשימת אובייקטים של Part מה-content של האירוע. מחזירה רשימה ריקה אם אין תוכן או חלקים. |
EventActions
פעולות שמתרחשות באירועים.
מאפיינים:
| מאפיין | תיאור |
|---|---|
skip_summarization: bool |
אם הערך הוא True, המודל לא מופעל כדי לסכם את תשובת הפונקציה. השדה הזה משמש רק לאירוע function_response. |
state_delta: dict[str,Any] |
השינויים במשתנים שנגרמו על ידי האירוע הזה. |
artifact_delta: dict[str,Any] |
השינויים שבוצעו בארטיפקטים על ידי האירוע הזה. המפתח הוא שם הקובץ, והערך הוא הגרסה. |
transfer_to_agent: str |
אם מוגדר, האירוע מועבר לסוכן שצוין. |
escalate: bool |
הסוכן מעביר את השיחה לסוכן ברמה גבוהה יותר. |
requested_auth_configs: dict[str,dict[str,Any]] |
הגדרות אימות שנדרשות בתגובות של כלים. השדה הזה מוגדר רק על ידי אירוע תגובה של כלי שמציין פרטי אימות של בקשת כלי. מפתחות: המזהה של קריאת הפונקציה. כי אירוע אחד של תגובה לפונקציה יכול להכיל כמה תגובות לפונקציה שמתאימות לכמה קריאות לפונקציה. כל קריאה לפונקציה יכולה לבקש הגדרות שונות של הרשאות. המזהה הזה משמש לזיהוי הקריאה לפונקציה. ערכים: הגדרת האימות המבוקשת. |
end_invocation: bool |
הלולאה של הסוכן נקטעת. |
ExternalResponse
מייצג תגובה מחוץ לסביבת Python, כמו קריאה לכלי או בקשת HTTP.
מאפיינים:
| מאפיין | תיאור |
|---|---|
text: str |
תוכן התשובה כמחרוזת. |
status_code: int |
קוד הסטטוס של HTTP. |
reason: str |
הסיבה להצגת השגיאה. אם אין שגיאה, השדה ריק. |
ok: bool |
True אם status_code קטן מ-400, אחרת False. |
שיטות:
| Method | תיאור |
|---|---|
json() -> Any |
הפונקציה מנתחת את ה-JSON של מאפיין הטקסט ומחזירה את התוצאה. אם הניתוח ייכשל, תופעל שגיאה. |
raise_for_status() |
מועלית שגיאה StatusError אם התשובה לא תקינה (ok == False). |
FunctionCall
מייצג בקשה להפעלת פונקציה.
מאפיינים:
| מאפיין | תיאור |
|---|---|
id: Optional[str] |
המזהה הייחודי של הקריאה לפונקציה. |
args: Optional[dict[str,Any]] |
הפרמטרים והערכים של הפונקציה בפורמט אובייקט JSON. |
name: Optional[str] |
שם הפונקציה. |
FunctionDeclaration
FunctionCall חזוי שמוחזר מהמודל, שמכיל מחרוזת שמייצגת את מאפיין name FunctionDeclaration עם הפרמטרים והערכים שלהם.
מאפיינים:
| מאפיין | תיאור |
|---|---|
name: Optional[str] |
שם הפונקציה. |
FunctionResponse
התוצאה של FunctionCall
שמכילה מחרוזת שמייצגת את מאפיין FunctionDeclaration name ואובייקט JSON מובנה שמכיל את הפלט של הקריאה לפונקציה.
הוא משמש כהקשר למודל.
מאפיינים:
| מאפיין | תיאור |
|---|---|
id: Optional[str] |
המזהה של קריאת הפונקציה התואמת. |
name: Optional[str] |
שם הפונקציה. |
response: Optional[dict[str,Any]] |
התגובה של הפונקציה בפורמט אובייקט JSON. משתמשים במפתח 'פלט' כדי לציין את פלט הפונקציה ובמפתח 'שגיאה' כדי לציין את פרטי השגיאה (אם יש). אם לא מציינים את המפתחות output ו-error, המערכת מתייחסת לכל התגובה כפלט של הפונקציה. |
GenerateContentConfig
פרמטרים אופציונליים להגדרת המודל.
מאפיינים:
| מאפיין | תיאור |
|---|---|
system_instruction: Optional[Content] |
הוראות למודל כדי לשפר את הביצועים. לדוגמה, "תענה בצורה תמציתית ככל האפשר" או "אל תשתמש במונחים טכניים בתשובה שלך". |
tools: Optional[list[ToolDeclaration]] |
רשימה של כלים זמינים שהמודל יכול להשתמש בהם. |
excluded_tools: Optional[list[str]] |
רשימה של שמות כלים שהמודל יתעלם מהם. ההגדרה הזו מבטלת את tools. |
שיטות:
| Method | תיאור |
|---|---|
hide_tool(tool_name: str) |
tool_name נוסף לרשימה excluded_tools. |
HttpMethod
סוג enum של מחרוזת שמייצג שיטת HTTP. הערכים האפשריים הם:
GETPOSTPUTDELETEPATCHHEADOPTIONS
LlmRequest
מודלים של נתונים לייצוג בקשות ל-LLM.
מאפיינים:
| מאפיין | תיאור |
|---|---|
model: Optional[str] |
שם הדגם |
contents: List[Content] |
רשימת התוכן שנשלח למודל. |
config: Optional[GeneralContentConfig] |
פרמטרים להגדרת המודל. |
LlmResponse
מודלים של נתונים לייצוג תשובות מ-LLM.
מאפיינים:
| מאפיין | תיאור |
|---|---|
content: Content |
התשובה הראשונה של המודל.Content |
partial: Optional[bool] |
מציין אם התוכן מייצג תגובה חלקית של מודל. הסוכן ימשיך את העיבוד אחרי שיפלוט את התגובה החלקית. |
שיטות:
| Method | תיאור |
|---|---|
from_parts(parts: list[Part]) -> LlmResponse |
שיטת מחלקה שמחזירה LlmResponse מהמודל. |
דוגמאות:
response = LlmResponse.from_parts(
parts=[
Part.from_text(text="hello world")
]
)
Part
סוג נתונים שמכיל תוכן מדיה.
צריך להגדיר בדיוק שדה אחד בתוך Part, שמייצג את סוג התוכן הספציפי שמועבר.
שימוש בכמה שדות באותו מופע של Part נחשב לשימוש לא תקין.
מאפיינים:
| מאפיין | תיאור |
|---|---|
function_call: Optional[FunctionCall] |
תחזית FunctionCall שמוחזרת מהמודל ומכילה מחרוזת שמייצגת את שם הפונקציה ואובייקט JSON מובנה שמכיל את הפרמטרים והערכים שלהם. |
function_response: Optional[FunctionResponse] |
פלט התוצאה של FunctionCall שמכיל מחרוזת שמייצגת את שם הפונקציה ואובייקט JSON מובנה שמכיל את הפלט של הקריאה לפונקציה. הוא משמש כהקשר למודל. |
text: Optional[str] |
טקסט ההודעה. |
inline_data: Optional[Blob] |
נתוני בייטים מוטמעים. |
שיטות:
| Method | תיאור |
|---|---|
text_or_transcript() -> Optional[str] |
הפונקציה מחזירה את הטקסט אם הוא זמין, אחרת היא מחזירה את התמליל של הנתונים בתוך התג. |
has_function_call(name) -> bool |
הפונקציה מחזירה True אם החלק מכיל קריאה לפונקציה ספציפית. |
has_function_response(name) -> bool |
הפונקציה מחזירה True אם החלק מכיל תגובה ספציפית של פונקציה. |
from_text(text: str) -> Part |
שיטת מחלקה שיוצרת טקסט Part. |
from_function_call(name: str, args: dict[str, Any]) -> Part |
שיטת כיתה שיוצרת קריאה לפונקציה Part. |
from_function_response(name: str, response: dict[str, Any]) -> Part |
שיטת מחלקה שיוצרת תשובה של פונקציה Part. |
from_inline_data(data: bytes, mime_type: str) -> Part |
שיטה של מחלקה שיוצרת נתונים מוטבעים Part. |
from_json(data: str) -> Part |
שיטה של מחלקה שיוצרת נתונים מוטבעים ב-JSON Part. |
from_agent_transfer(agent: str) -> Part |
שיטת מחלקה שיוצרת Part להעברה לנציג אחר. |
from_end_session(*, reason: str, escalated: bool = False) -> Part |
שיטת מחלקה שיוצרת Part לסיום הסשן. |
from_customized_response(*, content: str, disable_barge_in: bool = False, enable_dtmf: bool = False, dtmf_finish_digit = str: '#', dtmf_endpointing_timeout: int = 3) -> Part |
שיטה של מחלקה שיוצרת Part לתגובה עם התנהגות מותאמת אישית (לדוגמה, השבתה של barege-in, הפעלה של קלט DTMF וכו'). |
דוגמאות:
text_part = ces_public.Part.from_text(text="Hello from the user!")
tool_part = ces_public.Part.from_function_call(
name="get_weather",
args={"location": "Mountain View"}
)
Requests
מחלקת כינוי ליצירת בקשות HTTP. מידע נוסף זמין במאמר בנושא ces_requests משתנה גלובלי.
שיטות:
get(url, params=None, **kwargs)post(url, data=None, json=None, **kwargs)put(url, data=None, json=None, **kwargs)delete(url, **kwargs)patch(url, data=None, json=None, **kwargs)head(url, **kwargs)options(url, **kwargs)
StatusError
משמש לשגיאות שמועלות עם קוד סטטוס.
מאפיינים:
| מאפיין | תיאור |
|---|---|
status_code: int |
קוד הסטטוס של HTTP שמשויך לשגיאה הזו. |
reason: str |
הסיבה להצגת השגיאה. |
Tool
מייצג כלי עם שם ותיאור.
מאפיינים:
| מאפיין | תיאור |
|---|---|
name: str |
שם הכלי. |
description: str |
תיאור של מה שהכלי עושה. |
ToolContext
הנתונים נגזרים מ-CallbackContext.
פרטי הסשן שזמינים כשמריצים כלי.
מאפיינים:
| מאפיין | תיאור |
|---|---|
function_call_id: str |
מזהה קריאת הפונקציה של קריאת הכלי הנוכחית שמופעלת. |
Tools
מחלקת כינוי לקריאה סינכרונית של כלי שיחות. מידע נוסף זמין במאמר בנושא משתנה גלובלי של כלים.
ToolDeclaration
סכימת כלי שאפשר להציג למודל.
מאפיינים:
| מאפיין | תיאור |
|---|---|
function_declarations: Optional[list[FunctionDeclaration]] |
רשימה של הצהרות פונקציות שהכלי תומך בהן. |
פונקציות
get_variable
הפונקציה הזו מאחזרת ערך ממצב הסשן באמצעות המפתח שצוין.
הוא משמש כקיצור דרך ל-context.state.get(key) או ל-context.variables.get(key).
קוד לדוגמה:
def get_a_value() -> int:
# Retrieve the value of 'my_key' from the state
my_value = get_variable('my_key')
return my_value + 5
remove_variable
הפונקציה הזו מסירה צמד מפתח/ערך ממצב הסשן.
זהו קיצור דרך לdel context.state[key].
קוד לדוגמה:
def remove_a_value() -> None:
# Delete 'my_key' from the state
remove_variable('my_key')
set_variable
הפונקציה הזו מגדירה ערך למפתח נתון מסוים במצב הסשן.
אם המפתח כבר קיים, הערך שלו יעודכן.
זה קיצור דרך ל-context.state[key] = value.
קוד לדוגמה:
def set_a_value() -> None:
# Set the value of 'my_key' to 10
set_variable('my_key', 10)
משתנים גלובליים
async_tools
מופע של AsyncTools, שמאפשר לבצע קריאות אסינכרוניות לכלים.
דוגמאות:
response_future = async_tools.<TOOL_DISPLAY_NAME>(<ARGS_AS_DICT>)
# ... misc work
response = response_future() # poll for response
# Check if the tool call was successful
try:
response.raise_for_status()
except StatusError:
print(f"Request failed with status {response.status_code}")
# Convert the response to json
data = response.json()
ces_requests
מופע של Requests.
Requests מאפשרת לבצע קריאות HTTP עם תחביר דומה לזה של מודול הבקשות הפופולרי של Python.
דוגמאות:
# Make a GET request
response = ces_requests.get('https://api.example.com/data')
# Check if the request was successful
try:
response.raise_for_status()
except StatusError:
print(f"Request failed with status {response.status_code}")
# Convert the response to json
data = response.json()
tools
מופע של Tools, שמאפשר לבצע קריאות סינכרוניות לכלים.
דוגמאות:
response = tools.<TOOL_DISPLAY_NAME>(<ARGS_AS_DICT>)
# Check if the tool call was successful
try:
response.raise_for_status()
except StatusError:
print(f"Request failed with status {response.status_code}")
# Convert the response to json
data = response.json()
context
בקוד, אפשר לגשת אל ההקשר של ADK, שניתן להשתמש בו כדי לקרוא ולכתוב הרבה סוגים של נתוני הקשר של ADK.
משתנה גלובלי בשם context זמין לשימוש בקוד.
האובייקטים context.state ו-context.variables ניתנים להחלפה.
האובייקט state נתמך לצורך תאימות לקוד ADK, אבל בקוד חדש צריך להשתמש באובייקט variables.