Agent Engine (Gemini Enterprise Agent Platform)
agent-engine सुविधा, ADK-Rust एजेंट को Gemini
Enterprise Agent Platform द्वारा एक custom-container ReasoningEngine के रूप में
चलाने योग्य बनाती है। serve_agent_engine चलाने वाला कंटेनर reasoningEngines.query,
reasoningEngines.streamQuery, कंसोल Playground और प्लेटफ़ॉर्म
SDKs का उत्तर देता है — यही रनटाइम अनुबंध adk-python का
AdkApp लागू करता है।
अवलोकन
प्लेटफ़ॉर्म दो कंटेनर एंडपॉइंट के माध्यम से डिप्लॉय किए गए इंजन को चलाता है:
| एंडपॉइंट | मोड | प्रतिक्रिया |
|---|---|---|
POST /api/reasoning_engine | यूनरी | {"output": ...} |
POST /api/stream_reasoning_engine | स्ट्रीमिंग | प्रति पंक्ति एक JSON ऑब्जेक्ट (Content-Type: application/json, कोई SSE फ़्रेमिंग नहीं) |
दोनों dispatch envelope {"class_method": "...", "input": {...}} लेते हैं।
Envelope snake_case है — platform Python method names के आधार पर dispatch करता है।
turnkey app container health checks के लिए GET /health भी उपलब्ध कराता है।
त्वरित आरंभ
सुविधा सक्षम करें (यह gemini-agent-platform
meta-feature में शामिल है):
[dependencies]
adk-rust = { version = "2.1.0", features = ["minimal", "agent-engine"] }
ऐसे agent के लिए जो पूरे platform — managed sessions, Memory Bank, Example Store, code-execution sandbox, RAG, evaluation, तथा Agent और Skill Registries — का उपयोग करता है, एक सुविधा प्रत्येक integration उपलब्ध कराती है:
[dependencies]
adk-rust = { version = "2.1.0", features = ["minimal", "gemini-agent-platform"] }
serve_agent_engine deployable engine के पूरे main है। यह
0.0.0.0:$PORT (fallback 8080) को bind करता है और रोके जाने तक उपलब्ध रहता है:
use adk_rust::prelude::*;
use adk_server::agent_engine::{AgentEngineOptions, serve_agent_engine};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<()> {
let api_key = std::env::var("GOOGLE_API_KEY")?;
let model = Arc::new(GeminiModel::new(&api_key, "gemini-3.7-flash")?);
let agent = LlmAgentBuilder::new("weather_agent")
.description("Answers weather questions")
.instruction("You are a helpful weather assistant.")
.model(model)
.build()?;
serve_agent_engine(Arc::new(agent), AgentEngineOptions::new()).await
}
codelab के payload से सत्यापित करें:
curl -s -X POST localhost:8080/api/stream_reasoning_engine \
-H 'Content-Type: application/json' \
-d '{"class_method": "async_stream_query", "input": {"user_id": "u", "message": "hi"}}'
प्रत्येक response line एक ADK event है, JSON के रूप में।
संचालन
engine ठीक वही operation set register करता है जिसका adk-python का AdkApp
विज्ञापन करता है। Sync/async name pairs एक ही handler पर मैप होते हैं — यह विभाजन
एक Python artifact है, जिसे wire contract संरक्षित करता है।
class_method | API मोड | व्यवहार |
|---|---|---|
create_session, async_create_session | "" / async | एक सत्र बनाएँ (वैकल्पिक कॉलर-चयनित ID और प्रारंभिक स्थिति) |
get_session, async_get_session | "" / async | किसी सत्र को उसकी घटनाओं सहित प्राप्त करें |
list_sessions, async_list_sessions | "" / async | उपयोगकर्ता के सत्रों की सूची बनाएँ |
delete_session, async_delete_session | "" / async | सत्र हटाएँ |
stream_query, async_stream_query | stream / async_stream | एजेंट चलाएँ; अनुपस्थित होने पर सत्र स्वचालित रूप से बनाया जाता है |
streaming_agent_run_with_events | async_stream | AgentRunRequest JSON स्ट्रिंग से एजेंट चलाएँ (कंसोल Playground पथ) |
async_add_session_to_memory | async | सत्र की घटनाओं को कॉन्फ़िगर की गई मेमोरी सेवा में निकालें |
async_search_memory | async | कॉन्फ़िगर की गई मेमोरी सेवा में खोजें |
register_operations | "" | इस तालिका को होस्ट के लिए उपलब्ध कराएँ |
अज्ञात क्लास विधियाँ 400 को समस्या-JSON बॉडी के साथ लौटाती हैं। मेमोरी
विधियाँ मेमोरी सेवा कॉन्फ़िगर होने तक Unsupported त्रुटि (501) लौटाती हैं।
नोट:
reasoningEngines:asyncQuery(टिकाऊ क्वेरी जॉब) पंजीकृत नहीं है: क्षमता को इंजन निर्माण के समय घोषित करना आवश्यक है, इसे निर्माण के बाद जोड़ा नहीं जा सकता, और adk-python काAdkAppभी इसे पंजीकृत नहीं करता।
प्रबंधित बैकएंड
शून्य-कॉन्फ़िगरेशन डिफ़ॉल्ट सेशन को मेमोरी में रखता है — क्वेरी का उत्तर देने के लिए पर्याप्त, लेकिन कंटेनर पुनः आरंभ होने पर वार्तालाप सुरक्षित नहीं रहते। परिनियोजित इंजन प्रबंधित बैकएंड को AgentEngineOptions के माध्यम से कॉन्फ़िगर करते हैं।
प्रबंधित सेशन (Vertex AI Sessions)
vertex-session सुविधा के साथ, VertexAiSessionConfig::from_env() उन
वेरिएबल को पढ़ता है जिन्हें प्लेटफ़ॉर्म परिनियोजित कंटेनरों के अंदर सेट करता है
(GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION, और
GOOGLE_CLOUD_AGENT_ENGINE_ID — केवल संख्यात्मक इंजन ID):
use adk_server::agent_engine::AgentEngineOptions;
use adk_session::{VertexAiSessionConfig, VertexAiSessionService};
use std::sync::Arc;
fn managed_sessions() -> adk_core::Result<AgentEngineOptions> {
let config = VertexAiSessionConfig::from_env()?;
let sessions = Arc::new(VertexAiSessionService::new_with_adc(config)?);
Ok(AgentEngineOptions::new().with_session_service(sessions))
}
परिनियोजित कंटेनर के बाहर, VertexAiSessionConfig::new(project, location).with_reasoning_engine(id) के साथ कॉन्फ़िगरेशन स्पष्ट रूप से बनाएँ।
आर्टिफैक्ट (Google Cloud Storage)
gcs-artifacts सुविधा के साथ, GcsArtifactService आर्टिफैक्ट को उस
ब्लॉब लेआउट में संग्रहीत करता है जिसे Gemini Enterprise कंसोल पढ़ता है (adk-python के साथ
बाइट-दर-बाइट समानता)। बकेट को किसी एनवायरनमेंट वेरिएबल या फ़्लैग से लें:
use adk_artifact::GcsArtifactService;
use adk_server::agent_engine::AgentEngineOptions;
use std::sync::Arc;
fn gcs_artifacts() -> adk_core::Result<AgentEngineOptions> {
let bucket = std::env::var("ADK_ARTIFACT_BUCKET").unwrap_or_else(|_| "my-bucket".to_string());
let artifacts = Arc::new(GcsArtifactService::new_with_adc(bucket)?);
Ok(AgentEngineOptions::new().with_artifact_service(artifacts))
}
आर्टिफैक्ट सेवा को रनर (टूल-उन्मुख सेव और लोड) और डिस्पैच स्थिति, दोनों में जोड़ा जाता है।
मेमोरी
AgentEngineOptions::with_memory_service किसी भी
adk_memory::MemoryService को स्वीकार करता है और मेमोरी की दोनों क्लास विधियों को सक्षम करता है। प्लेटफ़ॉर्म का Memory Bank बैकएंड बाद की रिलीज़ में vertex-memory सुविधा के साथ उपलब्ध होगा।
ServerBuilder एकीकरण
मौजूदा ADK सर्वर अपने REST, UI, और A2A रूट के साथ-साथ डिस्पैच सतह भी उपलब्ध करा सकता है:
use adk_server::{ServerBuilder, ServerConfig};
fn build_app(config: ServerConfig) -> axum::Router {
ServerBuilder::new(config).with_agent_engine(true).build()
}
डिस्पैच रूट कॉन्फ़िगर की गई session और artifact सेवाओं के साथ loader के root agent की सेवा करते हैं। इनमें server का auth middleware शामिल नहीं होता: deployed engine को platform के द्वारा front किया जाता है, जो callers के container तक पहुँचने से पहले उनका authentication करता है। इन endpoints को सीधे untrusted networks के सामने expose न करें।
CLI से परिनियोजन
gcp-deploy feature
(cargo install adk-cli --features gcp-deploy) के साथ adk-cli इंस्टॉल होने पर, एक command
pushed container image से engine बनाती है:
# 1. Build and push the image
gcloud builds submit --tag us-central1-docker.pkg.dev/PROJECT/agents/my-agent:latest
# 2. Deploy it as a ReasoningEngine
adk-rust deploy agent-engine \
--image-uri us-central1-docker.pkg.dev/PROJECT/agents/my-agent:latest \
--project PROJECT \
--location us-central1 \
--service-account agent-runner@PROJECT.iam.gserviceaccount.com
वैकल्पिक flags: --display-name (डिफ़ॉल्ट रूप से image name) और
CMEK के लिए --kms-key। यह command
operations table से full class-method contract घोषित करती है,
create operation की प्रतीक्षा करती है और engine resource name प्रिंट करती है।
यही client प्रोग्रामेटिक रूप से adk_deploy::gcp::GcpDeployClient (umbrella feature
gcp-deploy) के रूप में भी उपलब्ध है।
Environment variables
| चर | अर्थ |
|---|---|
PORT | प्लेटफ़ॉर्म द्वारा निर्धारित सर्विंग पोर्ट (फ़ॉलबैक 8080; अमान्य मान स्टार्टअप विफल कर देता है) |
GOOGLE_CLOUD_PROJECT | डिप्लॉयमेंट का GCP प्रोजेक्ट |
GOOGLE_CLOUD_LOCATION | परिनियोजन का GCP स्थान |
GOOGLE_CLOUD_AGENT_ENGINE_ID | केवल संख्यात्मक इंजन ID, परिनियोजित कंटेनरों के अंदर सेट की गई |
जब GOOGLE_CLOUD_AGENT_ENGINE_ID मौजूद हो और सत्र सेवा इन-मेमोरी डिफ़ॉल्ट हो, तो एंट्रीपॉइंट एक चेतावनी लॉग करता है: परिनियोजित इंजन को प्रबंधित सत्रों का उपयोग करना चाहिए।