לפני שמתחילים
במדריך הזה אנחנו יוצאים מנקודת הנחה שקראתם את ההוראות במאמרים הבאים ופעלתם לפיהן:
- יצירת סוכן LangChain: כדי ליצור את
agentכמופע שלLangchainAgent. - אימות משתמשים כדי לבצע אימות כמשתמש לצורך שליחת שאילתות לסוכן.
- מייבאים ומפעילים את ה-SDK כדי להפעיל את הלקוח לקבלת מופע שנפרס (אם צריך).
אחזור מופע של סוכן
כדי לשלוח שאילתה ל-LangchainAgent, צריך קודם ליצור מכונה חדשה או לקבל מכונה קיימת.
כדי לקבל את LangchainAgent שמתאים למזהה משאב ספציפי:
Agent Platform SDK
מריצים את הקוד הבא:
import vertexai
client = vertexai.Client( # For service interactions via client.agent_engines
project="PROJECT_ID",
location="LOCATION",
)
agent = client.agent_engines.get(name="projects/PROJECT_ID/locations/LOCATION/reasoningEngines/RESOURCE_ID")
print(agent)
איפה
-
PROJECT_IDהוא מזהה הפרויקט שבו יוצרים ופורסים סוכנים, ו Google Cloud -
LOCATIONהוא אחד מהאזורים הנתמכים. -
RESOURCE_IDהוא המזהה של הסוכן שנפרס כמשאבreasoningEngine.
ספריית הבקשות של Python
מריצים את הקוד הבא:
from google import auth as google_auth
from google.auth.transport import requests as google_requests
import requests
def get_identity_token():
credentials, _ = google_auth.default()
auth_request = google_requests.Request()
credentials.refresh(auth_request)
return credentials.token
response = requests.get(
f"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/RESOURCE_ID",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {get_identity_token()}",
},
)
API בארכיטקטורת REST
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/RESOURCE_IDכשמשתמשים ב-Agent Platform SDK, האובייקט agent תואם למחלקה AgentEngine שכוללת את המאפיינים הבאים:
-
agent.api_resourceעם מידע על הסוכן שנפרס. אפשר גם לקרוא ל-agent.operation_schemas()כדי להחזיר את רשימת הפעולות ש-agentתומך בהן. פרטים נוספים זמינים במאמר בנושא פעולות נתמכות. -
agent.api_clientשמאפשרת אינטראקציות סינכרוניות עם שירותים -
agent.async_api_clientשמאפשרת אינטראקציות אסינכרוניות בין שירותים
בהמשך הקטע הזה נניח שיש לכם מכונת AgentEngine שנקראת agent.
פעולות נתמכות
הפעולות הבאות נתמכות:
-
query: כדי לקבל תשובה לשאילתה באופן סינכרוני. -
stream_query: להצגת תשובה לשאילתה באופן שוטף.
שתי השיטות query ו-stream_query תומכות באותו סוג של ארגומנטים:
שליחת שאילתה לסוכן
כדי לשלוח שאילתה לסוכן עם קלט, משתמשים בשיטה LangchainAgent.query:
agent.query(input="What is the exchange rate from US dollars to SEK today?")
שווה לביטוי הבא (בצורה מלאה):
agent.query(input={
"input": [ # The input is represented as a list of messages (each message as a dict)
{
# The role (e.g. "system", "user", "assistant", "tool")
"role": "user",
# The type (e.g. "text", "tool_use", "image_url", "media")
"type": "text",
# The rest of the message (this varies based on the type)
"text": "What is the exchange rate from US dollars to Swedish currency?",
},
]
})
התפקידים עוזרים למודל להבחין בין סוגים שונים של הודעות כשהוא משיב. אם לא מציינים את role בקלט, ברירת המחדל היא "user".
| תפקיד | תיאור |
|---|---|
system |
משמש כדי להגדיר למודל הצ'אט איך להתנהג ולספק הקשר נוסף. לא כל ספקי מודלים של צ'אט תומכים בתכונה הזו. |
user |
מייצג קלט ממשתמש שמבצע אינטראקציה עם המודל, בדרך כלל בצורה של טקסט או קלט אינטראקטיבי אחר. |
assistant |
מייצג תגובה מהמודל, שיכולה לכלול טקסט או בקשה להפעלת כלים. |
tool |
הודעה שמשמשת להעברת התוצאות של הפעלת כלי בחזרה למודל אחרי אחזור של נתונים חיצוניים או עיבוד שלהם. |
ה-type של ההודעה גם יקבע איך יפורש שאר ההודעה (ראו טיפול בתוכן רב-אופני).
שליחת שאילתה לסוכן עם תוכן מולטימודאלי
כדי להמחיש איך מעבירים לסוכן קלט מולטי-מודאלי, נשתמש בסוכן הבא (שמעביר את הקלט למודל ולא משתמש בכלים):
agent = agent_engines.LangchainAgent(
model="gemini-2.0-flash",
runnable_builder=lambda model, **kwargs: model,
)
הודעות מולטימודאליות מיוצגות באמצעות בלוקים של תוכן שמציינים type ונתונים תואמים. באופן כללי, כדי להגדיר תוכן מולטימודאלי, צריך לציין את type כ-"media", את file_uri כ-URI של Cloud Storage ואת mime_type כדי לפרש את הקובץ.
תמונה
agent.query(input={"input": [
{"type": "text", "text": "Describe the attached media in 5 words!"},
{"type": "media", "mime_type": "image/jpeg", "file_uri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg"},
]})
וידאו
agent.query(input={"input": [
{"type": "text", "text": "Describe the attached media in 5 words!"},
{"type": "media", "mime_type": "video/mp4", "file_uri": "gs://cloud-samples-data/generative-ai/video/pixel8.mp4"},
]})
אודיו
agent.query(input={"input": [
{"type": "text", "text": "Describe the attached media in 5 words!"},
{"type": "media", "mime_type": "audio/mp3", "file_uri": "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"},
]})
רשימת סוגי ה-MIME שנתמכים ב-Gemini מופיעה בתיעוד בנושא:
שליחת שאילתה לסוכן עם הגדרה שניתנת להרצה
כששולחים שאילתה לסוכן, אפשר גם לציין config לסוכן (שמבוסס על הסכימה של RunnableConfig).
שני תרחישים נפוצים הם:
- פרמטרים של הגדרות ברירת המחדל:
-
run_id/run_name: מזהה הריצה. -
tags/metadata: מסווג להרצה כשעוקבים אחרי הפעילות באמצעות OpenTelemetry.
-
- פרמטרים של הגדרות בהתאמה אישית (דרך
configurable):-
session_id: הסשן שבו ההפעלה מתבצעת (ראו שמירת היסטוריית הצ'אט). -
thread_id: השרשור שבו מתבצעת ההרצה (ראו Store Checkpoints).
-
לדוגמה:
import uuid
run_id = uuid.uuid4() # Generate an ID for tracking the run later.
response = agent.query(
input="What is the exchange rate from US dollars to Swedish currency?",
config={ # Specify the RunnableConfig here.
"run_id": run_id # Optional.
"tags": ["config-tag"], # Optional.
"metadata": {"config-key": "config-value"}, # Optional.
"configurable": {"session_id": "SESSION_ID"} # Optional.
},
)
print(response)