Volcengine SDK Code Generator
Generate complete, runnable Volcengine SDK code from natural-language descriptions, and answer SDK configuration questions.
Workflow
When a user describes a Volcengine API operation, follow these steps:
Step 1: Identify Target Service, Operation, and Advanced Configuration Needs
Parse the user's description to determine:
Target service: which Volcengine service (e.g., ECS, VPC, TOS, billing)
Target operation: what operation to perform (e.g., list instances, create a VPC, query billing)
Target language: which programming language (Go, Python, PHP, Java, Node.js). If not specified, ask the user.
Advanced configuration needs: whether the user mentions or the scenario implies any of the following:
- Retry: user mentions "retry", "fault tolerance", or the operation is a write/create type (prone to throttling)
- Timeout: user mentions "timeout", or the operation involves large data volumes (batch queries, file uploads)
- Credentials: user mentions "STS", "AssumeRole", "temporary credentials", "OIDC", or explicitly wants to avoid hardcoding AK/SK
- Proxy/network: user mentions "proxy" or "internal network"
- Debug mode: user mentions "debug" or "logging"
- Connection pooling: user mentions "connection pool", "high concurrency", or "pool"
If the user explicitly requests these, include the corresponding configuration in the generated code. If not explicitly requested but implied by the scenario (e.g., resource creation naturally warrants retry), include suggested configuration as comments.
Step 2: Query Service Metadata via Volcengine API Explorer
Use the following APIs to find the correct service code, version, and action name. This step is critical because guessing often produces incorrect code — the API Explorer is the authoritative source.
2a. Find the ServiceCode
Fetch the service catalog:
GET https://api.volcengine.com/api/common/explorer/services
Response structure:
{
"Result": {
"Categories": [
{
"CategoryName": "...",
"Services": [
{
"ServiceCn": "Cloud Server",
"ServiceCode": "ecs",
"Product": "ECS",
"IsSdkAvailable": true,
"RegionType": "regional"
}
]
}
]
}
}
Match the user's intent to the correct ServiceCode based on ServiceCn, Product, and category name.
2b. Find the API version
GET https://api.volcengine.com/api/common/explorer/versions?ServiceCode={ServiceCode}
Response:
{
"Result": {
"Versions": [
{
"ServiceCode": "billing",
"Version": "2022-01-01",
"IsDefault": 0
}
]
}
}
Use the version with IsDefault == 1. If no default version exists, use the latest available.
2c. Find the Action name
GET https://api.volcengine.com/api/common/explorer/apis?ServiceCode={ServiceCode}&Version={Version}&APIVersion={Version}
Response:
{
"Result": {
"Groups": [
{
"Name": "Instance",
"Apis": [
{
"Action": "DescribeInstances",
"NameCn": "Query instance list",
"Description": "..."
}
]
}
]
}
}
Match user intent using the Action name and NameCn (Chinese name).
2c-alt: Search API (when direct lookup fails)
If the service catalog or API list cannot clearly match the user's description — for example, the user uses vague terms, Chinese names that don't map directly to a ServiceCode, or the API list doesn't seem to contain what the user wants — use the search API as a fallback:
GET https://api.volcengine.com/api/common/search/all?Query={URL-encoded search term}&Channel=api&Limit=10
Search terms can be Chinese or English — use whichever best matches the user's description.
Response structure:
{
"Result": {
"List": [
{
"BizInfo": {
"Action": "ListProjects",
"ServiceCn": "Access Control",
"ServiceCode": "iam",
"Version": "2021-08-01"
},
"Highlight": [
{"Field": "title", "Summary": "Get <em>project</em> <em>list</em>"}
]
}
],
"Total": 200
}
}
Select the best match based on ServiceCn, Action, and highlight text, then continue to step 2d.
The search API is particularly useful when:
- The user describes the operation in natural language but doesn't know which service owns it
- A service has too many APIs to browse manually
- The description spans multiple services (search returns results across all services)
2d. Get full API parameter details
GET https://api.volcengine.com/api/common/explorer/api-swagger?ServiceCode={ServiceCode}&Version={Version}&APIVersion={Version}&ActionName={Action}
Returns the full Swagger/OpenAPI specification, including:
- HTTP method (GET/POST)
- All request parameters with types, required flags, and descriptions
- Response structure
- Constraints and validation rules
x-demo field: contains requestDemo and responseDemo with official examples
Read this specification carefully — it is essential for generating accurate code.
2e. Extract parameter example values (from x-demo requestDemo)
The info.x-demo array in the Swagger response contains requestDemo — official request examples. Extract realistic parameter values from these to populate generated code.
Extraction process:
- Locate
info.x-demo[0].requestDemo and parse the request body JSON
- Use requestDemo values as example values in generated code — they are more accurate and realistic than invented values
- For masked values (e.g.,
cc5silum********), keep the masked format and add a comment prompting the user to replace with real values
- If a parameter value is a JSON string (e.g., a
Config field), format it clearly and comment each sub-field
Example: for VKE CreateAddon, requestDemo contains:
{
"ClusterId": "cc5silum********",
"Name": "ingress-nginx",
"DeployMode": "Unmanaged",
"DeployNodeType": ["VirtualNode"],
"Config": "{\"Replica\":1,\"Resource\":{\"Request\":{\"Cpu\":\"0.25\",\"Memory\":\"512Mi\"},\"Limit\":{\"Cpu\":\"0.5\",\"Memory\":\"1024Mi\"}},\"PrivateNetwork\":{\"SubnetId\":\"subnet-2d61qn69iji****\",\"IpVersion\":\"IPV4\"}}"
}
Use these example values directly instead of empty placeholders.
2f. Retrieve detailed configuration for complex parameters
Some parameter description fields contain documentation links (e.g., https://www.volcengine.com/docs/...) pointing to detailed configuration guides. For complex parameters, fetch these links for more information:
When to consult documentation:
- The parameter value is a JSON string with a "see detailed configuration" reference in the description (e.g., VKE
Config)
- The parameter is a nested structure whose sub-field format is documented externally
- The
enum values have unclear meanings that are explained in the documentation
Processing flow:
- Check whether the parameter
description contains a volcengine.com/docs link
- If so, use WebFetch to retrieve the linked page and extract configuration details relevant to the parameter
- Incorporate documentation examples into the generated code as comments or structured parameters
- If the documentation is inaccessible, fall back to requestDemo example values
2g. Determine required and recommended parameters
Required-field detection relies on multiple sources, not just the required array:
- Explicitly required: listed in the Swagger
required array
- Implied by description: the description contains phrases like "must specify", "required", or equivalent
- Logically required: semantically essential even if not formally marked (e.g., instance type and network config when creating resources)
- Conditionally required: the description states "required when X=Y" — if the user's scenario matches, include it
Parameter value priority:
- requestDemo example values (highest priority): use the official examples directly
example field: individual parameter example values from the Swagger spec
- enum values: pick the most common or general-purpose option
- Documentation recommendations: values extracted from linked docs
- Industry conventions: reasonable defaults following cloud-computing norms (e.g.,
172.16.0.0/16 for CIDR, descriptive names for instances)
Step 3: Consult SDK Configuration References (as needed)
If Step 1 identified advanced configuration needs, read the corresponding reference file for the target language to get accurate configuration code:
| Language |
Reference File |
| Go |
references/sdk-integration-go.md |
| Python |
references/sdk-integration-python.md |
| Java |
references/sdk-integration-java.md |
| Node.js |
references/sdk-integration-nodejs.md |
| PHP |
references/sdk-integration-php.md |
These files contain verified code snippets for retry, timeout, credentials, proxy, connection pooling, and debug configuration. Use these patterns directly rather than writing from memory — SDK configuration varies significantly across languages, and the reference files ensure accuracy.
Step 4: Generate Complete SDK Code
Generate a complete, runnable code example following these rules:
General Rules (all languages)
- Authentication: read AK/SK from environment variables
VOLCENGINE_ACCESS_KEY and VOLCENGINE_SECRET_KEY by default. If the user needs a different auth method (STS, AssumeRole, OIDC), use the corresponding pattern from the reference files. The exact reading mechanism varies by language — see each language section and the reference files.
- Region: default to
cn-beijing for regional services. Add a comment noting that users can change this.
- Required parameters: include all required parameters (sources per step 2g), using realistic example values from requestDemo or example fields. Add a comment next to each value explaining its meaning and source.
- Parameter value quality: values must follow realistic formats and business semantics, not simple placeholders:
- Instance IDs: use masked format like
i-abc123****** (from requestDemo)
- CIDRs: use reasonable ranges like
172.16.0.0/16
- Enums: use the most common option
- Nested JSON configs: expand into readable multi-line format with per-field comments
- Complex parameter handling: for parameters whose value is a JSON string (e.g., VKE Config), build a struct/dict first and then serialize to JSON, rather than hardcoding a long string. This makes the code more readable and easier to modify.
- Optional parameters: include commonly-used optional parameters (e.g., pagination) as commented-out lines with explanations.
- Error handling: include standard error handling for the target language.
- Output: print the response in a readable format (e.g., formatted JSON).
- Comments: add a header comment describing the code's purpose. Add inline comments for non-obvious parameters. Match comment language to the user's prompt language.
- Advanced configuration integration: when the user has advanced config needs, weave the configuration naturally into the main code (not as a separate block), producing a single runnable file:
- Retry: add retry settings during client/config initialization, with comments explaining defaults and tunable parameters
- Timeout: set global timeout during client initialization; show per-request timeout usage if needed
- Credentials: replace the default AK/SK auth code with the user-specified method (STS, AssumeRole, etc.)
- Proxy: add proxy settings in client configuration
- Debug: enable debug mode in client configuration
- Connection pooling: set pool parameters in client configuration
Go
The Go SDK uses {Action}Input structs (not Request). Services are instantiated via {service}.New(sess).
package main
import (
"fmt"
"os"
"github.com/volcengine/volcengine-go-sdk/service/{service}"
"github.com/volcengine/volcengine-go-sdk/volcengine"
"github.com/volcengine/volcengine-go-sdk/volcengine/credentials"
"github.com/volcengine/volcengine-go-sdk/volcengine/session"
)
func main() {
ak := os.Getenv("VOLCENGINE_ACCESS_KEY")
sk := os.Getenv("VOLCENGINE_SECRET_KEY")
region := "cn-beijing"
config := volcengine.NewConfig().
WithRegion(region).
WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
// [Advanced config — add as needed, see references/sdk-integration-go.md]
// Retry: config.WithMaxRetries(5)
// Timeout: config.WithHTTPClient(&http.Client{Timeout: 60 * time.Second})
// Proxy: config.WithHTTPProxy("http://proxy:8080")
// Debug: config.WithDebug(true)
sess, err := session.NewSession(config)
if err != nil {
panic(err)
}
svc := {service}.New(sess)
input := &{service}.{Action}Input{
// Set required parameters here
}
resp, err := svc.{Action}(input)
if err != nil {
panic(err)
}
fmt.Println(resp)
}
Key points:
- Package path:
github.com/volcengine/volcengine-go-sdk/service/{service} (lowercase, e.g., billing, ecs, vpc)
- Config chain:
volcengine.NewConfig().WithRegion(region).WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
- Session:
session.NewSession(config) (returns session and error)
- Service client:
{service}.New(sess) (e.g., billing.New(sess), ecs.New(sess))
- Request struct:
{Action}Input (e.g., ListAvailableInstancesInput, DescribeInstancesInput)
- Method:
svc.{Action}(input), PascalCase action name
Python
The Python SDK uses {SERVICE}Api (uppercase service name) and {Action}Request models.
from __future__ import print_function
import os
import volcenginesdkcore
import volcenginesdk{service}
from volcenginesdkcore.rest import ApiException
if __name__ == '__main__':
configuration = volcenginesdkcore.Configuration()
configuration.ak = os.environ.get("VOLCENGINE_ACCESS_KEY")
configuration.sk = os.environ.get("VOLCENGINE_SECRET_KEY")
configuration.region = "cn-beijing"
# [Advanced config — add as needed, see references/sdk-integration-python.md]
# Retry: configuration.max_retry_attempts = 5
# Timeout: configuration.connection_timeout = 10; configuration.read_timeout = 60
# Proxy: configuration.proxy = "http://proxy:8080"
# Debug: configuration.debug = True
volcenginesdkcore.Configuration.set_default(configuration)
api_instance = volcenginesdk{service}.{SERVICE}Api()
request = volcenginesdk{service}.{Action}Request(
# Set required parameters here
)
try:
resp = api_instance.{action_snake_case}(request)
print(resp)
except ApiException as e:
print("API exception: %s\n" % e)
Key points:
- Package:
volcenginesdkcore + volcenginesdk{service} (all lowercase, no separators, e.g., volcenginesdkbilling, volcenginesdkecs)
- Config:
volcenginesdkcore.Configuration(), set .ak, .sk, .region, then set_default()
- API class:
volcenginesdk{service}.{SERVICE}Api() — service name ALL CAPS (e.g., BILLINGApi, ECSApi, VPCApi)
- Request class:
volcenginesdk{service}.{Action}Request(...) (PascalCase, e.g., ListAvailableInstancesRequest)
- Method:
api_instance.{action_snake_case}(request) — snake_case (e.g., list_available_instances, describe_instances)
- Exception:
from volcenginesdkcore.rest import ApiException
Java
The Java SDK uses {ServiceName}Api and {Action}Request models under com.volcengine.{service}.
package com.volcengine.sample;
import com.volcengine.ApiClient;
import com.volcengine.ApiException;
import com.volcengine.sign.Credentials;
import com.volcengine.{service}.{ServiceName}Api;
import com.volcengine.{service}.model.*;
public class Example {
public static void main(String[] args) throws Exception {
String ak = System.getenv("VOLCENGINE_ACCESS_KEY");
String sk = System.getenv("VOLCENGINE_SECRET_KEY");
String region = "cn-beijing";
ApiClient apiClient = new ApiClient()
.setCredentials(Credentials.getCredentials(ak, sk))
.setRegion(region);
// [Advanced config — add as needed, see references/sdk-integration-java.md]
// Retry: apiClient.setRetrySettings(new RetrySettings().setMaxAttempts(5));
// Timeout: apiClient.setConnectionTimeout(5000); apiClient.setReadTimeout(30000);
// Proxy: apiClient.setHttpProxy("http://proxy:8080");
// Debug: apiClient.setDebugging(true);
{ServiceName}Api api = new {ServiceName}Api(apiClient);
{Action}Request request = new {Action}Request();
// request.setParamName(value);
try {
{Action}Response resp = api.{actionCamelCase}(request);
System.out.println(resp);
} catch (ApiException e) {
System.out.println(e.getResponseBody());
}
}
}
Key points:
- Package:
com.volcengine.{service} (lowercase, e.g., com.volcengine.billing, com.volcengine.ecs)
- ApiClient:
new ApiClient().setCredentials(Credentials.getCredentials(ak, sk)).setRegion(region)
- API class:
{ServiceName}Api (PascalCase, e.g., BillingApi, EcsApi) — constructor takes apiClient
- Request class:
{Action}Request (e.g., ListAvailableInstancesRequest) — set params via setters
- Method:
api.{actionCamelCase}(request) — camelCase (e.g., listAvailableInstances, describeInstances)
- Exception:
ApiException, use e.getResponseBody() for details
Node.js
The Node.js SDK uses a command pattern: {SERVICE}Client + {Action}Command.
import { {SERVICE}Client, {Action}Command } from "@volcengine/{service}";
// Automatically reads VOLCENGINE_ACCESS_KEY and VOLCENGINE_SECRET_KEY from env
const client = new {SERVICE}Client({
region: "cn-beijing",
// [Advanced config — add as needed, see references/sdk-integration-nodejs.md]
// maxRetries: 5, // retry count
// autoRetry: false, // disable auto-retry
// httpOptions: { timeout: 30000 }, // timeout (ms)
// httpOptions: { proxy: { protocol: "http", host: "127.0.0.1", port: 8888 } }, // proxy
});
async function main() {
try {
const command = new {Action}Command({
// Set required parameters here
});
const response = await client.send(command);
console.log(JSON.stringify(response, null, 2));
} catch (error) {
console.error("Error:", error);
}
}
main();
Key points:
- Package:
@volcengine/{service} (lowercase, e.g., @volcengine/ecs, @volcengine/vpc)
- Client:
{SERVICE}Client (ALL CAPS service name, e.g., ECSClient, VPCClient)
- Command:
{Action}Command (PascalCase, e.g., DescribeInstancesCommand, CreateVpcCommand)
- Invocation:
client.send(command) — async, returns a Promise
- Auth: automatically reads
VOLCENGINE_ACCESS_KEY and VOLCENGINE_SECRET_KEY from env; can also pass accessKeyId/secretAccessKey in the client constructor
PHP
The PHP SDK uses classes under the \Volcengine\{Service}\ namespace.
<?php
require_once(__DIR__ . '/vendor/autoload.php');
$config = \Volcengine\Common\Configuration::getDefaultConfiguration()
->setAk(getenv("VOLCENGINE_ACCESS_KEY"))
->setSk(getenv("VOLCENGINE_SECRET_KEY"))
->setRegion("cn-beijing");
// [Advanced config — add as needed, see references/sdk-integration-php.md]
// Proxy and timeout are configured via GuzzleHttp\Client options
$httpClient = new GuzzleHttp\Client([
// 'proxy' => 'http://proxy:8080', // proxy
// 'timeout' => 60, // request timeout (seconds)
// 'connect_timeout' => 10, // connection timeout (seconds)
]);
$apiInstance = new \Volcengine\{Service}\Api\{SERVICE}Api(
$httpClient,
$config
);
$request = new \Volcengine\{Service}\Model\{Action}Request();
// $request->setParamName("value");
try {
$resp = $apiInstance->{actionCamelCase}($request);
print_r($resp);
} catch (Exception $e) {
echo 'API exception: ', $e->getMessage(), PHP_EOL;
}
Key points:
- Config:
\Volcengine\Common\Configuration::getDefaultConfiguration()->setAk()->setSk()->setRegion()
- API class:
\Volcengine\{Service}\Api\{SERVICE}Api — namespace uses PascalCase Service (e.g., Billing), class name uses ALL CAPS (e.g., BILLINGApi)
- Constructor: takes
GuzzleHttp\Client() and $config
- Request class:
\Volcengine\{Service}\Model\{Action}Request (e.g., \Volcengine\Billing\Model\ListAvailableInstancesRequest)
- Set params via setters:
$request->setProduct("value")
- Method:
$apiInstance->{actionCamelCase}($request) (e.g., listAvailableInstances)
Step 5: Present Results
After generating code:
- Display the complete code in a code block with the correct language tag
- List the dependencies the user needs to install (
go get, pip install, npm install, composer require, Maven/Gradle coordinates)
- Remind the user to set environment variables:
export VOLCENGINE_ACCESS_KEY="your-access-key"
export VOLCENGINE_SECRET_KEY="your-secret-key"
- Note important constraints from the API spec (rate limits, required permissions, data range limits, etc.)
- If the code includes advanced configuration, briefly explain each setting's purpose, defaults, and tuning advice. For example:
- "Retry defaults to 3 attempts, covers network errors and throttling — adjust via
WithMaxRetries"
- "Connection timeout defaults to 30s; consider increasing for large batch queries"
Answering SDK Configuration Questions
When the user asks how to configure or use the Volcengine SDK (rather than generate API call code), follow this approach:
Step 1: Identify the User's Need
Common configuration topics:
- Authentication: AK/SK, STS Token, AssumeRole, OIDC, SAML
- Retry: enable/disable, max attempts, backoff strategy, custom retry conditions
- Timeout: connection timeout, read timeout, per-request timeout
- Proxy: HTTP/HTTPS proxy configuration
- Endpoint: custom endpoint, region-based resolution, dual-stack (IPv6)
- SSL/HTTPS: disable SSL verification, TLS version, HTTP vs. HTTPS
- Connection pooling: pool size, keep-alive, idle connections
- Debug: debug mode, logging, middleware
- Error handling: exception types, retryable vs. non-retryable errors
- Environment variables: supported env vars per SDK
Step 2: Consult the Reference Documentation
Read the reference file for the user's target language:
| Language |
Reference File |
| Go |
references/sdk-integration-go.md |
| Python |
references/sdk-integration-python.md |
| Java |
references/sdk-integration-java.md |
| Node.js |
references/sdk-integration-nodejs.md |
| PHP |
references/sdk-integration-php.md |
These files contain concise code examples for each major configuration topic. Read the relevant file and answer with accurate, copy-paste-ready code.
If the user's question is not covered in the reference file or requires more detail, fetch the full upstream documentation from GitHub:
| Language |
Upstream Documentation URL |
| Go |
https://raw.githubusercontent.com/volcengine/volcengine-go-sdk/master/SDK_Integration.md |
| Python |
https://raw.githubusercontent.com/volcengine/volcengine-python-sdk/master/SDK_Integration.md |
| Java |
https://raw.githubusercontent.com/volcengine/volcengine-java-sdk/master/SDK_Integration.md |
| Node.js |
https://raw.githubusercontent.com/volcengine/volcengine-nodejs-sdk/master/SDK_Integration.md |
| PHP |
https://raw.githubusercontent.com/volcengine/volcengine-php-sdk/main/SDK_Integration.md |
Step 3: Provide a Clear Answer
- Show complete, runnable code snippets demonstrating the configuration
- Explain each setting's purpose and default value
- Mention caveats (e.g., "disabling SSL verification is only appropriate in test environments")
- If the user has not specified a language, ask which one they are using
- Match the answer language to the user's prompt language
Important Notes
- Always fetch data from the API Explorer — Volcengine APIs are updated frequently, so the Explorer is the authoritative source. Do not rely on memory.
- If the user's description is ambiguous (could map to multiple services or operations), list the options and ask for confirmation.
- If a service has
IsSdkAvailable: false, inform the user that the official SDK may not yet support this service, and provide a raw HTTP request example as an alternative.
- For regional services, remind the user to change the region setting if their resources are not in
cn-beijing.
1---2name: volcengine-sdk-generator3description: Generate complete, runnable Volcengine SDK code and provide SDK configuration guidance. Supports Go, Python, PHP, Java, and Node.js. Trigger this skill whenever the user wants to call a Volcengine API, generate Volcengine SDK code, or describes a cloud operation on Volcengine (e.g., "list ECS instances", "create a VPC on Volcengine", "query Volcengine billing with Python"). Also trigger when the user asks about Volcengine SDK configuration and best practices — including retry, timeout, authentication (AK/SK, STS, AssumeRole), proxy, connection pooling, SSL, debug mode, and error handling (e.g., "how to configure retry for Volcengine Go SDK", "volcengine python sdk proxy setup"). Trigger when the user mentions Volcengine service names such as ECS, VPC, CDN, CLB, RDS, Redis, Kafka, billing, IAM, DNS with code generation or SDK usage intent. When the user only needs API specification queries (parameters, error codes, response structures), hand off to the volcengine-api skill. When the user needs CLI-based operat4---5
6# Volcengine SDK Code Generator
7
8Generate complete, runnable Volcengine SDK code from natural-language descriptions, and answer SDK configuration questions.
9
10## Workflow
11
12When a user describes a Volcengine API operation, follow these steps:
13
14### Step 1: Identify Target Service, Operation, and Advanced Configuration Needs
15
16Parse the user's description to determine:
17- **Target service**: which Volcengine service (e.g., ECS, VPC, TOS, billing)
18- **Target operation**: what operation to perform (e.g., list instances, create a VPC, query billing)
19- **Target language**: which programming language (Go, Python, PHP, Java, Node.js). If not specified, ask the user.
20- **Advanced configuration needs**: whether the user mentions or the scenario implies any of the following:
21 - **Retry**: user mentions "retry", "fault tolerance", or the operation is a write/create type (prone to throttling)
22 - **Timeout**: user mentions "timeout", or the operation involves large data volumes (batch queries, file uploads)
23 - **Credentials**: user mentions "STS", "AssumeRole", "temporary credentials", "OIDC", or explicitly wants to avoid hardcoding AK/SK
24 - **Proxy/network**: user mentions "proxy" or "internal network"
25 - **Debug mode**: user mentions "debug" or "logging"
26 - **Connection pooling**: user mentions "connection pool", "high concurrency", or "pool"
27
28 If the user explicitly requests these, include the corresponding configuration in the generated code. If not explicitly requested but implied by the scenario (e.g., resource creation naturally warrants retry), include suggested configuration as comments.
29
30### Step 2: Query Service Metadata via Volcengine API Explorer
31
32Use the following APIs to find the correct service code, version, and action name. This step is critical because guessing often produces incorrect code — the API Explorer is the authoritative source.
33
34**2a. Find the ServiceCode**
35
36Fetch the service catalog:
37```
38GET https://api.volcengine.com/api/common/explorer/services
39```
40Response structure:
41```json
42{
43 "Result": {
44 "Categories": [
45 {
46 "CategoryName": "...",
47 "Services": [
48 {
49 "ServiceCn": "Cloud Server",
50 "ServiceCode": "ecs",
51 "Product": "ECS",
52 "IsSdkAvailable": true,
53 "RegionType": "regional"
54 }
55 ]
56 }
57 ]
58 }
59}
60```
61Match the user's intent to the correct `ServiceCode` based on `ServiceCn`, `Product`, and category name.
62
63**2b. Find the API version**
64
65```
66GET https://api.volcengine.com/api/common/explorer/versions?ServiceCode={ServiceCode}
67```
68Response:
69```json
70{
71 "Result": {
72 "Versions": [
73 {
74 "ServiceCode": "billing",
75 "Version": "2022-01-01",
76 "IsDefault": 0
77 }
78 ]
79 }
80}
81```
82Use the version with `IsDefault == 1`. If no default version exists, use the latest available.
83
84**2c. Find the Action name**
85
86```
87GET https://api.volcengine.com/api/common/explorer/apis?ServiceCode={ServiceCode}&Version={Version}&APIVersion={Version}
88```
89Response:
90```json
91{
92 "Result": {
93 "Groups": [
94 {
95 "Name": "Instance",
96 "Apis": [
97 {
98 "Action": "DescribeInstances",
99 "NameCn": "Query instance list",
100 "Description": "..."
101 }
102 ]
103 }
104 ]
105 }
106}
107```
108Match user intent using the `Action` name and `NameCn` (Chinese name).
109
110**2c-alt: Search API (when direct lookup fails)**
111
112If the service catalog or API list cannot clearly match the user's description — for example, the user uses vague terms, Chinese names that don't map directly to a ServiceCode, or the API list doesn't seem to contain what the user wants — use the search API as a fallback:
113
114```
115GET https://api.volcengine.com/api/common/search/all?Query={URL-encoded search term}&Channel=api&Limit=10
116```
117
118Search terms can be Chinese or English — use whichever best matches the user's description.
119
120Response structure:
121```json
122{
123 "Result": {
124 "List": [
125 {
126 "BizInfo": {
127 "Action": "ListProjects",
128 "ServiceCn": "Access Control",
129 "ServiceCode": "iam",
130 "Version": "2021-08-01"
131 },
132 "Highlight": [
133 {"Field": "title", "Summary": "Get <em>project</em> <em>list</em>"}
134 ]
135 }
136 ],
137 "Total": 200
138 }
139}
140```
141
142Select the best match based on `ServiceCn`, `Action`, and highlight text, then continue to step 2d.
143
144The search API is particularly useful when:
145- The user describes the operation in natural language but doesn't know which service owns it
146- A service has too many APIs to browse manually
147- The description spans multiple services (search returns results across all services)
148
149**2d. Get full API parameter details**
150
151```
152GET https://api.volcengine.com/api/common/explorer/api-swagger?ServiceCode={ServiceCode}&Version={Version}&APIVersion={Version}&ActionName={Action}
153```
154Returns the full Swagger/OpenAPI specification, including:
155- HTTP method (GET/POST)
156- All request parameters with types, required flags, and descriptions
157- Response structure
158- Constraints and validation rules
159- **`x-demo` field**: contains `requestDemo` and `responseDemo` with official examples
160
161Read this specification carefully — it is essential for generating accurate code.
162
163**2e. Extract parameter example values (from x-demo requestDemo)**
164
165The `info.x-demo` array in the Swagger response contains `requestDemo` — official request examples. Extract realistic parameter values from these to populate generated code.
166
167Extraction process:
1681. Locate `info.x-demo[0].requestDemo` and parse the request body JSON
1692. Use requestDemo values as example values in generated code — they are more accurate and realistic than invented values
1703. For masked values (e.g., `cc5silum********`), keep the masked format and add a comment prompting the user to replace with real values
1714. If a parameter value is a JSON string (e.g., a `Config` field), format it clearly and comment each sub-field
172
173Example: for VKE CreateAddon, requestDemo contains:
174```json
175{
176 "ClusterId": "cc5silum********",
177 "Name": "ingress-nginx",
178 "DeployMode": "Unmanaged",
179 "DeployNodeType": ["VirtualNode"],
180 "Config": "{\"Replica\":1,\"Resource\":{\"Request\":{\"Cpu\":\"0.25\",\"Memory\":\"512Mi\"},\"Limit\":{\"Cpu\":\"0.5\",\"Memory\":\"1024Mi\"}},\"PrivateNetwork\":{\"SubnetId\":\"subnet-2d61qn69iji****\",\"IpVersion\":\"IPV4\"}}"
181}
182```
183Use these example values directly instead of empty placeholders.
184
185**2f. Retrieve detailed configuration for complex parameters**
186
187Some parameter `description` fields contain documentation links (e.g., `https://www.volcengine.com/docs/...`) pointing to detailed configuration guides. For complex parameters, fetch these links for more information:
188
189When to consult documentation:
190- The parameter value is a JSON string with a "see detailed configuration" reference in the description (e.g., VKE `Config`)
191- The parameter is a nested structure whose sub-field format is documented externally
192- The `enum` values have unclear meanings that are explained in the documentation
193
194Processing flow:
1951. Check whether the parameter `description` contains a `volcengine.com/docs` link
1962. If so, use WebFetch to retrieve the linked page and extract configuration details relevant to the parameter
1973. Incorporate documentation examples into the generated code as comments or structured parameters
1984. If the documentation is inaccessible, fall back to requestDemo example values
199
200**2g. Determine required and recommended parameters**
201
202Required-field detection relies on multiple sources, not just the `required` array:
203
2041. **Explicitly required**: listed in the Swagger `required` array
2052. **Implied by description**: the description contains phrases like "must specify", "required", or equivalent
2063. **Logically required**: semantically essential even if not formally marked (e.g., instance type and network config when creating resources)
2074. **Conditionally required**: the description states "required when X=Y" — if the user's scenario matches, include it
208
209Parameter value priority:
2101. **requestDemo example values** (highest priority): use the official examples directly
2112. **`example` field**: individual parameter `example` values from the Swagger spec
2123. **enum values**: pick the most common or general-purpose option
2134. **Documentation recommendations**: values extracted from linked docs
2145. **Industry conventions**: reasonable defaults following cloud-computing norms (e.g., `172.16.0.0/16` for CIDR, descriptive names for instances)
215
216### Step 3: Consult SDK Configuration References (as needed)
217
218If Step 1 identified advanced configuration needs, read the corresponding reference file for the target language to get accurate configuration code:
219
220| Language | Reference File |
221|----------|---------------|
222| Go | `references/sdk-integration-go.md` |
223| Python | `references/sdk-integration-python.md` |
224| Java | `references/sdk-integration-java.md` |
225| Node.js | `references/sdk-integration-nodejs.md` |
226| PHP | `references/sdk-integration-php.md` |
227
228These files contain verified code snippets for retry, timeout, credentials, proxy, connection pooling, and debug configuration. Use these patterns directly rather than writing from memory — SDK configuration varies significantly across languages, and the reference files ensure accuracy.
229
230### Step 4: Generate Complete SDK Code
231
232Generate a complete, runnable code example following these rules:
233
234#### General Rules (all languages)
235
2361. **Authentication**: read AK/SK from environment variables `VOLCENGINE_ACCESS_KEY` and `VOLCENGINE_SECRET_KEY` by default. If the user needs a different auth method (STS, AssumeRole, OIDC), use the corresponding pattern from the reference files. The exact reading mechanism varies by language — see each language section and the reference files.
2372. **Region**: default to `cn-beijing` for regional services. Add a comment noting that users can change this.
2383. **Required parameters**: include all required parameters (sources per step 2g), using realistic example values from requestDemo or example fields. Add a comment next to each value explaining its meaning and source.
2394. **Parameter value quality**: values must follow realistic formats and business semantics, not simple placeholders:
240 - Instance IDs: use masked format like `i-abc123******` (from requestDemo)
241 - CIDRs: use reasonable ranges like `172.16.0.0/16`
242 - Enums: use the most common option
243 - Nested JSON configs: expand into readable multi-line format with per-field comments
2445. **Complex parameter handling**: for parameters whose value is a JSON string (e.g., VKE Config), build a struct/dict first and then serialize to JSON, rather than hardcoding a long string. This makes the code more readable and easier to modify.
2456. **Optional parameters**: include commonly-used optional parameters (e.g., pagination) as commented-out lines with explanations.
2467. **Error handling**: include standard error handling for the target language.
2478. **Output**: print the response in a readable format (e.g., formatted JSON).
2489. **Comments**: add a header comment describing the code's purpose. Add inline comments for non-obvious parameters. Match comment language to the user's prompt language.
24910. **Advanced configuration integration**: when the user has advanced config needs, weave the configuration naturally into the main code (not as a separate block), producing a single runnable file:
250 - **Retry**: add retry settings during client/config initialization, with comments explaining defaults and tunable parameters
251 - **Timeout**: set global timeout during client initialization; show per-request timeout usage if needed
252 - **Credentials**: replace the default AK/SK auth code with the user-specified method (STS, AssumeRole, etc.)
253 - **Proxy**: add proxy settings in client configuration
254 - **Debug**: enable debug mode in client configuration
255 - **Connection pooling**: set pool parameters in client configuration
256
257#### Go
258
259The Go SDK uses `{Action}Input` structs (not `Request`). Services are instantiated via `{service}.New(sess)`.
260
261```go
262package main
263
264import (
265 "fmt"
266 "os"
267 "github.com/volcengine/volcengine-go-sdk/service/{service}"
268 "github.com/volcengine/volcengine-go-sdk/volcengine"
269 "github.com/volcengine/volcengine-go-sdk/volcengine/credentials"
270 "github.com/volcengine/volcengine-go-sdk/volcengine/session"
271)
272
273func main() {
274 ak := os.Getenv("VOLCENGINE_ACCESS_KEY")
275 sk := os.Getenv("VOLCENGINE_SECRET_KEY")
276 region := "cn-beijing"
277
278 config := volcengine.NewConfig().
279 WithRegion(region).
280 WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
281
282 // [Advanced config — add as needed, see references/sdk-integration-go.md]
283 // Retry: config.WithMaxRetries(5)
284 // Timeout: config.WithHTTPClient(&http.Client{Timeout: 60 * time.Second})
285 // Proxy: config.WithHTTPProxy("http://proxy:8080")
286 // Debug: config.WithDebug(true)
287
288 sess, err := session.NewSession(config)
289 if err != nil {
290 panic(err)
291 }
292 svc := {service}.New(sess)
293
294 input := &{service}.{Action}Input{
295 // Set required parameters here
296 }
297 resp, err := svc.{Action}(input)
298 if err != nil {
299 panic(err)
300 }
301 fmt.Println(resp)
302}
303```
304
305Key points:
306- Package path: `github.com/volcengine/volcengine-go-sdk/service/{service}` (lowercase, e.g., `billing`, `ecs`, `vpc`)
307- Config chain: `volcengine.NewConfig().WithRegion(region).WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))`
308- Session: `session.NewSession(config)` (returns session and error)
309- Service client: `{service}.New(sess)` (e.g., `billing.New(sess)`, `ecs.New(sess)`)
310- Request struct: `{Action}Input` (e.g., `ListAvailableInstancesInput`, `DescribeInstancesInput`)
311- Method: `svc.{Action}(input)`, PascalCase action name
312
313#### Python
314
315The Python SDK uses `{SERVICE}Api` (uppercase service name) and `{Action}Request` models.
316
317```python
318from __future__ import print_function
319import os
320import volcenginesdkcore
321import volcenginesdk{service}
322from volcenginesdkcore.rest import ApiException
323
324if __name__ == '__main__':
325 configuration = volcenginesdkcore.Configuration()
326 configuration.ak = os.environ.get("VOLCENGINE_ACCESS_KEY")
327 configuration.sk = os.environ.get("VOLCENGINE_SECRET_KEY")
328 configuration.region = "cn-beijing"
329
330 # [Advanced config — add as needed, see references/sdk-integration-python.md]
331 # Retry: configuration.max_retry_attempts = 5
332 # Timeout: configuration.connection_timeout = 10; configuration.read_timeout = 60
333 # Proxy: configuration.proxy = "http://proxy:8080"
334 # Debug: configuration.debug = True
335
336 volcenginesdkcore.Configuration.set_default(configuration)
337
338 api_instance = volcenginesdk{service}.{SERVICE}Api()
339 request = volcenginesdk{service}.{Action}Request(
340 # Set required parameters here
341 )
342
343 try:
344 resp = api_instance.{action_snake_case}(request)
345 print(resp)
346 except ApiException as e:
347 print("API exception: %s\n" % e)
348```
349
350Key points:
351- Package: `volcenginesdkcore` + `volcenginesdk{service}` (all lowercase, no separators, e.g., `volcenginesdkbilling`, `volcenginesdkecs`)
352- Config: `volcenginesdkcore.Configuration()`, set `.ak`, `.sk`, `.region`, then `set_default()`
353- API class: `volcenginesdk{service}.{SERVICE}Api()` — service name ALL CAPS (e.g., `BILLINGApi`, `ECSApi`, `VPCApi`)
354- Request class: `volcenginesdk{service}.{Action}Request(...)` (PascalCase, e.g., `ListAvailableInstancesRequest`)
355- Method: `api_instance.{action_snake_case}(request)` — snake_case (e.g., `list_available_instances`, `describe_instances`)
356- Exception: `from volcenginesdkcore.rest import ApiException`
357
358#### Java
359
360The Java SDK uses `{ServiceName}Api` and `{Action}Request` models under `com.volcengine.{service}`.
361
362```java
363package com.volcengine.sample;
364
365import com.volcengine.ApiClient;
366import com.volcengine.ApiException;
367import com.volcengine.sign.Credentials;
368import com.volcengine.{service}.{ServiceName}Api;
369import com.volcengine.{service}.model.*;
370
371public class Example {
372 public static void main(String[] args) throws Exception {
373 String ak = System.getenv("VOLCENGINE_ACCESS_KEY");
374 String sk = System.getenv("VOLCENGINE_SECRET_KEY");
375 String region = "cn-beijing";
376
377 ApiClient apiClient = new ApiClient()
378 .setCredentials(Credentials.getCredentials(ak, sk))
379 .setRegion(region);
380
381 // [Advanced config — add as needed, see references/sdk-integration-java.md]
382 // Retry: apiClient.setRetrySettings(new RetrySettings().setMaxAttempts(5));
383 // Timeout: apiClient.setConnectionTimeout(5000); apiClient.setReadTimeout(30000);
384 // Proxy: apiClient.setHttpProxy("http://proxy:8080");
385 // Debug: apiClient.setDebugging(true);
386
387 {ServiceName}Api api = new {ServiceName}Api(apiClient);
388
389 {Action}Request request = new {Action}Request();
390 // request.setParamName(value);
391
392 try {
393 {Action}Response resp = api.{actionCamelCase}(request);
394 System.out.println(resp);
395 } catch (ApiException e) {
396 System.out.println(e.getResponseBody());
397 }
398 }
399}
400```
401
402Key points:
403- Package: `com.volcengine.{service}` (lowercase, e.g., `com.volcengine.billing`, `com.volcengine.ecs`)
404- ApiClient: `new ApiClient().setCredentials(Credentials.getCredentials(ak, sk)).setRegion(region)`
405- API class: `{ServiceName}Api` (PascalCase, e.g., `BillingApi`, `EcsApi`) — constructor takes `apiClient`
406- Request class: `{Action}Request` (e.g., `ListAvailableInstancesRequest`) — set params via setters
407- Method: `api.{actionCamelCase}(request)` — camelCase (e.g., `listAvailableInstances`, `describeInstances`)
408- Exception: `ApiException`, use `e.getResponseBody()` for details
409
410#### Node.js
411
412The Node.js SDK uses a command pattern: `{SERVICE}Client` + `{Action}Command`.
413
414```javascript
415import { {SERVICE}Client, {Action}Command } from "@volcengine/{service}";
416
417// Automatically reads VOLCENGINE_ACCESS_KEY and VOLCENGINE_SECRET_KEY from env
418const client = new {SERVICE}Client({
419 region: "cn-beijing",
420 // [Advanced config — add as needed, see references/sdk-integration-nodejs.md]
421 // maxRetries: 5, // retry count
422 // autoRetry: false, // disable auto-retry
423 // httpOptions: { timeout: 30000 }, // timeout (ms)
424 // httpOptions: { proxy: { protocol: "http", host: "127.0.0.1", port: 8888 } }, // proxy
425});
426
427async function main() {
428 try {
429 const command = new {Action}Command({
430 // Set required parameters here
431 });
432 const response = await client.send(command);
433 console.log(JSON.stringify(response, null, 2));
434 } catch (error) {
435 console.error("Error:", error);
436 }
437}
438
439main();
440```
441
442Key points:
443- Package: `@volcengine/{service}` (lowercase, e.g., `@volcengine/ecs`, `@volcengine/vpc`)
444- Client: `{SERVICE}Client` (ALL CAPS service name, e.g., `ECSClient`, `VPCClient`)
445- Command: `{Action}Command` (PascalCase, e.g., `DescribeInstancesCommand`, `CreateVpcCommand`)
446- Invocation: `client.send(command)` — async, returns a Promise
447- Auth: automatically reads `VOLCENGINE_ACCESS_KEY` and `VOLCENGINE_SECRET_KEY` from env; can also pass `accessKeyId`/`secretAccessKey` in the client constructor
448
449#### PHP
450
451The PHP SDK uses classes under the `\Volcengine\{Service}\` namespace.
452
453```php
454<?php
455require_once(__DIR__ . '/vendor/autoload.php');
456
457$config = \Volcengine\Common\Configuration::getDefaultConfiguration()
458 ->setAk(getenv("VOLCENGINE_ACCESS_KEY"))
459 ->setSk(getenv("VOLCENGINE_SECRET_KEY"))
460 ->setRegion("cn-beijing");
461
462// [Advanced config — add as needed, see references/sdk-integration-php.md]
463// Proxy and timeout are configured via GuzzleHttp\Client options
464$httpClient = new GuzzleHttp\Client([
465 // 'proxy' => 'http://proxy:8080', // proxy
466 // 'timeout' => 60, // request timeout (seconds)
467 // 'connect_timeout' => 10, // connection timeout (seconds)
468]);
469
470$apiInstance = new \Volcengine\{Service}\Api\{SERVICE}Api(
471 $httpClient,
472 $config
473);
474
475$request = new \Volcengine\{Service}\Model\{Action}Request();
476// $request->setParamName("value");
477
478try {
479 $resp = $apiInstance->{actionCamelCase}($request);
480 print_r($resp);
481} catch (Exception $e) {
482 echo 'API exception: ', $e->getMessage(), PHP_EOL;
483}
484```
485
486Key points:
487- Config: `\Volcengine\Common\Configuration::getDefaultConfiguration()->setAk()->setSk()->setRegion()`
488- API class: `\Volcengine\{Service}\Api\{SERVICE}Api` — namespace uses PascalCase `Service` (e.g., `Billing`), class name uses ALL CAPS (e.g., `BILLINGApi`)
489- Constructor: takes `GuzzleHttp\Client()` and `$config`
490- Request class: `\Volcengine\{Service}\Model\{Action}Request` (e.g., `\Volcengine\Billing\Model\ListAvailableInstancesRequest`)
491- Set params via setters: `$request->setProduct("value")`
492- Method: `$apiInstance->{actionCamelCase}($request)` (e.g., `listAvailableInstances`)
493
494### Step 5: Present Results
495
496After generating code:
497
4981. Display the complete code in a code block with the correct language tag
4992. List the dependencies the user needs to install (`go get`, `pip install`, `npm install`, `composer require`, Maven/Gradle coordinates)
5003. Remind the user to set environment variables:
501 ```
502 export VOLCENGINE_ACCESS_KEY="your-access-key"
503 export VOLCENGINE_SECRET_KEY="your-secret-key"
504 ```
5054. Note important constraints from the API spec (rate limits, required permissions, data range limits, etc.)
5065. If the code includes advanced configuration, briefly explain each setting's purpose, defaults, and tuning advice. For example:
507 - "Retry defaults to 3 attempts, covers network errors and throttling — adjust via `WithMaxRetries`"
508 - "Connection timeout defaults to 30s; consider increasing for large batch queries"
509
510## Answering SDK Configuration Questions
511
512When the user asks how to configure or use the Volcengine SDK (rather than generate API call code), follow this approach:
513
514### Step 1: Identify the User's Need
515
516Common configuration topics:
517- **Authentication**: AK/SK, STS Token, AssumeRole, OIDC, SAML
518- **Retry**: enable/disable, max attempts, backoff strategy, custom retry conditions
519- **Timeout**: connection timeout, read timeout, per-request timeout
520- **Proxy**: HTTP/HTTPS proxy configuration
521- **Endpoint**: custom endpoint, region-based resolution, dual-stack (IPv6)
522- **SSL/HTTPS**: disable SSL verification, TLS version, HTTP vs. HTTPS
523- **Connection pooling**: pool size, keep-alive, idle connections
524- **Debug**: debug mode, logging, middleware
525- **Error handling**: exception types, retryable vs. non-retryable errors
526- **Environment variables**: supported env vars per SDK
527
528### Step 2: Consult the Reference Documentation
529
530Read the reference file for the user's target language:
531
532| Language | Reference File |
533|----------|---------------|
534| Go | `references/sdk-integration-go.md` |
535| Python | `references/sdk-integration-python.md` |
536| Java | `references/sdk-integration-java.md` |
537| Node.js | `references/sdk-integration-nodejs.md` |
538| PHP | `references/sdk-integration-php.md` |
539
540These files contain concise code examples for each major configuration topic. Read the relevant file and answer with accurate, copy-paste-ready code.
541
542If the user's question is not covered in the reference file or requires more detail, fetch the full upstream documentation from GitHub:
543
544| Language | Upstream Documentation URL |
545|----------|---------------------------|
546| Go | `https://raw.githubusercontent.com/volcengine/volcengine-go-sdk/master/SDK_Integration.md` |
547| Python | `https://raw.githubusercontent.com/volcengine/volcengine-python-sdk/master/SDK_Integration.md` |
548| Java | `https://raw.githubusercontent.com/volcengine/volcengine-java-sdk/master/SDK_Integration.md` |
549| Node.js | `https://raw.githubusercontent.com/volcengine/volcengine-nodejs-sdk/master/SDK_Integration.md` |
550| PHP | `https://raw.githubusercontent.com/volcengine/volcengine-php-sdk/main/SDK_Integration.md` |
551
552### Step 3: Provide a Clear Answer
553
554- Show complete, runnable code snippets demonstrating the configuration
555- Explain each setting's purpose and default value
556- Mention caveats (e.g., "disabling SSL verification is only appropriate in test environments")
557- If the user has not specified a language, ask which one they are using
558- Match the answer language to the user's prompt language
559
560## Important Notes
561
562- Always fetch data from the API Explorer — Volcengine APIs are updated frequently, so the Explorer is the authoritative source. Do not rely on memory.
563- If the user's description is ambiguous (could map to multiple services or operations), list the options and ask for confirmation.
564- If a service has `IsSdkAvailable: false`, inform the user that the official SDK may not yet support this service, and provide a raw HTTP request example as an alternative.
565- For regional services, remind the user to change the region setting if their resources are not in `cn-beijing`.