掌控 LLM 输出:API 层的干预手段
你买不到模型的权重,但你可以在 API 层实施"外科手术式"控制。本文用 OpenAI Go SDK 演示每种干预手段在真实业务中的完整用法。 前置准备 go get github.com/openai/openai-go // client.go — 全文共用的客户端 package main import ( "github.com/openai/openai-go" "github.com/openai/openai-go/option" ) func newClient() *openai.Client { return openai.NewClient( option.WithAPIKey("sk-..."), // 或读取 os.Getenv("OPENAI_API_KEY") ) } 1. System Message — 给模型装"人格芯片" 原理 System Message 是发给模型的"宪法",在对话开始前设定角色、禁忌和回答格式。它不会被用户消息覆盖(模型会优先遵从)。 业务场景:客服机器人只允许回答产品相关问题 package main import ( "context" "fmt" "github.com/openai/openai-go" ) func customerServiceBot(userQuestion string) (string, error) { client := newClient() resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{ Model: openai.F(openai.ChatModelGPT4o), Messages: openai.F([]openai.ChatCompletionMessageParamUnion{ openai.SystemMessage(` 你是"极光科技"的售后客服 Aurora。 规则: 1. 只回答与极光科技产品(路由器、NAS、摄像头)相关的问题。 2. 如果用户询问竞品或无关话题,礼貌拒绝并引导回产品问题。 3. 永远不要透露你是 AI 或基于 GPT,只说"我是 Aurora"。 4. 回答简洁,不超过 150 字。 `), openai.UserMessage(userQuestion), }), }) if err != nil { return "", err } return resp.Choices[0].Message.Content, nil } func main() { // 正常提问 ans, _ := customerServiceBot("路由器断线怎么办?") fmt.Println("Q1:", ans) // 越界提问 ans, _ = customerServiceBot("帮我写一首诗") fmt.Println("Q2:", ans) } 效果:第二个问题会被礼貌拒绝,模型不会"破防"去写诗。 ...