[智能客服project] AI提示词配置 | 主协调器 | 闲鱼协议工具

第五章:AI提示词配置

欢迎回来!

在第四章:意图路由器中,我们了解了机器人如何通过IntentRouter确定由哪个专家代理(如PriceAgentTechAgent)处理用户消息。

代理被选定后,如何知道该说什么?如何以友好卖家身份应对技术问题,或按照策略进行价格协商?

专家代理分类的越细,就便于生成更准确的提示词给LLM

这正是AI提示词配置的核心作用。

为什么AI代理需要"提示词配置"?

想象你聘请演员出演话剧中的特定角色。你不会只说"去表演!",而是提供剧本、角色性格说明、场景背景以及具体台词指导。

  • 我们的AI代理如同演员,大语言模型(LLM)是底层能力,但需要清晰指引——“剧本"和"角色设定”——才能在闲鱼对话场景中正确表现。

  • 这些指引即提示词。提示词配置就是定义并加载这些指令的过程,使每个代理在处理特定类型用户请求时,明确知晓行为准则和关键信息。

  • 这正是我们告诉AI的方式:“当处理这类消息(如价格问题)时,记住你是卖家,商品细节是这样,对话历史是那样,你的目标是礼貌协商。”

什么是AI提示词配置?

AI提示词配置指代一系列文本指令、规则和上下文信息的集合,由代理打包发送给大语言模型(LLM),用于引导回复生成。

  • XianyuAutoAgent项目中,这些提示词定义于纯文本文件。

  • 每个专家代理(如PriceAgentTechAgent)甚至路由器的分类回退代理,都有专属的提示词文件。

  • 用户可通过简单编辑这些文本文件,轻松定制AI在不同场景下的个性和行为。

核心概念:系统提示词

现代LLM交互通常采用特定消息结构,其中"system"消息用于提供高层指令、设定角色或注入关键上下文。

在本项目中,提示词文件内容即用于构建LLM调用的"system"消息。系统提示词可视作代理的核心指令和角色专属背景知识。

工作原理:提示词实战

回顾AI代理系统章节流程,观察提示词的作用位置:

在这里插入图片描述

XianyuReplyBot根据意图选择代理后,该代理已在启动时加载专属系统提示词。调用LLM前,代理会构建完整的消息结构,包含:

  1. 系统提示词(来自配置文件)
  2. 商品详情
  3. 对话历史
  4. 最新用户消息

这种结构化消息(尤其是系统提示词)告知LLM如何解读信息及预期回复类型。

提示词文件位置

提示词配置文件存储于项目根目录的prompts文件夹,包含:

  • classify_prompt.txt:用于ClassifyAgent(意图路由器的LLM回退分类),指令LLM输出预定义意图标识(tech/price/default
  • price_prompt.txt:指导PriceAgent价格协商策略,包含底价规则、议价风格等
  • tech_prompt.txt:指引TechAgent技术答疑,要求精确引用商品参数,支持外部知识检索
  • default_prompt.txt:定义DefaultAgent通用回复风格,设定机器人作为友好卖家的基础人设

定制AI行为

编辑这些文件即可轻松调整AI行为!以price_prompt.txt为例:

你是一个专业的二手商品卖家。你的目标是以合理的价格出售商品,同时保持友好的态度。
与客户交流时,请遵循以下原则:
1. 始终礼貌和友好。
2. 如果客户询问价格或议价,参考【商品信息】和【你与客户对话历史】。
3. 如果客户出价低于你的心理价位,可以适当拒绝或提出你的最低价。
4. 议价不是无限的,如果客户多次大幅度议价,可以婉拒或引导回到原价。
5. 回复请简短明了,不要透露任何个人联系方式(微信、QQ等)。
▲当前议价轮次:{bargain_count}

这是PriceAgent的"剧本",设定角色(“专业二手卖家”)、目标(“合理定价,保持友好”)及具体规则(“参考商品信息”、“拒绝低价”、“限制议价轮次”)。

  • 占位符{bargain_count}将在发送前被替换为实际议价次数(见AI代理系统代码)。

  • 修改此文件即可调整议价策略,例如更严格的价格底线或更灵活的沟通风格。

classify_prompt.txt结构略有不同,专用于引导LLM输出单字意图标识:

你是一个意图分类机器人。你需要根据客户的最新消息和对话历史,判断客户的意图。
你的任务是只回复以下标签中的一个,不要回复其他任何内容:
- tech (询问商品技术参数、规格、性能对比等)
- price (询问价格、议价、讨论包邮等)
- default (其他所有意图,例如打招呼、询问是否在、无关问题等)请根据【商品信息】和【你与客户对话历史】,判断用户最新消息的意图:

该提示词明确LLM的角色(“意图分类机器人”),并严格限制输出为预定义标签,确保IntentRouter能正确解析分类结果。

代码中的提示词加载机制

如AI代理系统所示,XianyuReplyBot类在启动时加载提示词文件:

# 摘自 XianyuAgent.py 的简化代码片段
class XianyuReplyBot:def __init__(self):# ... 初始化客户端 ...self._init_system_prompts() # 加载提示词self._init_agents() # 使用提示词初始化代理# ... 初始化路由器 ...def _init_system_prompts(self):"""从文件加载各代理提示词"""prompt_dir = "prompts"try:with open(os.path.join(prompt_dir, "classify_prompt.txt"), "r", encoding="utf-8") as f:self.classify_prompt = f.read()with open(os.path.join(prompt_dir, "price_prompt.txt"), "r", encoding="utf-8") as f:self.price_prompt = f.read()with open(os.path.join(prompt_dir, "tech_prompt.txt"), "r", encoding="utf-8") as f:self.tech_prompt = f.read()with open(os.path.join(prompt_dir, "default_prompt.txt"), "r", encoding="utf-8") as f:self.default_prompt = f.read()logger.info("提示词加载成功")except Exception as e:logger.error(f"提示词加载失败: {e}")raise # 加载失败时终止def _init_agents(self):"""初始化各领域代理"""self.agents = {'classify': ClassifyAgent(self.client, self.classify_prompt, self._safe_filter),'price': PriceAgent(self.client, self.price_prompt, self._safe_filter),'tech': TechAgent(self.client, self.tech_prompt, self._safe_filter),'default': DefaultAgent(self.client, self.default_prompt, self._safe_filter),}

BaseAgent子类在生成回复时,通过_build_messages方法构建LLM输入:

# 摘自 XianyuAgent.py 的简化代码片段
class BaseAgent:def __init__(self, client, system_prompt, safety_filter):self.client = clientself.system_prompt = system_prompt # 加载的提示词文本self.safety_filter = safety_filterdef _build_messages(self, user_msg: str, item_desc: str, context: str) -> List[Dict]:"""构建LLM消息链"""system_content = f"【商品信息】{item_desc}\n【对话历史】{context}\n{self.system_prompt}"return [{"role": "system", "content": system_content},{"role": "user", "content": user_msg}]

PriceAgent还会在系统消息中插入bargain_count,为LLM提供明确的议价阶段信息。

结论

AI提示词配置XianyuAutoAgent项目中定义各代理行为规则、角色设定及应答策略的核心方法。

  • 通过prompts目录下的文本文件,用户无需修改核心代码即可定制AI的交互方式。

  • 每个代理加载专属提示词并整合至LLM输入,有效引导生成符合场景需求的回复。

理解提示词配置机制后,您可自由调整AI卖家在闲鱼平台的交互策略。接下来我们将见证所有组件——对话记忆、通信层、AI代理系统、意图路由器和提示词配置——如何协同工作,详见下一章主协调器。


第六章:主协调器

在前几章中,我们已经构建了XianyuAutoAgent的核心组件:

  • 第一章:对话记忆 - 学习机器人如何跟踪聊天历史和细节–sql
  • 第二章:闲鱼通信层 - 探索机器人如何连接闲鱼平台并收发消息–websocket
  • 第三章:AI代理系统 - 了解机器人如何使用AI生成回复–LLM
  • 第四章:意图路由 - 解析用户意图的机制–正则匹配给专家代理-->提示词txt
  • 第五章:AI提示配置 - 通过文本文件定制AI行为

这些组件各自独立,但如何协同工作?谁负责启动引擎、管理消息流并确保系统平稳运行?

这正是主协调器的职责所在。

为什么需要"主协调器"?

想象一台由齿轮、杠杆、引擎和线路组成的复杂机器。每个部件都有特定功能,但需要中央控制系统来协调运作。

我们的XianyuAutoAgent也是如此。主协调器需要:

  1. 系统启动
  2. 建立连接闲鱼平台
  3. 持续监听消息
  4. 路由消息到正确处理流程(存储记忆、AI分析)
  5. 连接管理(处理断连、令牌过期)
  6. 协调回复发送

主协调器如同空中交通管制员或交响乐指挥,虽不直接操作但确保系统有序运行。

主协调器的构成

核心职责包含:

  • 系统启动
  • 通过WebSocket连接闲鱼实时消息流
  • 管理连接生命周期(重连、心跳、令牌刷新)
  • 接收原始消息
  • 传递消息给其他组件处理
  • 协调回复发送

在项目中,main.py文件中的XianyuLive类即为主协调器实现。

运行机制:主循环

通过时序图展示主协调器工作流程:

在这里插入图片描述

核心组件:XianyuLive类

系统启动与主循环

# main.py 简化代码片段
if __name__ == '__main__':# 加载配置load_dotenv()# 初始化组件bot = XianyuReplyBot()xianyuLive = XianyuLive(cookies_str)# 启动主循环asyncio.run(xianyuLive.main())

消息处理流程

async def handle_message(self, message_data, websocket):# 步骤1:消息确认# 步骤2:过滤非聊天消息# 步骤3:提取聊天信息# 步骤4:处理卖家控制命令# 步骤5:保存用户消息# 步骤6:检查人工模式# 步骤7:获取商品信息# 步骤8:获取对话上下文# 步骤9:AI生成回复# 步骤10:处理议价计数# 步骤11:保存机器人回复# 步骤12:发送回复

连接生命周期管理

  • 心跳机制:定期发送心跳包检测连接
  • 令牌刷新异步任务维护令牌有效性
  • 异常处理:自动重连机制保证服务连续性

组件协同

主协调器通过持有各组件实例实现协同:

  • XianyuApis处理平台通信
  • ChatContextManager管理记忆存储
  • XianyuReplyBot驱动AI生成

结论

主协调器作为系统核心,承担连接管理、消息路由、组件协调等关键职责,通过XianyuLive类实现完整的自动化流程控制。

下一章:闲鱼协议工具


第七章:闲鱼协议工具

在第六章:主协调器中,我们了解了XianyuLive类如何协调整个机器人运作——连接闲鱼平台、监听消息并协调数据流向记忆系统和AI系统。

  • 然而,主协调器负责管理何时执行操作,而具体如何与闲鱼平台进行技术交互则需要专门的协议工具。

  • 闲鱼平台与大多数在线平台类似,在API和WebSocket通信中使用特定的技术"语言"。这些通信不仅需要特殊格式的消息体,还涉及唯一标识符和安全校验码等复杂机制

为什么需要"协议工具"?

闲鱼通信层(特别是XianyuLiveXianyuApis类)直接与服务器交互时面临以下技术挑战:

通过WebSocket发送消息时需构造包含以下元素的复杂数据结构:

  • 消息唯一ID(uuid
  • 请求唯一ID(mid
  • 会话ID(cid
  • 接收方ID(toid
  • Base64等特殊编码的消息内容
  • 其他技术参数

HTTP API调用(如获取商品详情)需要:

  • appKey、时间戳t、版本v、类型type等参数
  • 安全签名sign(采用临时令牌token+时间戳+请求数据的特定算法生成)

接收的WebSocket消息可能采用Base64编码和MessagePack二进制格式,需要专用解码器处理

协议工具构成

这些工具函数主要位于utils/xianyu_utils.py文件,包含:

1. 唯一ID生成

# 来自utils/xianyu_utils.py
def generate_mid() -> str:"""生成符合闲鱼要求的mid"""return f"{随机数}{时间戳} 0"  # 示例:1231630000000 0def generate_uuid() -> str:"""生成设备特征uuid"""return f"-{时间戳}1"  # 示例:-16300000001

通过时间戳与随机数组合生成符合平台规范的标识符

2. 安全签名生成

def generate_sign(t: str, token: str, data: str) -> str:"""MD5哈希签名算法"""app_key = "34839810"  # 闲鱼H5接口固定密钥msg = f"{token}&{t}&{app_key}&{data}"return hashlib.md5(msg.encode()).hexdigest()

该签名算法用于API请求合法性验证

3. 消息解码系统

在这里插入图片描述

在实际项目之中,错误的日志信息打印是非常重要的,一定要重视对报错的处理

核心解码函数实现:

class MessagePackDecoder:"""自定义MessagePack解析器"""def decode(self) -> Any:try:# 解析二进制数据结构return self._decode_value()  except Exception:return base64回退处理def decrypt(data: str) -> str:"""多层解码处理器"""try:decoded_bytes = base64.b64decode(清理数据)# 优先尝试MessagePack解析return MessagePackDecoder(decoded_bytes).decode()except MessagePackError:# 回退文本解码return decoded_bytes.decode('utf-8')

支持从二进制到结构化数据的完整解析流程

4. Cookie解析器

def trans_cookies(cookies_str: str) -> Dict:"""Cookie字符串转字典"""return {k:v for cookie in cookies_str.split("; ") for k,v in [cookie.split('=',1)]}

将.env文件中的cookie字符串转换为requests可用的字典格式

系统架构关系

在这里插入图片描述

技术实现细节

MessagePack解码器

包含20+种数据类型处理逻辑,支持:

  • 定长/变长整数
  • 浮点数解析
  • 数组/映射结构
  • 扩展数据类型处理

错误处理机制

采用三级回退策略:

  1. 优先MessagePack解析
  2. 尝试UTF-8文本解码
  3. 最终十六进制转储+错误日志

模块结构

在这里插入图片描述

结论

协议工具模块作为闲鱼通信的"技术密码本",承担着:

  • 唯一标识生成
  • 安全认证签名
  • 复杂消息解码
  • 输入数据标准化

通过封装这些底层技术细节,使主协调器能够专注于业务流程控制实现通信层与业务逻辑的解耦。这是构建稳定可靠的闲鱼自动化系统的关键技术保障

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/87008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake 构建系统概述

关键要点 研究表明,CMake 是一种强大的跨平台构建系统,广泛用于 C 项目。证据倾向于认为,CMake 通过生成本地构建文件(如 Makefile、Visual Studio 项目)简化软件构建。它似乎可能支持多种平台,包括 Windo…

如何顺利将电话号码转移到新iPhone?

当您升级到新 iPhone 时,您需要做的第一件事就是转移您的电话号码。幸运的是,以目前的技术,很容易解决如何将电话号码转移到新iPhone上。此外,传输过程也得到了简化。您可以轻松地将旧手机更换为新 iPhone,而不会丢失任…

java面试总结-20250609

DDD领域设计模型怎么理解? mysql和mongoDB分别适用于哪些业务场景? 查询的场景,数量级的差异? mongodb为什么用B树?用的什么数据引擎,部署方式使用什么模式,分片分了多少片,路由方…

使用GpuGeek训练图像分类器:从入门到精通

引言 在当今人工智能蓬勃发展的时代,图像分类作为计算机视觉的基础任务之一,已经广泛应用于医疗诊断、自动驾驶、安防监控等诸多领域。然而,对于许多初学者和中小型企业来说,构建一个高效的图像分类系统仍然面临诸多挑战&#xf…

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …

2025年渗透测试面试题总结-字节跳动[实习]安全研发员(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 字节跳动[实习]安全研发员 1. 攻防演练中得意经历 2. 安全领域擅长方向 3. 代码审计语言偏向 4. CSRF修复…

Springboot短视频推荐系统b9wc1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,视频分类,视频信息 开题报告内容: 基于Spring Boot的短视频推荐系统开题报告 一、研究背景与意义 随着移动互联网的普及和短视频行业的爆发式增长,用户日均观看短视频时长已突破2小时,但海量内…

使用联邦学习进行CIFAR-10分类任务

在深度学习领域,图像分类任务是一个经典的应用,而CIFAR-10数据集则是图像分类研究中的重要基准数据集之一。该数据集包含10类不同的图像,每类有6,000个32x32像素的彩色图像,共计60,000个图像。在传统的集中式学习中,所有数据都被集中到一个服务器上进行训练。然而,随着数…

【Linux网络编程】基于udp套接字实现的网络通信

目录 一、实现目标: 二、实验步骤: 1、服务端代码解析: Init(): Run(): 2、客户端代码: 主函数逻辑: send_message发送数据: recv_message接收数据: 三、实验结…

2025年想冲网安方向,该考华为安全HCIE还是CISSP?

打算2025年往网络安全方向转,现在考证是不是来得及?考啥证? 说实话,网络安全这几年热得发烫,但热归热,入门门槛也不低,想进这个赛道,技术、项目经验、证书,缺一不可。 …

【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…

「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(一)

在本文中,您可以找到有关WEB项目的信息。将了解: Web项目结构和参数Web开发生产力工具JSP代码完成和验证 这些特性在MyEclipse中可用。 MyEclipse v2025.1离线版下载 一、Web项目结构 用最简单的术语来说,MyEclipse Web项目是一个Eclips…

Elasticsearch:使用 ES|QL 进行地理空间距离搜索

作者:来自 Elastic Craig Taverner 在 Elasticsearch 查询语言(ES|QL)中探索地理空间距离搜索,这是 Elasticsearch 地理空间搜索中最受欢迎和最有用的功能之一,也是 ES|QL 中的重要特性。 想获得 Elastic 认证吗&#…

列举开源的模型和推理框架

当然可以!下面是一个系统性的列表,按 开源大模型(LLM) 和 推理框架 两大类列出,并配上简要说明。 🧠 一、开源大语言模型(LLMs) 名称发布者语言能力模型大小特点LLaMA 2 / 3Meta英文…

深入讲解一下 Nomic AI 的 GPT4All 这个项目

我们来深入讲解一下 Nomic AI 的 GPT4All 这个项目。 这是一个非常优秀和流行的开源项目,我会从**“它是什么”、“为什么它很重要”、“项目架构和源码结构”以及“如何使用”**这几个方面为你全面剖析。 一、项目概述 (Project Overview) 简单来说,…

力扣HOT100之技巧:287. 寻找重复数

这道题真的是中等题吗?我请问呢??我怎么觉得是困难题呢? 这道题的思路太难想了,想不出来,直接去看的这位大佬的题解,写得很清楚。 这道题可以将其转化为环形链表问题,可是为什么只要…

QT log4qt 无法生成日志到中文的路径中的解决方案

一.使用log4qt时,应用程序安装在带有中文路径下,导致无法生成日志到安装目录中? 问题描述:如下的配置文件,log4j.appender.File.File 后面跟随的路径是当前路径,你可能觉得自己的日志能够生成在当前路径中,如果你试着用自己的程序双击启动一个文件时,你会发现日志生成在…

让 Deepseek 写电器电费计算器小程序

微信小程序版电费计算器 以下是一个去掉"电器名称"后的微信小程序电费计算器代码,包含所有必要文件: 1. app.json (全局配置) {"pages": ["pages/index/index"],"window": {"backgroundColor": &q…

第二部分-静态路由实验

目录 一、什么是路由? 1.1.定义 1.2.路由作用 1.3.路由类型 1.3.1.直连路由 1.3.2.静态路由 1.3.3.动态路由 1.3.4.路由表 1.5.路由器的匹配原则 1.6.路由配置 1.6.1.静态路由配置 1.6.2.动态路由配置 二、实验 2.1.静态路由 2.1.1.实验拓扑 2.1.2.实验过程 2.2.缺省…

Could not initialize Logback logging from classpath:logback-spring.xml

jdk21、springboot 3.2.12启动报错找不到logback.xml Logging system failed to initialize using configuration from classpath:logback-spring.xml java.lang.IllegalStateException: Could not initialize Logback logging from classpath:logback-spring.xmlat org.sprin…