ビュー:

Trend Vision OneAI Guard統合のためのGoコードの例。

以下は、AIガードをアプリケーションに統合する方法の例です。
package main

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"net/http"
	"os"

	openai "github.com/openai/openai-go"
)

func main() {
	// Get your Trend Vision One API key from environment variable
	apiKey := os.Getenv("V1_API_KEY")
	if apiKey == "" {
		panic("Missing V1_API_KEY environment variable")
	}

	// User prompt stored in a variable
	userPrompt := "Explain the concept of machine learning in simple terms."

	// Prepare the request payload
	payload := map[string]string{
		"guard": userPrompt,
	}
	jsonPayload, err := json.Marshal(payload)
	if err != nil {
		panic(err)
	}

	// Prepare the HTTP request
	url := "https://api.<region>.xdr.trendmicro.com/beta/aiSecurity"
	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("detailedResponse", "false") // Optional: Set to true for more detailed responses

	// Send the request
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	// Check the response for the 'action' header
	unsafe := false
	if action := resp.Header.Get("action"); action != "" && action == "block" {
		unsafe = true
	}

	fmt.Printf("Unsafe: %v\n", unsafe)

	if !unsafe {
		openaiApiKey := os.Getenv("OPENAI_API_KEY")
		if openaiApiKey == "" {
			panic("Missing OPENAI_API_KEY environment variable")
		}

		// Use OpenAI Go SDK
		ctx := context.Background()
		openaiClient := openai.NewClient(openaiApiKey)
		resp, err := openaiClient.CreateChatCompletion(ctx, &openai.CreateChatCompletionRequest{
			Model: "gpt-4",
			Messages: []openai.ChatCompletionMessage{{
				Role:    "user",
				Content: userPrompt,
			}},
			MaxTokens:   150,
			Temperature: 0.7,
		})
		if err != nil {
			panic(err)
		}

		// Marshal OpenAI response to send to TrendMicro endpoint
		guardRespPayload, err := json.Marshal(resp)
		if err != nil {
			panic(err)
		}
		guardReq, err := http.NewRequest("POST", url, bytes.NewBuffer(guardRespPayload))
		if err != nil {
			panic(err)
		}
		guardReq.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
		guardReq.Header.Set("Content-Type", "application/json")
		guardReq.Header.Set("detailedResponse", "false")

		guardResp, err := client.Do(guardReq)
		if err != nil {
			panic(err)
		}
		defer guardResp.Body.Close()

		guardAction := guardResp.Header.Get("action")
		if guardAction != "" && guardAction == "block" {
			fmt.Println("LLM response is considered unsafe. No response will be shown.")
			os.Exit(0)
		}

		// Print the LLM response (extracting the text)
		if len(resp.Choices) > 0 {
			fmt.Println(resp.Choices[0].Message.Content)
		}
	} else {
		fmt.Println("User prompt is considered unsafe. No response will be generated.")
		os.Exit(0)
	}
}