当前位置: 首页 > news >正文

[智能客服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.xdnf.cn/news/1037161.html

相关文章:

  • PX4无人机|MID360使用FAST_LIO,实现自主定位及定点——PX4无人机配置流程(五)
  • Vue Methods 实现原理详解
  • 【数据集成与ETL 04】dbt实战指南:现代化数据转换与SQL代码管理最佳实践
  • 一个前端正则校验引发的问题
  • 马上行计划管理后端架构
  • 深度分析Javascript中的Promise
  • 动态多目标进化算法:基于迁移学习的动态多目标遗传算法Tr-NSGA-II求解CEC2015,提供完整MATLAB代码
  • python基础与数据类型
  • C# 枚 举(枚举)
  • Python Day51
  • pyspark非安装使用graphframes
  • PHP+mysql雪里开轻量级报修系统 V1.0Beta
  • Laravel 从版本 5 到 12 每个版本都引入了一些新的特性、改进和弃用的功能
  • rt-thread的定时器驱动(裸机版本)记录.
  • Flutter JSON解析全攻略:使用json_serializable实现高效序列化
  • java设计模式[1]之设计模式概览
  • 免费电子印章生成工具,可在线设计印章
  • TLSF 内存分配器
  • 通达信跟老庄追涨停指标公式
  • 【大模型分布式训练】多卡解决单卡训练内存不足的问题
  • Python学习笔记面向对象编程
  • Python 中的 `lru_cache` 详解
  • 固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级
  • pytest的装饰器`pytest.mark.parametrize` 和 `@pytest.mark.smoke`区别
  • 中国电信天翼物联学习总结笔记:线上生成模型
  • 未来行业发展趋向
  • JavaScript 事件循环
  • 19 - SAFM模块
  • 27 - ASPP模块
  • 【redis——缓存雪崩(Cache Avalanche)】