本文为您提供大模型应用防火墙接口调用的示例代码。实际使用时,您可以替换成 SDK 中已经支持的任意接口。
调用前,请确保已经完成Go 安装和初始化。
调用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 - 检查大模型响应内容是否合规。
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 } } } }
上述代码中流式内容检测的实现逻辑如下流程图所示:
调用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()) } }