掌控 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)
}

效果:第二个问题会被礼貌拒绝,模型不会"破防"去写诗。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论