掌控 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)
}
效果:第二个问题会被礼貌拒绝,模型不会"破防"去写诗。
评论
?
参与讨论