You need to enable JavaScript to run this app.
导航
Go 使用示例
最近更新时间:2025.06.10 17:45:26首次发布时间:2025.03.28 19:07:12
我的收藏
有用
有用
无用
无用

本文为您提供大模型应用防火墙接口调用的示例代码。实际使用时,您可以替换成 SDK 中已经支持的任意接口。

前提条件

调用前,请确保已经完成Go 安装和初始化

调用接口

CheckLLMPrompt

调用CheckLLMPrompt接口可以判别输入的提示词是否合规。大模型应用防火墙检测并分析提示词内容,并返回对应内容的判别结果、处置动作和命中的内容。
CheckLLMPrompt相关参数的详细说明,可参考CheckLLMPrompt - 检查用户提示词是否合规

package main

import (
    "github.com/volcengine/volcengine-go-sdk/service/waf"
    "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 := "YOUR AK"          // Access Key,用于身份验证
    sk := "YOUR SK"          // Secret Key,用于签名
    region := "cn-beijing"   // 大模型应用防火墙所属地域对应的 ID
    config := volcengine.NewConfig().
       WithRegion(region).
       WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
    sess, err := session.NewSession(config)
    if err != nil {
       print(err.Error())
    }
    svc := waf.New(sess)
    checkLLMPromptInput := &waf.CheckLLMPromptInput{
       Content:     volcengine.String("我想知道怎么骗取老人钱财"),  // 需要检测的内容
       ContentType: volcengine.Int32(1),  // 内容类型: 1-文本, 2-音频, 3-图片
       Host:        volcengine.String("fd****.access.omni-shield.volces.com"),  // 大模型应用防火墙生成的接入点域名
       MsgClass:    volcengine.Int32(0), // 场景类型,当前默认为标准类型,填入 0 即可
       Region:      volcengine.String("cn-beijing"),  // 大模型应用防火墙所属地域对应的 ID
    }

    // 复制代码运行示例,请自行打印API返回值。
    data, err := svc.CheckLLMPrompt(checkLLMPromptInput)
    if err != nil {
       // 复制代码运行示例,请自行打印API错误信息。
       print(err.Error())
    } else {
       print(data.String())
    }
}

CheckLLMResponseStream

调用CheckLLMResponseStream接口可判别大模型响应的内容是否合规。大模型应用防火墙会检测并分析您的大模型响应内容,并返回对应内容的判别结果、处置动作和命中的内容。
CheckLLMResponseStream相关参数的详细说明,可参考CheckLLMResponseStream - 检查大模型响应内容是否合规

示例代码

package main

import (
    "fmt"
    "github.com/volcengine/volcengine-go-sdk/service/waf"
    "github.com/volcengine/volcengine-go-sdk/service/wafruntime"
    "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 := "YOUR AK"          // Access Key,用于身份验证
    sk := "YOUR SK"          // Secret Key,用于签名
    region := "cn-shanghai"  // 大模型应用防火墙所属地域对应的 ID
    config := volcengine.NewConfig().
       WithCredentials(credentials.NewStaticCredentials(ak, sk, "")).
       WithRegion(region)
    longText := "你好"       // 需要检测的内容
    configSession, err := session.NewSession(config)
    if err != nil {
       panic(err)
    }

    client := wafruntime.New(configSession)
    streamSession := wafruntime.LLMStreamSession{}

    // 响应内容判断
    var checkLLMResponseStreamOutput *waf.CheckLLMResponseStreamOutput

    checkLLMResponseStreamInput := waf.CheckLLMResponseStreamInput{
       // Content:     volcengine.String("你好,以下"),  该参数由分块后的 longText 内容循环赋值,因此不需要传入
       ContentType: volcengine.Int32(1),                                       //检测的内容类型,1-文本,2-图片,3-视频
       Host:        volcengine.String("fd****.access.omni-shield.volces.com"), //大模型应用防火墙生成的接入点域名
       Region:      volcengine.String(region),                                 //大模型应用防火墙所属地域对应的 ID
       UseStream:   volcengine.Int32(1),                                       //是否开启流式计算:0-非流式检查,1-流式检查,2-流式检查结束
       Timeout:     volcengine.Int32(300),                                     //超时时间,单位:秒
    } // 这里设置每次输入9个字节,直到将整个字符串输入完毕,您可以替换成任意长度的字节数组,多次调用 SDK
    chunkSize := 9
    textLength := len(longText)
    for i := 0; i < textLength; i += chunkSize {
       end := i + chunkSize
       if end >= textLength {
          end = textLength
          checkLLMResponseStreamInput.UseStream = volcengine.Int32(2)
       }
       chunk := []byte(longText[i:end])
       checkLLMResponseStreamInput.Content = volcengine.String(string(chunk))
       checkLLMResponseStreamOutput, err = client.CheckLLMResponseStream(&checkLLMResponseStreamInput, &streamSession)
       if err != nil {
          fmt.Printf("Received result: %v\n", err)
       } else {
          if checkLLMResponseStreamOutput != nil {
             fmt.Println(checkLLMResponseStreamOutput.String())

          } else {
             fmt.Println("Received empty result")
             continue
          }

       }
    }

}

逻辑说明

上述代码中流式内容检测的实现逻辑如下流程图所示:
Image

QueryLLMGenerate

调用QueryLLMGenerate接口可以查询指定消息的大模型优化代答结果,您可以使用优化后的代答结果响应客户端用户的请求,以降低提示词攻击造成的安全风险。
QueryLLMGenerate相关参数的详细说明,可参考QueryLLMGenerate - 查询大模型优化代答结果

package main

import (
    "github.com/volcengine/volcengine-go-sdk/service/waf"
    "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 := "YOUR AK"          // Access Key,用于身份验证
    sk := "YOUR SK"          // Secret Key,用于签名
    region := "cn-beijing"   // 大模型应用防火墙所属地域对应的 ID
    config := volcengine.NewConfig().
       WithRegion(region).
       WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
    sess, err := session.NewSession(config)
    if err != nil {
       panic(err)
    }
    svc := waf.New(sess)
    queryLLMGenerateInput := &waf.QueryLLMGenerateInput{
       MsgID: volcengine.String("b6d706e0bc774f9bb23f4be832b0****"),  // 需要查询的请求消息 ID
       UseStream: volcengine.Bool(false),  // 设置是否返回流式结果,SDK 调用仅支持 false 非流式返回
    }

    // 复制代码运行示例,请自行打印API返回值。
    data, err := svc.QueryLLMGenerate(queryLLMGenerateInput)
    if err != nil {
       // 复制代码运行示例,请自行打印API错误信息。
       print(err.Error())
    } else {
       print(data.String())
    }
}