场景示例

智能客服机器人

构建完整的客服机器人系统

智能客服机器人示例

构建一个功能完整的客服机器人,支持多轮对话、知识库查询。

完整代码

package main

import (
    "bufio"
    "context"
    "fmt"
    "log"
    "os"
    "strings"

    "github.com/astercloud/aster/pkg/agent"
    "github.com/astercloud/aster/pkg/provider"
    "github.com/astercloud/aster/pkg/sandbox"
    "github.com/astercloud/aster/pkg/store"
    "github.com/astercloud/aster/pkg/tools"
    "github.com/astercloud/aster/pkg/tools/builtin"
    "github.com/astercloud/aster/pkg/types"
)

func main() {
    ctx := context.Background()

    // 创建工具注册表
    toolRegistry := tools.NewRegistry()
    builtin.RegisterAll(toolRegistry)

    // 注册知识库查询工具
    toolRegistry.Register(KnowledgeBaseTool())

    // 创建依赖
    deps := &agent.Dependencies{
        ToolRegistry:     toolRegistry,
        SandboxFactory:   sandbox.NewFactory(),
        ProviderFactory:  provider.NewMultiProviderFactory(),
        Store:            store.NewMemoryStore(),
        TemplateRegistry: agent.NewTemplateRegistry(),
    }

    // 创建客服机器人
    ag, err := agent.Create(ctx, &types.AgentConfig{
        TemplateID: "assistant",
        ModelConfig: &types.ModelConfig{
            Provider: "anthropic",
            Model:    "claude-sonnet-4-5",
            APIKey:   os.Getenv("ANTHROPIC_API_KEY"),
        },
        SystemPrompt: `你是一位专业的客服助手。

服务原则:
- 友好、耐心、专业
- 先理解问题,再提供解决方案
- 使用简洁清晰的语言
- 必要时查询知识库获取准确信息

处理流程:
1. 理解用户问题
2. 查询知识库(如需要)
3. 提供清晰的解答
4. 询问是否还有其他问题

回复格式:
- 称呼用户
- 解答问题(分步骤说明)
- 提供相关链接或参考
- 礼貌结束`,
        Tools: []string{"knowledge_base"},
    }, deps)
    if err != nil {
        log.Fatal(err)
    }
    defer ag.Close()

    // 欢迎消息
    fmt.Println("========================================")
    fmt.Println("      欢迎使用智能客服系统")
    fmt.Println("========================================")
    fmt.Println("我是您的专属客服助手,有什么可以帮助您的?")
    fmt.Println("(输入 'quit' 退出)")
    fmt.Println("========================================\n")

    // 交互式对话
    scanner := bufio.NewScanner(os.Stdin)
    for {
        fmt.Print("您: ")
        if !scanner.Scan() {
            break
        }

        input := strings.TrimSpace(scanner.Text())
        if input == "" {
            continue
        }
        if input == "quit" || input == "exit" {
            fmt.Println("\n客服: 感谢您的咨询,祝您生活愉快!👋")
            break
        }

        // 发送消息
        result, err := ag.Chat(ctx, input)
        if err != nil {
            log.Printf("错误: %v", err)
            continue
        }

        // 打印响应
        fmt.Printf("\n客服: %s\n\n", result.Message.Content)
    }
}

// 知识库查询工具
func KnowledgeBaseTool() tools.Tool {
    return tools.Tool{
        Name:        "knowledge_base",
        Description: "查询产品知识库,获取准确的产品信息、使用说明、常见问题解答",
        InputSchema: map[string]interface{}{
            "type": "object",
            "properties": map[string]interface{}{
                "query": map[string]interface{}{
                    "type":        "string",
                    "description": "查询关键词或问题",
                },
                "category": map[string]interface{}{
                    "type": "string",
                    "enum": []string{"product", "order", "shipping", "refund", "technical"},
                },
            },
            "required": []string{"query"},
        },
        Handler: func(ctx context.Context, tc *tools.ToolContext) (interface{}, error) {
            query := tc.Input["query"].(string)
            category := ""
            if c, ok := tc.Input["category"].(string); ok {
                category = c
            }

            // 模拟知识库查询
            kb := getKnowledgeBase()
            results := searchKB(kb, query, category)

            return map[string]interface{}{
                "query":   query,
                "results": results,
                "count":   len(results),
            }, nil
        },
    }
}

// 模拟知识库
func getKnowledgeBase() map[string][]string {
    return map[string][]string{
        "product": {
            "产品型号:ABC-2024,价格:¥2999,特点:高性能、低功耗",
            "产品质保:2年全国联保,支持7天无理由退货",
        },
        "order": {
            "订单查询:请提供订单号,格式为 ORD-XXXXXX",
            "订单修改:下单后30分钟内可修改收货地址",
        },
        "shipping": {
            "配送时间:下单后48小时内发货,一般3-5个工作日送达",
            "物流跟踪:可通过订单号在官网查询物流信息",
        },
        "refund": {
            "退款流程:提交退款申请→商家审核→退货→退款到账",
            "退款时间:审核通过后3-7个工作日到账",
        },
        "technical": {
            "常见问题:无法开机 - 检查电源连接,长按电源键10秒",
            "技术支持:拨打400-xxx-xxxx或发送邮件至support@example.com",
        },
    }
}

func searchKB(kb map[string][]string, query string, category string) []string {
    var results []string

    searchIn := func(items []string) {
        for _, item := range items {
            if strings.Contains(strings.ToLower(item), strings.ToLower(query)) {
                results = append(results, item)
            }
        }
    }

    if category != "" {
        if items, ok := kb[category]; ok {
            searchIn(items)
        }
    } else {
        // 搜索所有类别
        for _, items := range kb {
            searchIn(items)
        }
    }

    return results
}

运行示例

export ANTHROPIC_API_KEY="sk-ant-xxx"
go run main.go

对话示例

========================================
      欢迎使用智能客服系统
========================================
我是您的专属客服助手,有什么可以帮助您的?
(输入 'quit' 退出)
========================================

您: 你好,我想了解一下你们的产品

客服: 您好!很高兴为您服务。

我们的主推产品信息如下:
- 型号:ABC-2024
- 价格:¥2,999
- 主要特点:
  • 高性能处理器
  • 低功耗设计
  • 2年全国联保
  • 支持7天无理由退货

请问您对哪方面特别感兴趣?我可以为您详细介绍。😊

您: 如果我买了不满意可以退吗?

客服: 当然可以!我们支持退货服务。

**退货政策:**
1. ✅ 7天无理由退货
2. 📦 产品需保持完好,包装完整
3. 💳 退款会原路返回

**退款流程:**
1. 提交退款申请
2. 商家审核(1-2个工作日)
3. 退货寄回
4. 退款到账(审核通过后3-7个工作日)

**温馨提示:** 建议您在收到商品后尽快检查,如有问题及时联系我们。

还有其他问题吗?

您: 物流大概多久能到?

客服: 关于物流时效,我来为您说明:

**发货时间:** 下单后48小时内发货

**配送时间:** 一般3-5个工作日送达(具体取决于您的收货地址)

**物流追踪:**
- 发货后会收到短信通知
- 可通过订单号在官网查询实时物流
- 或直接咨询我们客服

**加急服务:** 如需加急,可选择顺丰快递(需额外付费)

您的收货地址在哪个城市?我可以帮您预估更准确的时间。

您: 好的,谢谢

客服: 不客气!很高兴能帮到您。😊

如果您决定下单或有任何其他问题,随时联系我们:
- 📞 客服热线:400-xxx-xxxx
- 📧 邮箱:support@example.com
- 💬 在线客服:工作日 9:00-18:00

祝您购物愉快!

您: quit

客服: 感谢您的咨询,祝您生活愉快!👋

功能扩展

1. 意图识别

SystemPrompt: `识别用户意图并分类:
- 咨询产品 → 查询产品信息
- 订单查询 → 查询订单状态
- 投诉建议 → 转人工客服
- 技术支持 → 查询技术文档`

2. 多语言支持

// 检测语言并切换
result, _ := ag.Chat(ctx, "Detect language and respond in the same language")

3. 情感分析

// 识别用户情绪,调整回复语气
SystemPrompt: `分析用户情绪:
- 生气/不满 → 道歉、安抚、快速解决
- 疑惑/困扰 → 耐心解释、提供详细步骤
- 满意/感谢 → 表达感谢、询问其他需求`

4. 工单系统集成

// 创建工单
toolRegistry.Register(CreateTicketTool())

result, _ := ag.Chat(ctx, "这个问题比较复杂,帮我创建一个技术支持工单")

相关资源