שימוש בסוכן LangChain

לפני שמתחילים

במדריך הזה אנחנו יוצאים מנקודת הנחה שקראתם את ההוראות במאמרים הבאים ופעלתם לפיהן:

אחזור מופע של סוכן

כדי לשלוח שאילתה ל-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)

איפה

ספריית הבקשות של 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 תומכות באותו סוג של ארגומנטים:

  • input: ההודעות שיישלחו לסוכן.
  • config: ההגדרה (אם רלוונטית) להקשר של השאילתה.

שליחת שאילתה לסוכן

כדי לשלוח שאילתה לסוכן עם קלט, משתמשים בשיטה 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). שני תרחישים נפוצים הם:

לדוגמה:

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)

המאמרים הבאים