深夜提醒

现在是深夜,建议您注意休息,不要熬夜哦~

🏮 🏮 🏮

新年快乐

祝君万事如意心想事成!

2024 桐庐半程马拉松
00:00:00
时间
0.00
距离(公里)
--:--
配速
--
步频
--
心率 (bpm)
--
配速
步频
|
share-image
ESC

为博客接入 AI 智能客服:PicoClaw 部署实战

前言

作为一个技术博主,经常有访客通过博客的在线聊天功能向我咨询问题。但问题是——我不可能 24 小时守在电脑前回复消息。很多访客的问题其实都比较通用,比如:

  • “这个技术问题怎么解决?”
  • “能推荐一些学习资源吗?”
  • “你是做什么工作的?”

这些问题完全可以让 AI 来帮我回答!于是我开始寻找一个轻量级、可部署在自己服务器上、能自定义人设的 AI 客服方案。

为什么选择 PicoClaw?

市面上有很多 AI 客服方案,但我最终选择了 PicoClaw,原因如下:

特性 PicoClaw 其他方案
资源占用 <10MB 内存 通常 100MB+
启动速度 <1 秒 几十秒
部署成本 可运行在 $10 设备 需要高配服务器
模型支持 DeepSeek、Kimi、智谱等 通常只支持 OpenAI
自定义程度 高,可深度定制 受限

最吸引我的是 PicoClaw 的 Agent 能力——它不仅能简单问答,还能结合上下文、调用工具、甚至执行代码。

部署架构

整个系统的架构如下:

访客浏览器 ←→ 博客后端 (WebSocket) ←→ PicoClaw HTTP Wrapper ←→ DeepSeek API

保存对话记录到数据库
  • 访客端:通过 WebSocket 连接博客后端
  • 博客后端:Go + Gin 框架,处理 WebSocket 消息转发
  • PicoClaw HTTP Wrapper:将 HTTP 请求转换为 PicoClaw 命令行调用
  • DeepSeek:提供大模型能力

部署过程

1. 安装 PicoClaw

# 下载二进制(根据架构选择)
wget https://github.com/sipeed/picoclaw/releases/download/v0.1.1/picoclaw-linux-amd64
mv picoclaw-linux-amd64 picoclaw
chmod +x picoclaw
mv picoclaw /usr/bin/

# 初始化配置
picoclaw onboard

2. 配置 DeepSeek API

编辑 ~/.picoclaw/config.json

{
"agents": {
"defaults": {
"workspace": "~/.picoclaw/workspace",
"model": "deepseek-chat",
"max_tokens": 4096,
"temperature": 0.7
}
},
"model_list": [
{
"model_name": "deepseek-chat",
"model": "deepseek/deepseek-chat",
"api_base": "https://api.deepseek.com/v1",
"api_key": "sk-your-api-key"
}
]
}

3. 创建 HTTP Wrapper

由于 PicoClaw 本身只提供命令行接口,我写了一个简单的 Go HTTP Wrapper:

package main

import (
"context"
"encoding/json"
"fmt"
"net/http"
"os/exec"
"strings"
"time"
)

func handleChat(w http.ResponseWriter, r *http.Request) {
// 解析 OpenAI 格式的请求
var req OpenAIRequest
json.NewDecoder(r.Body).Decode(&req)

// 调用 PicoClaw
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
defer cancel()

cmd := exec.CommandContext(ctx, "picoclaw", "agent", "-m", buildPrompt(req.Messages))
output, _ := cmd.Output()

// 返回 OpenAI 格式的响应
resp := OpenAIResponse{
Choices: []Choice{{
Message: Message{
Role: "assistant",
Content: cleanOutput(string(output)),
},
}},
}
json.NewEncoder(w).Encode(resp)
}

4. 修改博客后端

在博客后端的 WebSocket 处理逻辑中,当收到访客消息时,自动转发给 PicoClaw:

// 处理访客消息
func (h *ChatWSHandler) handleVisitorMessage(msg *ws.Message) {
// 保存消息到数据库
h.saveMessage(msg.SessionID, msg.Content)

// 广播给管理员(我)
h.hub.Broadcast <- msg

// AI 自动回复
if h.picoclawService.IsEnabled() {
go h.handlePicoClawReply(msg.SessionID, msg.Content)
}
}

// AI 回复处理
func (h *ChatWSHandler) handlePicoClawReply(sessionID, userMessage string) {
// 获取聊天历史作为上下文
history := h.getChatHistory(sessionID)

// 调用 PicoClaw
reply, err := h.picoclawService.Chat(userMessage, history)
if err != nil {
reply = "抱歉,我暂时无法回答,会转达给阿文。"
}

// 保存并发送回复
h.saveMessage(sessionID, reply)
h.sendToVisitor(sessionID, reply)
}

5. 设置 AI 人设

为了让 AI 更符合我的风格,我给它设置了详细的人设:

你是阿文的博客 AI 助手。

关于阿文:
- 15年互联网经验,曾任职又拍云、网易、有赞
- 技术栈:Python(7年)、Go、RPA+AI自动化
- 专注:技术支持体系搭建、自动化提效
- 成就:搭建RPA系统年节省人力3人+,获有赞"霸王龙奖"

人设准则:
1. 技术专业但通俗易懂
2. 亲切友好,像朋友聊天
3. 鼓励动手实践
4. 不确定时坦诚告知并承诺转达
5. 简洁不啰嗦

效果展示

部署完成后,访客在博客点击右下角的气泡图标,会看到”AI 在线”状态,可以随时发起对话:

点击”在线沟通”后即可与 AI 助手实时对话:

功能特性:

  • AI 在线:显示”AI 在线”状态,不再是冷冰冰的”离线”
  • 实时回复:访客发送消息后,AI 会在 1-3 秒内回复
  • 换行支持:AI 回复支持换行显示,不再是”一坨”文本
  • 上下文记忆:AI 能记住之前的对话内容,连续交流
  • 人工接管:复杂问题 AI 会坦诚告知,我会在后台看到并人工回复

实际效果

部署一周后的数据:

  • 总对话数:50+ 次
  • AI 自动解决率:约 80%
  • 平均响应时间:2 秒
  • 节省人力:平均每天节省 1-2 小时回复时间

访客反馈也很有意思:

“你们客服回复好快!” —— 其实根本没有客服,是 AI 😄

“这个 AI 还挺懂技术的” —— 因为喂了很多我的技术文章做上下文

“终于不是’离线’状态了” —— 之前的痛点已解决

遇到的问题

1. API Key 失效

一开始用的 Kimi API Key 一直报 401,后来发现是格式问题。切换到 DeepSeek 后完美解决。

2. 超时设置

PicoClaw 启动需要几秒钟加载配置,一开始设置 30 秒超时经常报错。改为 120 秒后稳定运行。

3. 前端显示

访客端显示”离线”是因为检测的是管理员在线状态。修改前端代码,改为显示”AI 在线”并始终启用聊天按钮。

总结

PicoClaw 是一个非常适合个人博客的 AI 客服方案:

轻量级:10MB 内存占用,不会影响服务器性能
低成本:DeepSeek API 费用低廉,平均每天几毛钱
高可定制:可以深度自定义人设和回复风格
易部署:单二进制文件,配置简单

如果你也想给博客接入 AI 客服,不妨试试 PicoClaw!

参考链接


关于作者:阿文,15 年技术老兵,热衷自动化和效率工具。目前在杭州,欢迎交流!

文章作者:阿文
文章链接: https://www.awen.me/post/bd3d89d4.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客

评论

0 条评论
😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘 🛑📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭 ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️ 🈯💹❇️ ✳️🌐 💠Ⓜ️🌀 💤🏧🚾 🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️
您的评论由 AI 智能审核,一般1分钟内会展示,若不展示请确认你的评论是否符合社区和法律规范
加载中...

选择联系方式

留言反馈

😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘 🛑📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭 ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️ 🈯💹❇️ ✳️🌐 💠Ⓜ️🌀 💤🏧🚾 🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️