func initAPIs()

in plugins/wasm-go/extensions/ai-agent/config.go [248:345]


func initAPIs(gjson gjson.Result, c *PluginConfig) error {
	//从插件配置中获取apis信息
	apis := gjson.Get("apis")
	if !apis.Exists() {
		return errors.New("apis is required")
	}
	if len(apis.Array()) == 0 {
		return errors.New("apis cannot be empty")
	}

	for _, item := range apis.Array() {
		serviceName := item.Get("apiProvider.serviceName")
		if !serviceName.Exists() || serviceName.String() == "" {
			return errors.New("apiProvider serviceName is required")
		}

		servicePort := item.Get("apiProvider.servicePort")
		if !servicePort.Exists() || servicePort.Int() == 0 {
			return errors.New("apiProvider servicePort is required")
		}

		domain := item.Get("apiProvider.domain")
		if !domain.Exists() || domain.String() == "" {
			return errors.New("apiProvider domain is required")
		}

		maxExecutionTime := item.Get("apiProvider.maxExecutionTime").Int()
		if maxExecutionTime == 0 {
			maxExecutionTime = 50000
		}

		apiKeyIn := item.Get("apiProvider.apiKey.in").String()

		apiKeyName := item.Get("apiProvider.apiKey.name")

		apiKeyValue := item.Get("apiProvider.apiKey.value")

		//根据多个toolsClientInfo的信息,分别初始化toolsClient
		apiClient := wrapper.NewClusterClient(wrapper.FQDNCluster{
			FQDN: serviceName.String(),
			Port: servicePort.Int(),
			Host: domain.String(),
		})

		c.APIClient = append(c.APIClient, apiClient)

		api := item.Get("api")
		if !api.Exists() || api.String() == "" {
			return errors.New("api is required")
		}

		var apiStruct API
		err := yaml.Unmarshal([]byte(api.String()), &apiStruct)
		if err != nil {
			return err
		}

		var allTool_param []ToolsParam
		//拆除服务下面的每个api的path
		for path, pathmap := range apiStruct.Paths {
			//拆解出每个api对应的参数
			for method, submap := range pathmap {
				//把参数列表存起来
				var param ToolsParam
				param.Path = path
				param.ToolName = submap.OperationID
				if method == "get" {
					param.Method = "GET"
					paramName := make([]string, 0)
					for _, parammeter := range submap.Parameters {
						paramName = append(paramName, parammeter.Name)
					}
					param.ParamName = paramName
					out, _ := json.Marshal(submap.Parameters)
					param.Parameter = string(out)
					param.Description = submap.Description
				} else if method == "post" {
					param.Method = "POST"
					schema := submap.RequestBody.Content["application/json"].Schema
					param.ParamName = schema.Required
					param.Description = submap.Summary
					out, _ := json.Marshal(schema.Properties)
					param.Parameter = string(out)
				}
				allTool_param = append(allTool_param, param)
			}
		}
		apiParam := APIsParam{
			APIKey:           APIKey{In: apiKeyIn, Name: apiKeyName.String(), Value: apiKeyValue.String()},
			URL:              apiStruct.Servers[0].URL,
			MaxExecutionTime: maxExecutionTime,
			ToolsParam:       allTool_param,
		}

		c.APIsParam = append(c.APIsParam, apiParam)
	}
	return nil
}