全部產品
Search
文件中心

Alibaba Cloud Model Studio:應用的自訂參數透傳

更新時間:Dec 17, 2024

本文介紹在智能體應用、工作流程應用和智能體編排應用的調用過程中如何使用自訂參數透傳的功能。需要透傳參數的情境主要包括兩個方面:1. 外掛程式或工作流程自身所需的參數;2. 外掛程式中的使用者級鑒權Token。通過自訂參數透傳功能,您可以在調用應用時,同時傳入外掛程式或工作流程所需的相關參數。

您需要已擷取API Key配置API Key到環境變數。如果通過SDK調用,還需要安裝DashScope SDK

智能體應用的自訂外掛程式參數透傳

本文以百鍊提供的寢室公約查詢工具作為樣本,向您展示應用API如何調用自訂外掛程式的參數透傳功能

前提條件

  1. 已在智能體應用中選擇對應自訂外掛程式,並發布應用。

  2. 進入外掛程式中心,在自訂外掛程式頁簽單擊編輯外掛程式配置介面資訊,為參數加入業務透傳標識,此處將寢室公約內容序號設定為業務透傳參數,添加一行x-source: user並單擊儲存

    image

    外掛程式的自訂參數透傳必須在外掛程式錄入時指定傳入x-source業務透傳標識,未被x-source屬性修飾的參數將不會產生任何效果。
    目標外掛程式的描述請使用自然語言描述外掛程式的功能,協助大模型判斷當前任務是否需要調用當前外掛程式。

無需鑒權時

通過API調用自訂的寢室公約內容查詢外掛程式,在input對象中,使用biz_params傳遞相關資料,根據透傳的序號參數查詢特定條目並正確返回結果

Python

請求樣本

import os
from http import HTTPStatus
# 建議dashscope SDK 的版本 >= 1.14.0
import dashscope
from dashscope import Application

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
biz_params = {
    # 智能體應用的自訂外掛程式輸入參數透傳,自訂的外掛程式ID替換{your_plugin_code}
    "user_defined_params": {
        "{your_plugin_code}": {
            "article_index": 2}}}
response = Application.call(
        # 若沒有配置環境變數,可用百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        app_id='YOUR_APP_ID',
        prompt='寢室公約內容',
        biz_params=biz_params)

if response.status_code != HTTPStatus.OK:
    print(f'request_id={response.request_id}')
    print(f'code={response.status_code}')
    print(f'message={response.message}')
    print(f'請參考文檔:https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code')
else:
    print('%s\n' % (response.output.text))  # 處理只輸出文本text
    # print('%s\n' % (response.usage))

響應樣本

寢室公約的第二條規定如下:

"寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。"

這表明在寢室內,成員之間應該培養一種積極正面的生活和學習氛圍,彼此協助和支援,同時也要學會理解和尊重他人。如果您需要瞭解公約的其他條款,請告訴我!

Java

請求樣本

import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

public class Main {
  static {
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    public static void appCall() throws NoApiKeyException, InputRequiredException {
        String bizParams =
                // 智能體應用的自訂外掛程式輸入參數透傳,自訂的外掛程式ID替換{your_plugin_code}
                "{\"user_defined_params\":{\"{your_plugin_code}\":{\"article_index\":2}}}";
        ApplicationParam param = ApplicationParam.builder()
                // 若沒有配置環境變數,可用百鍊API Key將下行替換為:.apiKey("sk-xxx")。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .appId("YOUR_APP_ID")
                .prompt("寢室公約內容")
                .bizParams(JsonUtils.parse(bizParams))
                .build();

        Application application = new Application();
        ApplicationResult result = application.call(param);
        System.out.printf("%s\n",
                result.getOutput().getText());
    }

    public static void main(String[] args) {
        try {
            appCall();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.printf("Exception: %s", e.getMessage());
            System.out.println("請參考文檔:https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code");
        }
        System.exit(0);
    }
}      

響應樣本

寢室公約的第二條規定如下:

第二條 寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。

這強調了在共同生活環境中,室友之間應該保持積極正面的關係,通過相互協助和支援來營造一個和諧的生活和學習氛圍。如果有更多具體的條款需要瞭解,請告知我。

HTTP

curl

請求樣本

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/apps/YOUR_APP_ID/completion \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "input": {
        "prompt": "寢室公約內容",
        "biz_params": 
        {
            "user_defined_params":
            {
                "{your_plugin_code}":
                    {
                    "article_index": 2
                    }
            }
        } 
    },
    "parameters":  {},
    "debug":{}
}'
YOUR_APP_ID替換為實際的應用 ID。

響應樣本

{"output":
{"finish_reason":"stop",
"session_id":"e151267ffded4fbdb13d91439011d31e",
"text":"寢室公約的第二條內容是:“寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。”這意呀著在寢室生活中,大家要彼此支援,共同創造一個和諧、積極向上的生活環境。"},
"usage":{"models":[{"output_tokens":94,"model_id":"qwen-max","input_tokens":453}]},
"request_id":"a39fd2b5-7e2c-983e-84a1-1039f726f18a"}%

PHP

請求樣本

<?php

# 若沒有配置環境變數,可用百鍊API Key將下行替換為:$api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
$api_key = getenv("DASHSCOPE_API_KEY");
$application_id = 'YOUR_APP_ID'; // 替換為實際的應用 ID
$url = "https://dashscope-intl.aliyuncs.com/api/v1/apps/$application_id/completion";
//{your_plugin_code}替換為實際的外掛程式ID
// 構造請求資料
$data = [
    "input" => [
        'prompt' => '寢室公約內容',
        'biz_params' => [
        'user_defined_params' => [
            '{your_plugin_code}' => [
                'article_index' => 2            
                ]
            ]
        ]
    ],
];
// 將資料編碼為 JSON
$dataString = json_encode($data);

// 檢查 json_encode 是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON encoding failed with error: " . json_last_error_msg());
}

// 初始化 cURL 對話
$ch = curl_init($url);

// 設定 cURL 選項
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $api_key
]);

// 執行請求
$response = curl_exec($ch);

// 檢查 cURL 執行是否成功
if ($response === false) {
    die("cURL Error: " . curl_error($ch));
}

// 擷取 HTTP 狀態代碼
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 關閉 cURL 對話
curl_close($ch);
// 解碼響應資料
$response_data = json_decode($response, true);
// 處理響應
if ($status_code == 200) {
    if (isset($response_data['output']['text'])) {
        echo "{$response_data['output']['text']}\n";
    } else {
        echo "No text in response.\n";
    }
}else {
    if (isset($response_data['request_id'])) {
        echo "request_id={$response_data['request_id']}\n";}
    echo "code={$status_code}\n";
    if (isset($response_data['message'])) {
        echo "message={$response_data['message']}\n";} 
    else {
        echo "message=Unknown error\n";}
}
?>

響應樣本

寢室公約的第二條規定:寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。這是為了保證大家能在一個和諧友愛的環境中生活和學習。如果有更多具體的條款需要瞭解,或者有其他問題,隨時可以問我!

Node.js

需安裝相關依賴:

npm install axios

請求樣本

const axios = require('axios');

async function callDashScope() {
    // 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey='sk-xxx'。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    const apiKey = process.env.DASHSCOPE_API_KEY;
    const appId = 'YOUR_APP_ID';// 替換為實際的應用 ID
    const pluginCode = 'YOUR_PLUGIN_CODE';// 替換為實際的外掛程式ID
    const url = `https://dashscope-intl.aliyuncs.com/api/v1/apps/${appId}/completion`;

    const data = {
        input: {
            prompt: "寢室公約內容",
            biz_params: {
                user_defined_params: {
                    [pluginCode]: {
                        // article_index為自訂外掛程式的變數,替換為實際的外掛程式變數
                        'article_index': 3
                    }
                }
            }
        },
        parameters: {},
        debug: {}
    };

    try {
        console.log("Sending request to DashScope API...");

        const response = await axios.post(url, data, {
            headers: {
                'Authorization': `Bearer ${apiKey}`,
                'Content-Type': 'application/json'
            }
        });

        if (response.status === 200) {
            if (response.data.output && response.data.output.text) {
                console.log(`${response.data.output.text}`);
            }
        } else {
            console.log("Request failed:");
            if (response.data.request_id) {
                console.log(`request_id=${response.data.request_id}`);
            }
            console.log(`code=${response.status}`);
            if (response.data.message) {
                console.log(`message=${response.data.message}`);
            } else {
                console.log('message=Unknown error');
            }
        }
    } catch (error) {
        console.error(`Error calling DashScope: ${error.message}`);
        if (error.response) {
            console.error(`Response status: ${error.response.status}`);
            console.error(`Response data: ${JSON.stringify(error.response.data, null, 2)}`);
        }
    }
}
callDashScope();

響應樣本

寢室公約的第三條規定如下:

注意安全用電,杜絕火災隱患。寢室內嚴禁使用明火、違規電器、各種灶具以及其他違規物品,不得存放易爆、易燃物品,私接電源。

如果您需要瞭解更多的規定,請告訴我。

C#

請求樣本

using System.Text;

class Program
{
    static async Task Main(string[] args)
    {
        // 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
        string apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY")?? throw new InvalidOperationException("DASHSCOPE_API_KEY environment variable is not set.");;
        string appId = "YOUR_APP_ID";// 替換為實際的應用ID

        if (string.IsNullOrEmpty(apiKey))
        {
            Console.WriteLine("請確保設定了 DASHSCOPE_API_KEY。");
            return;
        }

        string url = $"https://dashscope-intl.aliyuncs.com/api/v1/apps/{appId}/completion";

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
            string pluginCode = "{your_plugin_code}"; // {your_plugin_code}替換為實際的外掛程式 ID
            string jsonContent = $@"{{
                ""input"": {{
                    ""prompt"": ""寢室公約內容"",
                    ""biz_params"": {{
                        ""user_defined_params"": {{
                            ""{pluginCode}"": {{
                                ""article_index"": 2
                            }}
                        }}
                    }}
                }},
                ""parameters"": {{}},
                ""debug"": {{}}
            }}";

            HttpContent content = new StringContent(jsonContent, Encoding.UTF8, "application/json");

            try
            {
                HttpResponseMessage response = await client.PostAsync(url, content);

                if (response.IsSuccessStatusCode)
                {
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("Request successful:");
                    Console.WriteLine(responseBody);
                }
                else
                {
                    Console.WriteLine($"Request failed with status code: {response.StatusCode}");
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error calling DashScope: {ex.Message}");
            }
        }
    }
}

響應樣本

{
    "output": {
        "finish_reason": "stop",
        "session_id": "237ca6187c814f3b9e7461090a5f8b74",
        "text": "寢室公約的第二條規定如下:

"寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。"

這表示在寢室內,成員之間需要建立起一種積極正面的關係,通過協助、關心和支援彼此來營造一個和諧的生活和學習環境。同時也要學會理解和接受室友之間的差異,以真誠的態度去交流溝通。如果還有其他條款或具體內容想要瞭解,請告訴我!"
    },
    "usage": {
        "models": [
            {
                "output_tokens": 133,
                "model_id": "qwen-max",
                "input_tokens": 829
            }
        ]
    },
    "request_id": "64e8c359-d071-9d2e-bb94-187e86cc3a79"
}

Go

請求樣本

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	// 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey := "sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
	apiKey := os.Getenv("DASHSCOPE_API_KEY")
	appId := "YOUR_APP_ID"           // 替換為實際的應用 ID
	pluginCode := "YOUR_PLUGIN_CODE" // 替換為實際的外掛程式 ID

	if apiKey == "" {
		fmt.Println("請確保設定了DASHSCOPE_API_KEY。")
		return
	}

	url := fmt.Sprintf("https://dashscope-intl.aliyuncs.com/api/v1/apps/%s/completion", appId)

	// 建立請求體
	requestBody := map[string]interface{}{
		"input": map[string]interface{}{
			"prompt": "寢室公約內容",
			"biz_params": map[string]interface{}{
				"user_defined_params": map[string]interface{}{
					pluginCode: map[string]interface{}{
						"article_index": 2,
					},
				},
			},
		},
		"parameters": map[string]interface{}{},
		"debug":      map[string]interface{}{},
	}

	jsonData, err := json.Marshal(requestBody)
	if err != nil {
		fmt.Printf("Failed to marshal JSON: %v\n", err)
		return
	}

	// 建立 HTTP POST 請求
	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Printf("Failed to create request: %v\n", err)
		return
	}

	// 佈建要求頭
	req.Header.Set("Authorization", "Bearer "+apiKey)
	req.Header.Set("Content-Type", "application/json")

	// 發送請求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Printf("Failed to send request: %v\n", err)
		return
	}
	defer resp.Body.Close()

	// 讀取響應
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Printf("Failed to read response: %v\n", err)
		return
	}

	// 處理響應
	if resp.StatusCode == http.StatusOK {
		fmt.Println("Request successful:")
		fmt.Println(string(body))
	} else {
		fmt.Printf("Request failed with status code: %d\n", resp.StatusCode)
		fmt.Println(string(body))
	}
}

響應樣本

{
    "output": {
        "finish_reason": "stop",
        "session_id": "860d2a4c1f3649ac880298537993cb51",
        "text": "寢室公約的第二條規定如下:

寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。

這強調了在宿捨生活中,室友之間應該保持良好的互助關係,同時也要互相尊重對方。您想要瞭解其他條款的內容嗎?"
    },
    "usage": {
        "models": [
            {
                "output_tokens": 84,
                "model_id": "qwen-max",
                "input_tokens": 876
            }
        ]
    },
    "request_id": "0a250055-90a4-992d-9276-e268ad35d1ab"
}

需要鑒權時

  1. 進入外掛程式中心,在自訂外掛程式頁簽單擊編輯外掛程式開啟是否鑒權開關,選擇使用者級鑒權,單擊儲存

  2. 應用調用API中透傳使用者級鑒權Token資訊,如應用的API_KEY。

    您可以通過API調用自訂的寢室公約內容查詢外掛程式進行鑒權,使用 biz_params 傳遞相關資料,使用user_token傳遞Token資訊,鑒權通過後根據透傳的序號參數查詢特定條目並正確返回結果。

    Python

    請求樣本

    from http import HTTPStatus
    import os
    # 建議dashscope SDK 的版本 >= 1.14.0
    import dashscope
    from dashscope import Application
    
    dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
    biz_params = {
        # 智能體應用的自訂外掛程式鑒權透傳,自訂的外掛程式ID替換{your_plugin_code},鑒權資訊替換YOUR_TOKEN,如API key
        "user_defined_params": {
            "{your_plugin_code}": {
                "article_index": 2}},
        "user_defined_tokens": {
            "{your_plugin_code}": {
                "user_token": "YOUR_TOKEN"}}}
    response = Application.call(
                # 若沒有配置環境變數,可用百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
                api_key=os.getenv("DASHSCOPE_API_KEY"), 
                app_id='YOUR_APP_ID',
                prompt='寢室公約內容',
                biz_params=biz_params)
    
    if response.status_code != HTTPStatus.OK:
        print(f'request_id={response.request_id}')
        print(f'code={response.status_code}')
        print(f'message={response.message}')
        print(f'請參考文檔:https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code')
    else:
        print('%s\n' % (response.output.text))  # 處理只輸出文本text
        # print('%s\n' % (response.usage))

    響應樣本

    寢室公約的第二條規定如下:
    
    寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。
    
    如果您需要瞭解更多的規定內容,請告訴我。

    Java

    請求樣本

    import com.alibaba.dashscope.app.*;
    import com.alibaba.dashscope.exception.ApiException;
    import com.alibaba.dashscope.exception.InputRequiredException;
    import com.alibaba.dashscope.exception.NoApiKeyException;
    import com.alibaba.dashscope.utils.JsonUtils;
    import com.alibaba.dashscope.utils.Constants;
    
    public class Main {
      static {
            Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
        }
        public static void appCall() throws NoApiKeyException, InputRequiredException {
            String bizParams =
                    // {your_plugin_code}替換為實際的外掛程式ID,YOUR_TOKEN替換為實際的Token,如API key
                    "{\"user_defined_params\":{\"{your_plugin_code}\":{\"article_index\":2}}," +
                            "\"user_defined_tokens\":{\"{your_plugin_code}\":{\"user_token\":\"YOUR_TOKEN\"}}}";
            ApplicationParam param = ApplicationParam.builder()
                    // 若沒有配置環境變數,可用百鍊API Key將下行替換為:.apiKey("sk-xxx")。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
                    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                    .appId("YOUR_APP_ID")
                    .prompt("寢室公約內容")
                    .bizParams(JsonUtils.parse(bizParams))
                    .build();
    
            Application application = new Application();
            ApplicationResult result = application.call(param);
            System.out.printf("%s\n",
                    result.getOutput().getText());
        }
        public static void main(String[] args) {
            try {
                appCall();
            } catch (ApiException | NoApiKeyException | InputRequiredException e) {
                System.out.printf("Exception: %s", e.getMessage());
                System.out.println("請參考文檔:https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code");
            }
            System.exit(0);
        }
    }

    響應樣本

    寢室公約的第二條規定如下:
    
    寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。
    
    如果您需要查詢更多的規定內容,請告訴我。
    應用ID替換YOUR_APP_ID,自訂的外掛程式ID替換your_plugin_code,鑒權Token替換YOUR_TOKEN。

    HTTP

    curl

    請求樣本

    curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/apps/YOUR_APP_ID/completion \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
    --header 'Content-Type: application/json' \
    --data '{
        "input": {
            "prompt": "寢室公約內容",
            "biz_params": 
            {
                "user_defined_params":
                {
                    "{your_plugin_code}":
                        {
                        "article_index": 2
                        }
                },
                "user_defined_tokens":
                {
                    "{your_plugin_code}":
                        {
                        "user_token": "YOUR_TOKEN"
                        }
                }
            } 
        },
        "parameters":  {},
        "debug":{}
    }'
    
    
    YOUR_APP_ID替換為實際的應用 ID,自訂的外掛程式ID替換your_plugin_code,鑒權Token替換YOUR_TOKEN。

    響應樣本

    {"output":{"finish_reason":"stop",
    "session_id":"d3b5c3e269dc40479255a7a02df5c630",
    "text":"寢室公約的第二條內容為:“寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。”這強調了寢室生活中成員之間和諧相處與共同進步的重要性。"},
    "usage":{"models":[{"output_tokens":80,"model_id":"qwen-max","input_tokens":432}]},
    "request_id":"1f77154c-edc3-9003-b622-816fa2f849cf"}%

    PHP

    請求樣本

    <?php
    
    # 若沒有配置環境變數,可用百鍊API Key將下行替換為:$api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    $api_key = getenv("DASHSCOPE_API_KEY");
    $application_id = 'YOUR_APP_ID'; // 替換為實際的應用 ID
    $url = "https://dashscope-intl.aliyuncs.com/api/v1/apps/$application_id/completion";
    
    // 構造請求資料
    $data = [
        "input" => [
            'prompt' => '寢室公約內容',
            'biz_params' => [
            'user_defined_params' => [
                '{your_plugin_code}' => [//{your_plugin_code}替換為實際的外掛程式ID
                    'article_index' => 2            
                    ]
                ],
            'user_defined_tokens' => [
                '{your_plugin_code}' => [//{your_plugin_code}替換為實際的外掛程式ID
                    'user_token' => 'YOUR_TOKEN'//替換為實際的Token,如API key
                ]
            ]
            ]
        ],
    ];
    // 將資料編碼為 JSON
    $dataString = json_encode($data);
    
    // 檢查 json_encode 是否成功
    if (json_last_error() !== JSON_ERROR_NONE) {
        die("JSON encoding failed with error: " . json_last_error_msg());
    }
    
    // 初始化 cURL 對話
    $ch = curl_init($url);
    
    // 設定 cURL 選項
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $api_key
    ]);
    
    // 執行請求
    $response = curl_exec($ch);
    
    // 檢查 cURL 執行是否成功
    if ($response === false) {
        die("cURL Error: " . curl_error($ch));
    }
    
    // 擷取 HTTP 狀態代碼
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // 關閉 cURL 對話
    curl_close($ch);
    // 解碼響應資料
    $response_data = json_decode($response, true);
    // 處理響應
    if ($status_code == 200) {
        if (isset($response_data['output']['text'])) {
            echo "{$response_data['output']['text']}\n";
        } else {
            echo "No text in response.\n";
        }
    }else {
        if (isset($response_data['request_id'])) {
            echo "request_id={$response_data['request_id']}\n";}
        echo "code={$status_code}\n";
        if (isset($response_data['message'])) {
            echo "message={$response_data['message']}\n";} 
        else {
            echo "message=Unknown error\n";}
    }
    ?>

    響應樣本

    寢室公約的第二條規定如下:
    
    > 寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。
    
    如果需要瞭解更多的公約內容或其他資訊,請隨時告訴我!

    Node.js

    需安裝相關依賴:

    npm install axios

    請求樣本

    const axios = require('axios');
    async function callDashScope() {
        // 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey='sk-xxx'。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
        const apiKey = process.env.DASHSCOPE_API_KEY;
        const appId = 'YOUR_APP_ID';// 替換為實際的應用 ID
        const pluginCode = 'YOUR_PLUGIN_CODE';// 替換為實際的外掛程式ID
        const url = `https://dashscope-intl.aliyuncs.com/api/v1/apps/${appId}/completion`;
    
        const data = {
            input: {
                prompt: "寢室公約內容",
                biz_params: {
                    user_defined_params: {
                        [pluginCode]: {
                            // article_index為自訂外掛程式的變數,替換為實際的外掛程式變數
                            'article_index': 6
                        }
                    },
                    user_defined_tokens: {
                        [pluginCode]: {
                            // YOUR_TOKEN替換為實際的鑒權資訊,如API key
                            user_token: 'YOUR_TOKEN'
                        }
                    }
                }
            },
            parameters: {},
            debug: {}
        };
    
        try {
            console.log("Sending request to DashScope API...");
    
            const response = await axios.post(url, data, {
                headers: {
                    'Authorization': `Bearer ${apiKey}`,
                    'Content-Type': 'application/json'
                }
            });
    
            if (response.status === 200) {
                if (response.data.output && response.data.output.text) {
                    console.log(`${response.data.output.text}`);
                }
            } else {
                console.log("Request failed:");
                if (response.data.request_id) {
                    console.log(`request_id=${response.data.request_id}`);
                }
                console.log(`code=${response.status}`);
                if (response.data.message) {
                    console.log(`message=${response.data.message}`);
                } else {
                    console.log('message=Unknown error');
                }
            }
        } catch (error) {
            console.error(`Error calling DashScope: ${error.message}`);
            if (error.response) {
                console.error(`Response status: ${error.response.status}`);
                console.error(`Response data: ${JSON.stringify(error.response.data, null, 2)}`);
            }
        }
    }
    callDashScope();

    響應樣本

    寢室公約的第六條規定:養成良好的作息習慣,每一位寢室成員都享有休息的權利和承擔保證他人休息權利和義務。如果你需要瞭解更多的規定內容,請進一步說明。

    C#

    請求樣本

    using System.Text;
    
    class Program
    {
        static async Task Main(string[] args)
        {
            // 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
            string apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY")?? throw new InvalidOperationException("DASHSCOPE_API_KEY environment variable is not set.");;
            string appId = "YOUR_APP_ID";// 替換為實際的應用ID
    
            if (string.IsNullOrEmpty(apiKey))
            {
                Console.WriteLine("請確保設定了 DASHSCOPE_API_KEY。");
                return;
            }
    
            string url = $"https://dashscope-intl.aliyuncs.com/api/v1/apps/{appId}/completion";
    
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
                string pluginCode = "your_plugin_code"; // your_plugin_code替換為實際的外掛程式 ID
                // YOUR_TOKEN替換為實際的Token,如API key
                string jsonContent = $@"{{
                    ""input"": {{
                        ""prompt"": ""寢室公約內容"",
                        ""biz_params"": {{
                            ""user_defined_params"": {{
                                ""{pluginCode}"": {{
                                    ""article_index"": 2
                                }}
                            }},
                            ""user_defined_tokens"": {{
                                ""{pluginCode}"": {{
                                    ""user_token"": ""YOUR_TOKEN"" 
                                }}
                            }}
                        }}
                    }},
                    ""parameters"": {{}},
                    ""debug"": {{}}
                }}";
    
                HttpContent content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
    
                try
                {
                    HttpResponseMessage response = await client.PostAsync(url, content);
    
                    if (response.IsSuccessStatusCode)
                    {
                        string responseBody = await response.Content.ReadAsStringAsync();
                        Console.WriteLine("Request successful:");
                        Console.WriteLine(responseBody);
                    }
                    else
                    {
                        Console.WriteLine($"Request failed with status code: {response.StatusCode}");
                        string responseBody = await response.Content.ReadAsStringAsync();
                        Console.WriteLine(responseBody);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error calling DashScope: {ex.Message}");
                }
            }
        }
    }

    響應樣本

    {
        "output": {
            "finish_reason": "stop",
            "session_id": "1a1913a9922a401f8eba36df8ea1a062",
            "text": "寢室公約的第二條規定如下:
    
    寢室成員應當互幫互助、互相關心、互相學習、共同提高;寬容謙讓、相互尊重、以誠相待。
    
    如需瞭解更詳細的公約內容,請進一步指明。"
        },
        "usage": {
            "models": [
                {
                    "output_tokens": 66,
                    "model_id": "qwen-max",
                    "input_tokens": 802
                }
            ]
        },
        "request_id": "04bac806-c5e6-9fab-a846-a66641862be9"
    }

    Go

    請求樣本

    package main
    
    import (
    	"bytes"
    	"encoding/json"
    	"fmt"
    	"io"
    	"net/http"
    	"os"
    )
    
    func main() {
    	// 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey := "sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
    	apiKey := os.Getenv("DASHSCOPE_API_KEY")
    	appId := "YOUR_APP_ID"           // 替換為實際的應用 ID
    	pluginCode := "YOUR_PLUGIN_CODE" // 替換為實際的外掛程式 ID
    
    	if apiKey == "" {
    		fmt.Println("請確保設定了DASHSCOPE_API_KEY。")
    		return
    	}
    
    	url := fmt.Sprintf("https://dashscope-intl.aliyuncs.com/api/v1/apps/%s/completion", appId)
    
    	// 建立請求體
    	requestBody := map[string]interface{}{
    		"input": map[string]interface{}{
    			"prompt": "寢室公約內容",
    			"biz_params": map[string]interface{}{
    				"user_defined_params": map[string]interface{}{
    					pluginCode: map[string]interface{}{
    						"article_index": 10,
    					},
    				},
    				"user_defined_tokens": map[string]interface{}{
    					pluginCode: map[string]interface{}{
    						"user_token": "YOUR_USER_TOKEN", // 替換實際的鑒權 token,如API key
    					},
    				},
    			},
    		},
    		"parameters": map[string]interface{}{},
    		"debug":      map[string]interface{}{},
    	}
    
    	jsonData, err := json.Marshal(requestBody)
    	if err != nil {
    		fmt.Printf("Failed to marshal JSON: %v\n", err)
    		return
    	}
    
    	// 建立 HTTP POST 請求
    	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    	if err != nil {
    		fmt.Printf("Failed to create request: %v\n", err)
    		return
    	}
    
    	// 佈建要求頭
    	req.Header.Set("Authorization", "Bearer "+apiKey)
    	req.Header.Set("Content-Type", "application/json")
    
    	// 發送請求
    	client := &http.Client{}
    	resp, err := client.Do(req)
    	if err != nil {
    		fmt.Printf("Failed to send request: %v\n", err)
    		return
    	}
    	defer resp.Body.Close()
    
    	// 讀取響應
    	body, err := io.ReadAll(resp.Body)
    	if err != nil {
    		fmt.Printf("Failed to read response: %v\n", err)
    		return
    	}
    
    	// 處理響應
    	if resp.StatusCode == http.StatusOK {
    		fmt.Println("Request successful:")
    		fmt.Println(string(body))
    	} else {
    		fmt.Printf("Request failed with status code: %d\n", resp.StatusCode)
    		fmt.Println(string(body))
    	}
    }

    響應樣本

    {
        "output": {
            "finish_reason": "stop",
            "session_id": "b8e051ba7e954ff8919208e7b84430fa",
            "text": "寢室公約的第十條規定,寢室成員應共同努力,營造和維護內務整潔乾淨、美觀、高文化品味的寢室環境。如果需要瞭解完整的寢室公約內容,可能還需要查看其他條款或直接諮詢宿舍管理部門。對於更多具體內容,您還有想要瞭解的部分嗎?"
        },
        "usage": {
            "models": [
                {
                    "output_tokens": 70,
                    "model_id": "qwen-max",
                    "input_tokens": 855
                }
            ]
        },
        "request_id": "0921ee34-2754-9616-a826-cea33a0e0a14"
    }

工作流程應用或智能體編排應用的參數透傳

本文以根據城市名查詢城市行政地區劃分作為樣本,向您展示應用API如何調用自訂開始節點的參數透傳功能

  1. 我的應用程式中,選擇工作流程應用智能體編排應用

  2. 自訂開始節點的參數。

    1. 參考下面在工作流程應用中透傳城市名參數的例子,在應用的開始節點設定String類型變數city,同時在Prompt中插入變數city和變數query,發布應用。

      image

    2. 調用時通過biz_params傳遞city,通過prompt傳遞query。

      Python

      請求樣本

      import os
      from http import HTTPStatus
      import dashscope
      from dashscope import Application
      # 工作流程和智能體編排應用自訂參數透傳
      
      dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
      biz_params = {"city": "杭州"}
      response = Application.call(
          # 若沒有配置環境變數,可用百鍊API Key將下行替換為:api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
          api_key=os.getenv("DASHSCOPE_API_KEY"),
          app_id='YOUR_APP_ID',  # 替換為實際的應用 ID
          prompt='查詢這個城市的行政地區劃分',
          biz_params=biz_params  # 傳遞業務參數
      )
      
      if response.status_code != HTTPStatus.OK:
          print(f'request_id={response.request_id}')
          print(f'code={response.status_code}')
          print(f'message={response.message}')
          print(f'請參考文檔:https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code')
      else:
          print(f'{response.output.text}')  # 處理只輸出文本text

      響應樣本

      杭州市,作為浙江省的省會城市,其行政地區劃分包括10個市轄區:上城區、拱墅區、西湖區、濱江區、蕭山區、餘杭區、臨平區、錢塘區、富陽區、臨安區。每個區都有其獨特的特色和發展重點。
      
      - 上城區:位於杭州市中心地帶,是杭州的政治、經濟、文化中心之一。
      - 拱墅區:以運河文化為特色,擁有眾多歷史文化遺產。
      - 西湖區:著名的西湖風景區就位於此區,是旅遊觀光的重要目的地。
      - 濱江區:高新技術產業聚集地,阿里巴巴等知名企業坐落於此。
      - 蕭山區:東南部的一個行政區,經濟發展迅速,特別是製造業方面。
      - 餘杭區:近年來發展快速,尤其是互連網經濟領域,阿里巴巴總部也設在這裡(註:阿里巴巴總部實際位於濱江區)。
      - 臨平區:新成立的行政區,旨在促進該地區經濟社會全面發展。
      - 錢塘區:同樣是一個較新的行政區劃調整結果,強調創新發展和生態保護相結合。
      - 富陽區:位於杭州西南方向,以其豐富的自然景觀和悠久的歷史文化著稱。
      - 臨安區:地處杭州西部,以生態優美聞名,並且有著深厚的文化底蘊。
      
      請注意,隨著時間推移,具體的城市規劃可能會有所變化,請參考最新的官方資訊。

      Java

      請求樣本

      import com.alibaba.dashscope.app.*;
      import com.alibaba.dashscope.exception.ApiException;
      import com.alibaba.dashscope.exception.InputRequiredException;
      import com.alibaba.dashscope.exception.NoApiKeyException;
      import com.alibaba.dashscope.utils.JsonUtils;
      import io.reactivex.Flowable;
      import com.alibaba.dashscope.utils.Constants;
      
      public class Main {
        static {
              Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
          }
          public static void appCall() throws NoApiKeyException, InputRequiredException {
      
              String bizParams =
                      "{\"city\":\"杭州\"}";
              ApplicationParam param = ApplicationParam.builder()
                      // 若沒有配置環境變數,可用百鍊API Key將下行替換為:.apiKey("sk-xxx")。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
                      .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                      .appId("YOUR_APP_ID")
                      .prompt("查詢這個城市的行政地區劃分")
                      .bizParams(JsonUtils.parse(bizParams))
                      .build();
      
              Application application = new Application();
              ApplicationResult result = application.call(param);
              System.out.printf("%s\n",
                      result.getOutput().getText());
          }
      
          public static void main(String[] args) {
              try {
                  appCall();
              } catch (ApiException | NoApiKeyException | InputRequiredException e) {
                  System.out.printf("Exception: %s", e.getMessage());
                  System.out.println("請參考文檔:https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code");
              }
              System.exit(0);
          }
      }

      響應樣本

      杭州市是浙江省的省會城市,其行政地區劃分主要包括10個市轄區:上城區、拱墅區、西湖區、濱江區、蕭山區、餘杭區、臨平區、錢塘區、富陽區、臨安區。每個區都有自己的特色和發展重點。
      
      - 上城區:位於杭州市中心,擁有許多歷史文化遺產。
      - 拱墅區:以大運河文化而聞名,同時也是一個重要的商業和居住區。
      - 西湖區:以其美麗的自然風光著稱,包括著名的西湖風景區。
      - 濱江區:高新技術產業集聚地,杭州國家高新技術產業開發區就設在這裡。
      - 蕭山區:經濟發展迅速,尤其在製造業方面表現突出。
      - 餘杭區:近年來隨著阿里巴巴等高科技企業的發展而快速崛起。
      - 臨平區:2021年由原餘杭區部分地區調整而來,注重生態建設和科技創新。
      - 錢塘區:同樣是在2021年成立的新區,定位為杭州東部交通樞紐及產業發展新高地。
      - 富陽區:歷史悠久的文化名城,也是造紙業的重要基地之一。
      - 臨安區:位於杭州西部,森林覆蓋率高,生態環境良好。
      
      這些地區共同構成了杭州市獨特的地理格局和社會經濟結構。如果你對某個特定地區感興趣或需要更詳細的資訊,請告訴我!

      HTTP

      curl

      請求樣本

      curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/apps/YOUR_APP_ID/completion \
      --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
      --header 'Content-Type: application/json' \
      --data '{
          "input": {
              "prompt": "查詢這個城市的行政地區劃分",
              "biz_params": {
              "city": "杭州"}
          },
          "parameters":  {}
      }'
      
      YOUR_APP_ID替換為實際的應用 ID。

      響應樣本

      {"output":{"finish_reason":"stop","session_id":"c211219896004b50a1f6f66f2ec5413e",
      "text":"杭州市下轄10個區、1個縣,代管2個縣級市,分別為:
      上城區、拱墅區、西湖區、濱江區、蕭山區、餘杭區、臨平區、錢塘區、富陽區、臨安區、桐廬縣、淳安縣、建德市、諸暨市。
      注意,諸暨市由浙江省直轄、杭州市與紹興市共同管理。"},"usage":{},
      "request_id":"02c3c9e1-7912-9505-91aa-248d04fb1f5d"}

      PHP

      請求樣本

      <?php
      
      # 若沒有配置環境變數,可用百鍊API Key將下行替換為:$api_key="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
      $api_key = getenv("DASHSCOPE_API_KEY");
      $application_id = 'YOUR_APP_ID'; // 替換為實際的應用 ID
      $url = "https://dashscope-intl.aliyuncs.com/api/v1/apps/$application_id/completion";
      
      // 構造請求資料
      $data = [
          "input" => [
              'prompt' => '查詢這個城市的行政地區劃分',
              'biz_params' => [
                  'city' => '杭州'
              ]
          ],
      ];
      // 將資料編碼為 JSON
      $dataString = json_encode($data);
      
      // 檢查 json_encode 是否成功
      if (json_last_error() !== JSON_ERROR_NONE) {
          die("JSON encoding failed with error: " . json_last_error_msg());
      }
      
      // 初始化 cURL 對話
      $ch = curl_init($url);
      
      // 設定 cURL 選項
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
          'Content-Type: application/json',
          'Authorization: Bearer ' . $api_key
      ]);
      
      // 執行請求
      $response = curl_exec($ch);
      
      // 檢查 cURL 執行是否成功
      if ($response === false) {
          die("cURL Error: " . curl_error($ch));
      }
      
      // 擷取 HTTP 狀態代碼
      $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      // 關閉 cURL 對話
      curl_close($ch);
      // 解碼響應資料
      $response_data = json_decode($response, true);
      // 處理響應
      if ($status_code == 200) {
          if (isset($response_data['output']['text'])) {
              echo "{$response_data['output']['text']}\n";
          } else {
              echo "No text in response.\n";
          }
      } else {
          if (isset($response_data['request_id'])) {
              echo "request_id={$response_data['request_id']}\n";
          }
          echo "code={$status_code}\n";
          if (isset($response_data['message'])) {
              echo "message={$response_data['message']}\n";
          } else {
              echo "message=Unknown error\n";
          }
      }

      響應樣本

      杭州市是浙江省的省會城市,其行政地區劃分主要包括10個市轄區:上城區、拱墅區、西湖區、濱江區、蕭山區、餘杭區、臨平區、錢塘區、富陽區、臨安區。
      
      每個區都有自己的特色和發展重點,比如:
      - **上城區**和**拱墅區**位於杭州市中心,商業繁華,歷史悠久。
      - **西湖區**以美麗的西湖而聞名,同時也是一個重要的科教文化區。
      - **濱江區**則以其高新技術產業發展著稱。
      - **蕭山區**、**餘杭區**等則是近年來隨著城市發展迅速崛起的新城區或經濟開發區。
      - **臨安區**、**富陽區**等地則更多保留了自然風光與鄉村風貌。
      
      請注意,中國的行政區劃可能會根據國家政策調整有所變化,請通過官方渠道擷取最新資訊。

      Node.js

      需安裝相關依賴:

      npm install axios

      請求樣本

      const axios = require('axios');
      
      async function callDashScope() {
          // 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey='sk-xxx'。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
          const apiKey = process.env.DASHSCOPE_API_KEY;
          const appId = 'YOUR_APP_ID'; // 替換為實際的應用 ID
      
          const url = `https://dashscope-intl.aliyuncs.com/api/v1/apps/${appId}/completion`;
      
          const data = {
              input: {
                  prompt: "查詢這個城市的行政地區劃分",
                  biz_params: {
                      'city': '杭州',
                  },
              },
              parameters: {},
              debug: {},
          };
      
          try {
              console.log("Sending request to DashScope API...");
      
              const response = await axios.post(url, data, {
                  headers: {
                      'Authorization': `Bearer ${apiKey}`,
                      'Content-Type': 'application/json'
                  }
              });
      
              if (response.status === 200) {
                  if (response.data.output && response.data.output.text) {
                      console.log(`${response.data.output.text}`);
                  }
              } else {
                  console.log("Request failed:");
                  if (response.data.request_id) {
                      console.log(`request_id=${response.data.request_id}`);
                  }
                  console.log(`code=${response.status}`);
                  if (response.data.message) {
                      console.log(`message=${response.data.message}`);
                  } else {
                      console.log('message=Unknown error');
                  }
              }
          } catch (error) {
              console.error(`Error calling DashScope: ${error.message}`);
              if (error.response) {
                  console.error(`Response status: ${error.response.status}`);
                  console.error(`Response data: ${JSON.stringify(error.response.data, null, 2)}`);
              }
          }
      }
      
      callDashScope();
      

      響應樣本

      杭州市是浙江省的省會,其行政地區劃分包括10個市轄區。具體如下:
      
      1. 上城區(Shàngchéng Qū):位於杭州市中心偏南,是杭州歷史最悠久、文化底蘊最深厚的地區之一。
      2. 拱墅區(Gǒngshù Qū):原為下城區和拱墅區合并而成的新區,位於杭州市北部。
      3. 西湖區(Xīhú Qū):以世界文化遺產西湖而聞名,擁有豐富的自然與人文景觀。
      4. 濱江區(Bīnjiāng Qū):地處錢塘江南岸,是一個高新技術產業集聚地。
      5. 蕭山區(Xiāoshān Qū):位於杭州市東部,是中國重要的製造業基地之一。
      6. 餘杭區(Yúháng Qū):曾經是中國四大名鎮之一的臨平所在地,現已成為杭州重要的經濟發展區。
      7. 富陽區(Fùyáng Qū):位於杭州市西南部,因富春江穿流其間而得名。
      8. 臨安區(Lín'ān Qū):位於杭州市西部山區,以其美麗的自然風光著稱。
      9. 錢塘區(Qiántáng Qū):成立於2021年,由原大江東產業集聚區及部分蕭山區組成,旨在促進杭州東部地區的發展。
      10. 臨平區(Lín Píng Qū):從餘杭區分設出來的一個新行政區劃,主要涵蓋原餘杭區內的臨平街道等地。
      
      以上資訊反映了截至我最後更新時的情況,請注意行政區劃可能會有所調整,請以官方發布的最新訊息為準。

      C#

      請求樣本

      using System.Text;
      
      class Program
      {
          static async Task Main(string[] args)
          {
              //若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey="sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。 
              string apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY") ?? throw new InvalidOperationException("DASHSCOPE_API_KEY environment variable is not set.");
              string appId = "YOUR_APP_ID"; // 替換為實際的應用ID
              string url = $"https://dashscope-intl.aliyuncs.com/api/v1/apps/{appId}/completion";
      
              using (HttpClient client = new HttpClient())
              {
                  client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
                  string jsonContent = @"{
                      ""input"": {
                          ""prompt"": ""查詢這個城市的行政地區劃分"",
                          ""biz_params"":{
                              ""city"":""杭州""
                          }
                      },
                      ""parameters"": {},
                      ""debug"": {}
                  }";
      
                  HttpContent content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
      
                  try
                  {
                      HttpResponseMessage response = await client.PostAsync(url, content);
      
                      if (response.IsSuccessStatusCode)
                      {
                          string responseBody = await response.Content.ReadAsStringAsync();
                          Console.WriteLine("Request successful:");
                          Console.WriteLine(responseBody);
                      }
                      else
                      {
                          Console.WriteLine($"Request failed with status code: {response.StatusCode}");
                          string responseBody = await response.Content.ReadAsStringAsync();
                          Console.WriteLine(responseBody);
                      }
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine($"Error calling DashScope: {ex.Message}");
                  }
              }
          }
      }

      響應樣本

      {
          "output": {
              "finish_reason": "stop",
              "session_id": "7a9ff57eec7d475fa5d487de5f5178d2",
              "text": "杭州市是浙江省的省會,它下轄有10個市轄區:上城區、拱墅區、西湖區、濱江區、蕭山區、餘杭區、臨平區、錢塘區、富陽區和臨安區。每個區都有其獨特的地理位置和發展特色。例如,西湖區以美麗的自然風光著稱,尤其是著名的杭州西湖就位於此;而濱江區則更多地以其高新技術產業發展聞名。此外,隨著城市的發展,行政區劃也可能會有所調整,請關注官方發布的最新資訊。"
          },
          "usage": {
      
          },
          "request_id": "d2c2fcc9-f821-98c9-9430-8704a2a41225"
      }

      Go

      請求樣本

      package main
      
      import (
      	"bytes"
      	"encoding/json"
      	"fmt"
      	"io"
      	"net/http"
      	"os"
      )
      
      func main() {
      	// 若沒有配置環境變數,可用百鍊API Key將下行替換為:apiKey := "sk-xxx"。但不建議在生產環境中直接將API Key寫入程式碼到代碼中,以減少API Key泄露風險。
      	apiKey := os.Getenv("DASHSCOPE_API_KEY")
      	appId := "YOUR_APP_ID" // 替換為實際的應用 ID
      
      	if apiKey == "" {
      		fmt.Println("請確保設定了DASHSCOPE_API_KEY。")
      		return
      	}
      
      	url := fmt.Sprintf("https://dashscope-intl.aliyuncs.com/api/v1/apps/%s/completion", appId)
      
      	// 建立請求體
      	requestBody := map[string]interface{}{
      		"input": map[string]interface{}{
      			"prompt": "查詢這個城市的行政地區劃分",
      			"biz_params": map[string]interface{}{
      				"city": "杭州",
      			},
      		},
      		"parameters": map[string]interface{}{},
      		"debug":      map[string]interface{}{},
      	}
      
      	jsonData, err := json.Marshal(requestBody)
      	if err != nil {
      		fmt.Printf("Failed to marshal JSON: %v\n", err)
      		return
      	}
      
      	// 建立 HTTP POST 請求
      	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
      	if err != nil {
      		fmt.Printf("Failed to create request: %v\n", err)
      		return
      	}
      
      	// 佈建要求頭
      	req.Header.Set("Authorization", "Bearer "+apiKey)
      	req.Header.Set("Content-Type", "application/json")
      
      	// 發送請求
      	client := &http.Client{}
      	resp, err := client.Do(req)
      	if err != nil {
      		fmt.Printf("Failed to send request: %v\n", err)
      		return
      	}
      	defer resp.Body.Close()
      
      	// 讀取響應
      	body, err := io.ReadAll(resp.Body)
      	if err != nil {
      		fmt.Printf("Failed to read response: %v\n", err)
      		return
      	}
      
      	// 處理響應
      	if resp.StatusCode == http.StatusOK {
      		fmt.Println("Request successful:")
      		fmt.Println(string(body))
      	} else {
      		fmt.Printf("Request failed with status code: %d\n", resp.StatusCode)
      		fmt.Println(string(body))
      	}
      }
      

      響應樣本

      {
          "output": {
              "finish_reason": "stop",
              "session_id": "2dc3e1a9dcd248c6bb9ca92bffc3e745",
              "text": "杭州市,簡稱“杭”,是浙江省的省會城市。根據最新的行政區劃調整,杭州市現轄10個市轄區、2個縣級市和1個縣,具體如下:
      
      - 市轄區(10個):上城區、拱墅區、西湖區、濱江區、蕭山區、餘杭區、臨平區、錢塘區、富陽區、臨安區。
      - 縣級市(2個):建德市、桐廬縣(注意這裡的桐廬實際上被列為縣級市處理,但準確地說它是一個縣)。
      - 縣(1個):淳安縣。
      
      請注意,隨著時間的變化,行政地區可能會有所調整,請以官方最新發行的訊息為準。上述資訊基於較新的資料整理而來,對於最新的變動情況,建議訪問政府官方網站擷取最準確的資訊。"
          },
          "usage": {
      
          },
          "request_id": "d3c8f368-b645-9446-bfe4-20ca51821a02"
      }

相關文檔

請參考建立自訂外掛程式應用調用應用調用API參考