构建一个功能完整的客服机器人,支持多轮对话、知识库查询。
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
客服: 感谢您的咨询,祝您生活愉快!👋
SystemPrompt: `识别用户意图并分类:
- 咨询产品 → 查询产品信息
- 订单查询 → 查询订单状态
- 投诉建议 → 转人工客服
- 技术支持 → 查询技术文档`
// 检测语言并切换
result, _ := ag.Chat(ctx, "Detect language and respond in the same language")
// 识别用户情绪,调整回复语气
SystemPrompt: `分析用户情绪:
- 生气/不满 → 道歉、安抚、快速解决
- 疑惑/困扰 → 耐心解释、提供详细步骤
- 满意/感谢 → 表达感谢、询问其他需求`
// 创建工单
toolRegistry.Register(CreateTicketTool())
result, _ := ag.Chat(ctx, "这个问题比较复杂,帮我创建一个技术支持工单")