安徽省工程建设工程信息网站,网站中的幻灯片ie6显示 ie7如何兼容,可以自己做效果图的网站,elementor做视频网站第五章#xff1a;AI提示词配置
欢迎回来#xff01;
在第四章#xff1a;意图路由器中#xff0c;我们了解了机器人如何通过IntentRouter确定由哪个专家代理#xff08;如PriceAgent或TechAgent#xff09;处理用户消息。
但代理被选定后#xff0c;如何知道该说什么…第五章AI提示词配置
欢迎回来
在第四章意图路由器中我们了解了机器人如何通过IntentRouter确定由哪个专家代理如PriceAgent或TechAgent处理用户消息。
但代理被选定后如何知道该说什么如何以友好卖家身份应对技术问题或按照策略进行价格协商
专家代理分类的越细就便于生成更准确的提示词给LLM
这正是AI提示词配置的核心作用。
为什么AI代理需要提示词配置
想象你聘请演员出演话剧中的特定角色。你不会只说去表演而是提供剧本、角色性格说明、场景背景以及具体台词指导。 我们的AI代理如同演员大语言模型LLM是底层能力但需要清晰指引——“剧本和角色设定”——才能在闲鱼对话场景中正确表现。 这些指引即提示词。提示词配置就是定义并加载这些指令的过程使每个代理在处理特定类型用户请求时明确知晓行为准则和关键信息。 这正是我们告诉AI的方式“当处理这类消息如价格问题时记住你是卖家商品细节是这样对话历史是那样你的目标是礼貌协商。”
什么是AI提示词配置
AI提示词配置指代一系列文本指令、规则和上下文信息的集合由代理打包发送给大语言模型LLM用于引导回复生成。 在XianyuAutoAgent项目中这些提示词定义于纯文本文件。 每个专家代理如PriceAgent、TechAgent甚至路由器的分类回退代理都有专属的提示词文件。 用户可通过简单编辑这些文本文件轻松定制AI在不同场景下的个性和行为。
核心概念系统提示词
现代LLM交互通常采用特定消息结构其中system消息用于提供高层指令、设定角色或注入关键上下文。
在本项目中提示词文件内容即用于构建LLM调用的system消息。系统提示词可视作代理的核心指令和角色专属背景知识。
工作原理提示词实战
回顾AI代理系统章节流程观察提示词的作用位置 当XianyuReplyBot根据意图选择代理后该代理已在启动时加载专属系统提示词。调用LLM前代理会构建完整的消息结构包含
系统提示词来自配置文件商品详情对话历史最新用户消息
这种结构化消息尤其是系统提示词告知LLM如何解读信息及预期回复类型。
提示词文件位置
提示词配置文件存储于项目根目录的prompts文件夹包含
classify_prompt.txt用于ClassifyAgent意图路由器的LLM回退分类指令LLM输出预定义意图标识tech/price/defaultprice_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 promptstry:with open(os.path.join(prompt_dir, classify_prompt.txt), r, encodingutf-8) as f:self.classify_prompt f.read()with open(os.path.join(prompt_dir, price_prompt.txt), r, encodingutf-8) as f:self.price_prompt f.read()with open(os.path.join(prompt_dir, tech_prompt.txt), r, encodingutf-8) as f:self.tech_prompt f.read()with open(os.path.join(prompt_dir, default_prompt.txt), r, encodingutf-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也是如此。主协调器需要
系统启动建立连接闲鱼平台持续监听消息路由消息到正确处理流程存储记忆、AI分析连接管理处理断连、令牌过期协调回复发送
主协调器如同空中交通管制员或交响乐指挥虽不直接操作但确保系统有序运行。
主协调器的构成
核心职责包含
系统启动通过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获取对话上下文# 步骤9AI生成回复# 步骤10处理议价计数# 步骤11保存机器人回复# 步骤12发送回复连接生命周期管理
心跳机制定期发送心跳包检测连接令牌刷新异步任务维护令牌有效性异常处理自动重连机制保证服务连续性
组件协同
主协调器通过持有各组件实例实现协同
XianyuApis处理平台通信ChatContextManager管理记忆存储XianyuReplyBot驱动AI生成
结论
主协调器作为系统核心承担连接管理、消息路由、组件协调等关键职责通过XianyuLive类实现完整的自动化流程控制。
下一章闲鱼协议工具 第七章闲鱼协议工具
在第六章主协调器中我们了解了XianyuLive类如何协调整个机器人运作——连接闲鱼平台、监听消息并协调数据流向记忆系统和AI系统。 然而主协调器负责管理何时执行操作而具体如何与闲鱼平台进行技术交互则需要专门的协议工具。 闲鱼平台与大多数在线平台类似在API和WebSocket通信中使用特定的技术语言。这些通信不仅需要特殊格式的消息体还涉及唯一标识符和安全校验码等复杂机制。
为什么需要协议工具
闲鱼通信层特别是XianyuLive和XianyuApis类直接与服务器交互时面临以下技术挑战
通过WebSocket发送消息时需构造包含以下元素的复杂数据结构
消息唯一IDuuid请求唯一IDmid会话IDcid接收方IDtoidBase64等特殊编码的消息内容其他技术参数
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:生成符合闲鱼要求的midreturn f{随机数}{时间戳} 0 # 示例1231630000000 0def generate_uuid() - str:生成设备特征uuidreturn 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种数据类型处理逻辑支持
定长/变长整数浮点数解析数组/映射结构扩展数据类型处理
错误处理机制
采用三级回退策略
优先MessagePack解析尝试UTF-8文本解码最终十六进制转储错误日志
模块结构 结论
协议工具模块作为闲鱼通信的技术密码本承担着
唯一标识生成安全认证签名复杂消息解码输入数据标准化
通过封装这些底层技术细节使主协调器能够专注于业务流程控制实现通信层与业务逻辑的解耦。这是构建稳定可靠的闲鱼自动化系统的关键技术保障