एक्शन नोड
adk-action क्रेट ग्राफ़-आधारित वर्कफ़्लो में उपयोग किए जाने वाले 14 एक्शन नोड प्रकारों को परिभाषित करता है। प्रत्येक नोड प्रकार एक विशिष्ट ऑपरेशन (HTTP कॉल, डेटा रूपांतरण, सशर्त शाखा आदि) का प्रतिनिधित्व करता है, जिसे adk-graph के ActionNodeExecutor के माध्यम से निर्देशित ग्राफ़ में संयोजित किया जा सकता है।
अवलोकन
एक्शन नोड दृश्य और प्रोग्रामेटिक वर्कफ़्लो ग्राफ़ के मूलभूत घटक हैं। वे निम्नलिखित सुविधाएँ प्रदान करते हैं:
- टाइप किए गए ऑपरेशन — सामान्य वर्कफ़्लो पैटर्न को कवर करने वाले 14 नोड प्रकार
- StandardProperties — त्रुटि प्रबंधन, ट्रेसिंग और डेटा मैपिंग के लिए साझा कॉन्फ़िगरेशन
- वेरिएबल इंटरपोलेशन — डायनेमिक मानों के लिए
{{variable}}सिंटैक्स - ग्राफ़ एकीकरण —
adk-graphकेActionNodeExecutorद्वारा निष्पादित
इंस्टॉलेशन
[dependencies]
adk-action = "2.1.0"
# Or specific action features via umbrella crate
adk-rust = { version = "2.1.0", features = ["action"] }
नोड प्रकार (14)
| नोड | उद्देश्य | श्रेणी |
|---|---|---|
Trigger | प्रवेश बिंदु — वर्कफ़्लो निष्पादन शुरू करता है | नियंत्रण |
HTTP | HTTP अनुरोध करें (GET, POST, PUT, DELETE, PATCH) | I/O |
Set | वर्कफ़्लो वेरिएबल में मान असाइन करें | डेटा |
Transform | एक्सप्रेशन या कोड का उपयोग करके डेटा रूपांतरित करें | डेटा |
Switch | एक्सप्रेशन के आधार पर सशर्त शाखाकरण | नियंत्रण |
Loop | संग्रहों पर या किसी शर्त तक पुनरावृत्ति करें | नियंत्रण |
Merge | कई शाखाओं को फिर से एक साथ जोड़ें | नियंत्रण |
Wait | किसी अवधि या घटना तक निष्पादन रोकें | नियंत्रण |
Code | मनमाना कोड निष्पादित करें (Rust; JS/TS कार्यान्वित नहीं है) | गणना |
Database | डेटाबेस से क्वेरी करें — कार्यान्वित नहीं है | इनपुट/आउटपुट |
Email | SMTP के माध्यम से ईमेल भेजें — कार्यान्वित नहीं | I/O |
Notification | सूचनाएँ भेजें (Slack, webhook, push) | I/O |
RSS | RSS/Atom फ़ीड पढ़ें और पार्स करें | I/O |
File | फ़ाइलें पढ़ें, लिखें और रूपांतरित करें | I/O |
ग्राफ़ बनाए जाने पर उपलब्धता की जाँच की जाती है
कुछ नोड प्रकार ऐसे कॉन्फ़िगरेशन स्वीकार और सत्यापित करते हैं, जबकि उनका बैकएंड मौजूद नहीं होता।
उन्हें रन के बीच में नहीं, बल्कि StateGraph::compile() द्वारा अस्वीकार कर दिया जाता है:
| कॉन्फ़िगरेशन | स्थिति |
|---|---|
Database (किसी भी प्रकार) | अस्वीकृत — कोई ड्राइवर एकीकृत नहीं है |
Email (निगरानी या भेजना) | अस्वीकृत — IMAP और SMTP कार्यान्वित नहीं हैं |
Code के साथ language: javascript या typescript | अस्वीकृत — कोई सैंडबॉक्स किया हुआ रनटाइम नहीं; rust का उपयोग करें |
Http में action-http सुविधा के बिना | अस्वीकृत — सुविधा सक्षम करें |
अस्वीकृति में नोड और कारण का नाम दिया जाता है, इसलिए जो वर्कफ़्लो चल नहीं सकता, वह पहले के नोड्स के साइड इफ़ेक्ट उत्पन्न करने के बाद नहीं, बल्कि असेंबल किए जाते समय ही विफल हो जाता है।
कस्टम नोड पर Node::validate लागू करके उसे उसी जाँच में भाग लेने योग्य बनाएँ।
StandardProperties
हर एक्शन नोड में StandardProperties होता है — साझा कॉन्फ़िगरेशन जो निष्पादन व्यवहार को नियंत्रित करता है:
use adk_action::{StandardProperties, ErrorHandling, RetryConfig};
let props = StandardProperties::builder()
// Error handling
.on_error(ErrorHandling::ContinueOnFail)
.retry(RetryConfig {
max_attempts: 3,
wait_between_ms: 1000,
})
// Tracing
.notes("Fetch user profile from API")
// Callbacks
.on_success("notify_complete")
.on_failure("alert_team")
// Execution
.timeout_ms(30_000)
.continue_on_fail(true)
// Input/output mapping
.input_mapping("{{trigger.body.user_id}}")
.output_key("user_profile")
.build();
StandardProperties फ़ील्ड્સ
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
on_error | ErrorHandling | Stop, ContinueOnFail, या RetryThenFail |
retry | Option<RetryConfig> | पुनः प्रयासों की संख्या और उनके बीच का विलंब |
notes | Option<String> | ट्रेसिंग के लिए मानव-पठनीय विवरण |
on_success | Option<String> | सफलता पर निष्पादित किया जाने वाला कॉलबैक नोड |
on_failure | Option<String> | विफलता पर निष्पादित किया जाने वाला कॉलबैक नोड |
timeout_ms | Option<u64> | अधिकतम निष्पादन समय |
continue_on_fail | bool | विफलता के बाद डाउनस्ट्रीम नोड निष्पादित होते हैं या नहीं |
input_mapping | Option<String> | इनपुट डेटा को रूपांतरित करने वाली अभिव्यक्ति |
output_key | Option<String> | आउटपुट संग्रहीत करने के लिए चर का नाम |
चर प्रतिस्थापन
Action नोड workflow state का संदर्भ देने के लिए {{variable}} सिंटैक्स का समर्थन करते हैं:
use adk_action::HttpNode;
let node = HttpNode::builder()
.url("https://api.example.com/users/{{trigger.body.user_id}}")
.method("GET")
.headers(vec![
("Authorization".into(), "Bearer {{env.API_TOKEN}}".into()),
])
.build();
चर स्रोत
| उपसर्ग | स्रोत | उदाहरण |
|---|---|---|
trigger | ट्रिगर नोड पेलोड | {{trigger.body.email}} |
env | पर्यावरण चर | {{env.DATABASE_URL}} |
nodes | पिछले नोड्स से आउटपुट | {{nodes.fetch_user.json.name}} |
workflow | वर्कफ़्लो-स्तरीय चर | {{workflow.run_id}} |
नेस्टेड एक्सेस में डॉट नोटेशन का उपयोग होता है: {{nodes.http_1.json.data[0].id}}
नोड के उदाहरण
HTTP नोड
use adk_action::{HttpNode, HttpMethod};
let node = HttpNode::builder()
.method(HttpMethod::Post)
.url("https://api.example.com/orders")
.headers(vec![
("Content-Type".into(), "application/json".into()),
])
.body(r#"{"item": "{{trigger.body.item}}", "qty": {{trigger.body.quantity}}}"#)
.properties(StandardProperties::builder()
.timeout_ms(10_000)
.on_error(ErrorHandling::RetryThenFail)
.retry(RetryConfig { max_attempts: 3, wait_between_ms: 2000 })
.output_key("order_response")
.build())
.build();
स्विच नोड
use adk_action::{SwitchNode, SwitchCase};
let node = SwitchNode::builder()
.cases(vec![
SwitchCase {
condition: "{{nodes.classify.json.category}} == 'urgent'".into(),
output: "urgent_path".into(),
},
SwitchCase {
condition: "{{nodes.classify.json.category}} == 'normal'".into(),
output: "normal_path".into(),
},
])
.fallback("default_path")
.build();
लूप नोड
use adk_action::{LoopNode, LoopMode};
let node = LoopNode::builder()
.mode(LoopMode::ForEach {
items: "{{nodes.fetch_users.json.users}}".into(),
item_var: "current_user".into(),
})
.body_nodes(vec!["process_user", "save_result"])
.properties(StandardProperties::builder()
.notes("Process each user in the list")
.build())
.build();
सेट नोड
use adk_action::SetNode;
let node = SetNode::builder()
.assignments(vec![
("status".into(), "processing".into()),
("started_at".into(), "{{workflow.timestamp}}".into()),
("user_email".into(), "{{trigger.body.email}}".into()),
])
.build();
adk-graph के साथ एकीकरण
एक्शन नोड्स को adk-graph के ActionNodeExecutor द्वारा निष्पादित किया जाता है:
use adk_graph::{Graph, ActionNodeExecutor};
use adk_action::{TriggerNode, HttpNode, SetNode};
// Define nodes
let trigger = TriggerNode::webhook("order_received");
let fetch = HttpNode::get("https://api.example.com/inventory/{{trigger.body.sku}}");
let update = SetNode::new(vec![("available", "{{nodes.fetch.json.quantity}}")]);
// Build graph
let graph = Graph::builder()
.node("trigger", trigger)
.node("check_inventory", fetch)
.node("update_status", update)
.edge("trigger", "check_inventory")
.edge("check_inventory", "update_status")
.build()?;
// Execute
let executor = ActionNodeExecutor::new();
let result = executor.run(graph, initial_context).await?;
कस्टम नोड प्रकार परिभाषित करना
ActionNode trait को लागू करें:
use adk_action::{ActionNode, ActionContext, ActionResult, StandardProperties};
use async_trait::async_trait;
struct CustomNode {
config: MyConfig,
properties: StandardProperties,
}
#[async_trait]
impl ActionNode for CustomNode {
fn node_type(&self) -> &str { "custom" }
fn properties(&self) -> &StandardProperties { &self.properties }
async fn execute(&self, ctx: &ActionContext) -> ActionResult {
let input = ctx.resolve("{{trigger.body.data}}")?;
// Custom logic...
Ok(serde_json::json!({ "result": "processed" }))
}
}
संबंधित
- ग्राफ एजेंट — ग्राफ़ वर्कफ़्लो ऑर्केस्ट्रेशन
- स्टूडियो एक्शन नोड्स — ADK Studio में विज़ुअल नोड एडिटर
- ट्रिगर्स — वर्कफ़्लो ट्रिगर प्रकार
पिछला: ← Retry & Reflect | अगला: Plugins →