[智能客服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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87008.shtml
英文地址,請注明出處:http://en.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…