Day 2:加Prompt和Mock LLM——让Agent有人设
昨天的问题
Day 1 的 Agent 是个回声筒——你说"订单",它回"客服收到:订单"。它不知道自己是谁、该用什么语气、遇到不同问题该怎么回答。
今天做什么
两件事:
第一,给 Agent 一个 Prompt 模板。 Prompt 就是 Agent 的"工作说明书"——你告诉它"你是客服、语气亲切、不要编造信息",它就会照着做。
第二,引入 Mock LLM。 真实的 LLM 需要 API Key、需要联网、需要花钱。Mock LLM 用关键词匹配来模拟回答——零成本跑通逻辑。等逻辑通了,替换成真实 LLM 只需改一行代码。
你需要安装
bash
go get github.com/cloudwego/eino@latest代码
go
package main
import (
"context"
"fmt"
"os"
"strings"
"github.com/cloudwego/eino/components/model"
"github.com/cloudwego/eino/schema"
)
// ===== System Prompt:Agent 的"工作说明书" =====
const systemPrompt = `你是一个电商客服助手,名字叫"小智"。
你说话的规则:
1. 语气亲切友好,但不啰嗦
2. 回答尽量控制在两句话以内
3. 遇到不知道的事情,诚实说"这个问题我需要帮您查一下"
4. 绝对不要编造任何信息`
// ===== Mock ChatModel:零成本的假大模型 =====
type MockChatModel struct{}
func (m *MockChatModel) Generate(ctx context.Context,
input []*schema.Message, opts ...model.Option) (*schema.Message, error) {
// 提取用户说的最后一句话
lastMsg := input[len(input)-1].Content
// 关键词匹配模拟回答
switch {
case strings.Contains(lastMsg, "订单"):
return schema.AssistantMessage(
"您的订单正在处理中,预计 2-3 天送达。需要我帮您查具体订单号吗?"), nil
case strings.Contains(lastMsg, "退款") || strings.Contains(lastMsg, "退货"):
return schema.AssistantMessage(
"退款流程一般需要 3-5 个工作日。请问您的订单号是多少?"), nil
case strings.Contains(lastMsg, "你好") || strings.Contains(lastMsg, "嗨"):
return schema.AssistantMessage(
"您好!我是小智,很高兴为您服务。请问有什么可以帮您的?"), nil
default:
return schema.AssistantMessage(
"这个问题我需要帮您查一下,请稍等哦~"), nil
}
}
func main() {
ctx := context.Background()
// 创建 Mock 模型
mockModel := &MockChatModel{}
testMessages := []string{
"你好",
"我的订单什么时候到?",
"我要退款",
"今天天气怎么样?",
}
for _, msg := range testMessages {
input := []*schema.Message{
schema.SystemMessage(systemPrompt),
schema.UserMessage(msg),
}
response, err := mockModel.Generate(ctx, input)
if err != nil {
fmt.Printf("❌ 错误: %v\n", err)
continue
}
fmt.Printf("👤 用户: %s\n", msg)
fmt.Printf("🤖 小智: %s\n\n", response.Content)
}
}运行
bash
go run main.goMock LLM 的设计思路
为什么用关键词匹配而不是 if-else?因为架构要对。MockChatModel 实现了和真实 ChatModel 完全相同的接口——收 []*schema.Message,返回 *schema.Message。明天换成真实 LLM,只改创建模型的那一行:
go
// 从 Mock 切换到真实 OpenAI,只改这一行
realModel, _ := model.NewChatModel(ctx, &model.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})明天的预告
Agent 有人设了,但它还不会查资料。明天我们接入 RAG——把公司文档喂给它,让它能回答"退款政策是什么"这种需要专业知识的问题。
Day 2 完成。你的 Agent 现在有"人设"了,还会根据关键词给出不同回答。

