学院网站改造方案,网站建设与运营 就业,网站备案需要提交什么资料,泉州住房和城乡建设部网站闲鱼智能客服系统是一款为闲鱼平台打造的智能化AI客服解决方案。
系统能够自动对接闲鱼实时消息流#xff0c;管理上下文对话记录#xff0c;通过配备不同专家代理的AI模型判断用户意图#xff0c;并生成智能回复#xff0c;包含智能议价等核心功能。项目完整…闲鱼智能客服系统是一款为闲鱼平台打造的智能化AI客服解决方案。
系统能够自动对接闲鱼实时消息流管理上下文对话记录通过配备不同专家代理的AI模型判断用户意图并生成智能回复包含智能议价等核心功能。项目完整实现了与平台通信的技术细节处理。项目链接https://github.com/shaxiu/XianyuAutoAgent
架构示意图 章节导航
对话记忆库 闲鱼通信层 AI代理系统 意图路由 AI提示词配置 主协调器 闲鱼协议工具集 第一章对话记忆系统
欢迎来到闲鱼智能客服系统教程的第一章我们将从项目的核心组件之一开始聊天机器人如何记忆对话内容。
为何需要对话记忆
想象与一个即时遗忘所有对话的人交谈是何等沮丧qwq。对于二手交易平台的聊天机器人而言记忆对话历史至关重要
典型场景示例
用户询问价格可议吗 —— 机器人需记住此问题才能应答用户追问最低多少 —— 需结合前序对话理解议价意图多次议价时 —— 需记录报价次数以合理响应如您已出价两次这是最低价
对话记忆系统正是为此设计负责追踪聊天上下文及关键对话状态。
对话记忆的本质
对话记忆系统如同为每个聊天线程配备专属记事本
记录买卖双方消息内容标记重要对话状态如议价次数持久化存储历史记录
项目中的核心实现位于context_manager.py文件的ChatContextManager类。
核心功能解析 消息存储保存用户与机器人的每条消息发送者、内容、时间戳会话关联通过chat_id唯一标识每个商品对话线程状态管理记录对话特有状态如议价计数器历史检索生成回复前获取最近对话上下文持久存储采用SQLite数据库实现数据持久化 消息存取机制
当新消息到达时调用add_message_by_chat方法
# 摘自context_manager.py的简化代码片段
import sqlite3
from datetime import datetimeclass ChatContextManager:def add_message_by_chat(self, chat_id, user_id, item_id, role, content):conn sqlite3.connect(self.db_path)cursor conn.cursor()# 将消息插入数据库表cursor.execute(INSERT INTO messages (user_id, item_id, role, content, timestamp, chat_id) VALUES (?, ?, ?, ?, ?, ?),(user_id, item_id, role, content, datetime.now().isoformat(), chat_id))conn.commit()生成回复前调用get_context_by_chat获取历史
def get_context_by_chat(self, chat_id):conn sqlite3.connect(self.db_path)cursor conn.cursor()# 查询指定chat_id的最近消息cursor.execute(SELECT role, content FROM messagesWHERE chat_id ?ORDER BY timestamp ASCLIMIT ?,(chat_id, self.max_history))# 附加议价次数系统消息messages.append({role: system, content: f议价次数: {bargain_count}})议价计数器实现
通过独立数据表管理议价状态
def increment_bargain_count_by_chat(self, chat_id):# UPSERT操作存在则累加不存在则初始化cursor.execute(INSERT INTO chat_bargain_counts (chat_id, count, last_updated)VALUES (?, 1, ?)ON CONFLICT(chat_id)DO UPDATE SET count count 1, last_updated ?,(chat_id, datetime.now(), datetime.now()))def get_bargain_count_by_chat(self, chat_id):# 查询当前议价次数cursor.execute(SELECT count FROM chat_bargain_counts WHERE chat_id ?, (chat_id,))return result[0] if result else 0数据库结构设计
SQLite数据库包含核心表
表名字段说明messages消息ID/用户ID/商品ID/角色/内容/时间戳/会话IDchat_bargain_counts会话ID/议价次数/最后更新时间
系统交互流程 本章小结
对话记忆系统通过
SQLite数据库实现持久化存储会话ID关联多轮对话专用状态表记录议价次数上下文感知的响应生成
为智能客服提供连续对话能力。下一章将探讨系统如何与闲鱼平台进行通信对接。
下一章闲鱼通信层 第二章闲鱼通信层
欢迎回来在第一章对话记忆中我们学习了机器人如何记住用户对话就像为每个聊天提供智能笔记本。 但消息最初是如何进入机器人记忆的机器人又是如何通过闲鱼平台将回复发送给用户的 这就是**闲鱼通信层**的作用所在。
为什么机器人需要通信层
想象闲鱼平台网站或APP就像热闹的集市。我们的机器人需要具备以下能力
监听感知用户发送给它的专属消息对话向用户发送回复消息信息查询获取商品详情如价格、描述保持连接确保持续登录平台以维持通信
就像你需要网络连接和浏览器与网站交互机器人需要专门工具与闲鱼平台对接。闲鱼通信层就是这套工具集负责处理连接闲鱼服务器和数据交换的复杂技术细节。
这是项目中能说闲鱼语言的模块管理着机器人到平台的网络连接。 闲鱼通信层是什么
该层负责与闲鱼平台的两种主要通信方式
实时消息WebSocket类似持续开通的专线电话。当新消息到达时闲鱼可以立即呼叫机器人机器人也通过该专线即时回复。这通过WebSocket技术实现。数据获取HTTP接口当需要特定信息如商品详情或当前价格时类似于访问闲鱼网站的特定页面。这通过标准互联网请求HTTP接口实现。
除了收发消息和数据该层还处理保持登录状态的关键技术细节如管理网站Cookie和获取安全所需的临时密钥token。
在XianyuAutoAgent项目中该层主要实现在main.py管理WebSocket连接的XianyuLive类和XianyuApis.py处理HTTP请求的XianyuApis类。
工作原理高层流程图
当用户发送消息时通信层的工作流程如下
如图所示通信层是闲鱼平台与机器人系统其他部分的关键中介是唯一直接与闲鱼服务器交互的模块。
核心组件XianyuLive 和 XianyuApis
通信层的工作由两个主要类实现
组件名称文件主要职责类比XianyuLivemain.py管理WebSocket连接实时消息与闲鱼保持的专线电话XianyuApisXianyuApis.py处理HTTP请求商品信息、令牌、登录验证访问闲鱼网站的特定页面
XianyuLive消息监听
XianyuLive类负责建立和维护WebSocket连接核心是持续监听闲鱼的入站数据。
# 摘自 main.py 的简化代码片段
import asyncio
import websockets # WebSocket连接库class XianyuLive:def __init__(self, cookies_str):# ... 初始化设置cookie等...self.base_url wss://wss-goofish.dingtalk.com/ # WebSocket地址async def main(self):while True: # 失败时自动重连try:# 建立WebSocket连接async with websockets.connect(self.base_url, extra_headersself.get_websocket_headers()) as websocket:self.ws websocket# ... 连接初始化发送认证...logger.info(WebSocket已连接并注册)# 开始监听消息async for message in websocket:# 消息到达时处理await self.handle_message(message, websocket)except Exception as e:logger.error(f连接错误正在重试: {e})await asyncio.sleep(5) # 重连等待# ... handle_message、send_msg等方法...def get_websocket_headers(self):# 简化的WebSocket请求头构造return {Cookie: self.cookies_str,User-Agent: ..., # 浏览器UAOrigin: https://www.goofish.com,# ... 其他必要请求头...}# 实际运行脚本asyncio.run(xianyuLive.main())该代码连接闲鱼实时通信的WebSocket URL。
关键行async for message in websocket:使机器人暂停等待消息到达随后调用handle_message处理。
对于这部分感兴趣的可以看一下我去年写的前文 [Linux#58][HTTP] 自己构建服务器 | 实现网页分离 | 设计思路
XianyuLive发送回复
XianyuLive也处理消息发送
# 摘自 main.py 的简化代码片段
import json
import base64class XianyuLive:# ... 初始化和其他方法...async def send_msg(self, ws, cid, toid, text):# 格式化消息为闲鱼专用结构# ... 复杂的数据格式化使用base64和JSON结构...msg {lwp: /r/MessageSend/sendByReceiverScope,headers: {mid: generate_mid() # 消息唯一ID},body: [{uuid: generate_uuid(), # 消息UUIDcid: f{cid}goofish, # 会话IDconversationType: 1,content: {custom: {type: 1,data: base64_encoded_message_text # base64编码的消息}},# ... 其他消息细节...},{actualReceivers: [f{toid}goofish, # 接收者IDf{self.myid}goofish # 自身ID]}]}logger.info(f通过WebSocket发送消息: {text})await ws.send(json.dumps(msg)) # 发送格式化消息send_msg方法接收聊天ID、接收者ID和消息文本打包成闲鱼WebSocket要求的JSON结构使用base64编码通过await ws.send()发送。
XianyuApis获取商品详情
XianyuApis类负责通过HTTP请求获取非实时数据典型场景是商品详情查询
# 摘自 XianyuApis.py 的简化代码片段
import requests
import timeclass XianyuApis:def __init__(self):# ... 会话设置包含请求头和cookies...self.session requests.Session()# 加载初始cookies到会话def get_item_info(self, item_id, retry_count0):logger.debug(f尝试获取商品{item_id}的信息)# ... 重试逻辑处理...# 构造API请求参数params {api: mtop.taobao.idle.pc.detail, # 指定查询商品详情的APIt: str(int(time.time()) * 1000), # 时间戳sign: , # 签名占位}data_val {itemId: item_id }data {data: data_val}# 从cookies获取签名所需的tokentoken self.session.cookies.get(_m_h5_tk, ).split(_)[0]# 生成签名使用utils.xianyu_utils中的generate_signsign generate_sign(params[t], token, data_val)params[sign] signtry:# 发送HTTP POST请求response self.session.post(https://h5api.m.goofish.com/h5/mtop.taobao.idle.pc.detail/1.0/,paramsparams,datadata)res_json response.json()# ... 响应结果校验...if isinstance(res_json, dict) and any(SUCCESS::调用成功 in ret for ret in res_json.get(ret, [])):logger.debug(f成功获取商品{item_id}信息)return res_jsonelse:# ... 令牌刷新和重试逻辑...return self.get_item_info(item_id, retry_count 1)except Exception as e:logger.error(f获取商品信息错误: {str(e)})# ... 重试逻辑...return self.get_item_info(item_id, retry_count 1)该方法接收商品ID构造闲鱼商品详情API的专用请求包含时间戳、签名等安全参数 使用requests.Session发送HTTP POST请求。 成功时返回解析后的商品数据。 登录状态管理Cookies和令牌
保持登录状态至关重要。 XianyuApis类通过hasLogin验证cookies有效性和get_token获取API和WebSocket所需的临时令牌等方法管理登录状态 同时包含clear_duplicate_cookies、update_env_cookies等cookie管理方法。 XianyuLive类在WebSocket连接前会使用get_token获取必要令牌。 机器人需要有效cookies通常存储在.env文件作为初始登录凭证用于获取短时效的_m_h5_tkAPI签名用和accessTokenWebSocket注册用。 通信层设计为在API调用失败时自动刷新令牌只要初始cookies有效即可保持连接。
系统连接方式
当XianyuLive通过WebSocket收到需处理的消息时
提取关键信息chat_id、发送者user_id、item_id和消息content通过XianyuApis可能借助context_manager获取未入库的item_info使用ChatContextManager将消息存入对话记忆检查特殊命令如切换手动模式若非命令且未处于手动模式从对话记忆收集对话context将send_message、item_description和context传递给AI代理系统AI代理系统生成bot_reply后存入对话记忆最后通过send_msg方法经WebSocket发送回复
结论
闲鱼通信层主要由XianyuLive和XianyuApis类构成是机器人与闲鱼平台的接口主要功能包括
维护实时连接WebSocket接收即时消息发起请求HTTP接口获取必要数据通过cookies和令牌管理登录状态传递消息和相关数据到机器人系统其他部分发送机器人回复到用户端
该层如同机器人在闲鱼市场的感官系统。
现在机器人已具备接收消息和获取信息的能力接下来的问题是它如何决定回复内容这就是AI代理系统的职责我们将在下一章探讨。
下一章AI代理系统 文章转载自: http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.yrnll.cn.gov.cn.yrnll.cn http://www.morning.mytmx.cn.gov.cn.mytmx.cn http://www.morning.drndl.cn.gov.cn.drndl.cn http://www.morning.baohum.com.gov.cn.baohum.com http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.qmkyp.cn.gov.cn.qmkyp.cn http://www.morning.crsnb.cn.gov.cn.crsnb.cn http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn http://www.morning.srhqm.cn.gov.cn.srhqm.cn http://www.morning.mnslh.cn.gov.cn.mnslh.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.ljdtn.cn.gov.cn.ljdtn.cn http://www.morning.mcwgn.cn.gov.cn.mcwgn.cn http://www.morning.pcngq.cn.gov.cn.pcngq.cn http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.xhrws.cn.gov.cn.xhrws.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.kdbbm.cn.gov.cn.kdbbm.cn http://www.morning.madamli.com.gov.cn.madamli.com http://www.morning.bnmfq.cn.gov.cn.bnmfq.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.jxfsm.cn.gov.cn.jxfsm.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.flhnd.cn.gov.cn.flhnd.cn http://www.morning.lctrz.cn.gov.cn.lctrz.cn http://www.morning.kspfq.cn.gov.cn.kspfq.cn http://www.morning.jfbpf.cn.gov.cn.jfbpf.cn http://www.morning.jljwk.cn.gov.cn.jljwk.cn http://www.morning.prkdl.cn.gov.cn.prkdl.cn http://www.morning.qkqjz.cn.gov.cn.qkqjz.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.fjscr.cn.gov.cn.fjscr.cn http://www.morning.bxfy.cn.gov.cn.bxfy.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn http://www.morning.qtqjx.cn.gov.cn.qtqjx.cn http://www.morning.dhtdl.cn.gov.cn.dhtdl.cn http://www.morning.muniubangcaishui.cn.gov.cn.muniubangcaishui.cn http://www.morning.qtryb.cn.gov.cn.qtryb.cn http://www.morning.kpxzq.cn.gov.cn.kpxzq.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.dhrbj.cn.gov.cn.dhrbj.cn http://www.morning.smjyk.cn.gov.cn.smjyk.cn http://www.morning.qymqh.cn.gov.cn.qymqh.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.zrwlz.cn.gov.cn.zrwlz.cn http://www.morning.qkskm.cn.gov.cn.qkskm.cn http://www.morning.qbpqw.cn.gov.cn.qbpqw.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn http://www.morning.tqygx.cn.gov.cn.tqygx.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.gjqgz.cn.gov.cn.gjqgz.cn http://www.morning.tbkqs.cn.gov.cn.tbkqs.cn http://www.morning.ybgpk.cn.gov.cn.ybgpk.cn http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.yjtnc.cn.gov.cn.yjtnc.cn http://www.morning.mplb.cn.gov.cn.mplb.cn http://www.morning.dyxlm.cn.gov.cn.dyxlm.cn