您可以使用百煉快速構建一個Multi-Agent架構的智能導購助手,通過多輪交互了解用戶的具體需求。在收集完詳細信息后,利用百煉的知識檢索增強功能或您已有數據庫進行商品搜索,為顧客推薦最合適的產品。
方案概覽
當您去電器商城購買冰箱,您首先向前臺發起詢問哪里可以買到冰箱,前臺將您帶到了冰箱商店的位置;在冰箱商店,導購員向您詢問想要什么參數的冰箱,并根據這些參數將合適的冰箱推薦給您。 類似的,您可以通過百煉的Assistant API 構建一個 Multi-Agent 架構的大模型應用實現智能導購,其中:
| 效果展示圖 |
快速體驗
您可以通過我們提前準備好的函數計算應用模板,快速搭建并測試一個集成了智能導購的網站。詳細步驟如下:
函數計算提供的免費試用額度可以完全覆蓋本案例所需資源消耗。額度消耗完后按量計費,對于本教程所涉及的 web 服務,只在有訪問的情況下會產生費用。
1. 創建函數計算應用
您可以訪問我們準備好的函數計算應用模板,快速搭建一個集成智能導購的網站。智能導購可以通過多輪交互,收集顧客心儀的商品信息,默認商品包含手機、電視與冰箱。參考下圖選擇直接部署并填寫您的 API Key,您可以訪問我的API-KEY來獲取您的API Key。其它表單項保持默認,單擊頁面左下角的創建并部署默認環境,等待項目部署完成即可(預計耗時 1 分鐘)。
百煉應用ID(可選): 如果您計劃使用百煉應用進行商品智能檢索,請在創建應用時提供百煉應用ID,獲取方式請參考創建百煉商品檢索應用并集成到智能導購中(可選)。 如果您計劃使用商品數據庫檢索,此項可留空。 如果您決定后期集成百煉應用,可在創建函數計算應用后,通過環境變量配置方式添加您的百煉應用ID。
2. 訪問網站
在函數計算應用部署完成后,您可以在跳轉后的頁面的環境信息中找到示例網站的訪問域名,單擊即可查看,確認示例網站已經部署成功。
3. 驗證智能導購效果
智能導購會主動詢問并收集需要的商品參數信息;收集完成后打印出參數信息。
在導購收集到顧客的商品參數偏好后,您可以通過查詢商品數據庫來返回商品。如果您想通過百煉應用來進行智能商品檢索,請參考創建百煉商品檢索應用并集成到智能導購中(可選)。
關鍵代碼
上述示例程序中用于意圖識別的模塊是規劃助理(Router Agent)。經過規劃助理的意圖分類后,用戶的問題會被傳遞給對應的手機導購 Agent、電視導購 Agent 或冰箱導購 Agent。
規劃助理(Router Agent)
ROUTER_AGENT_INSTRUCTION = """你是一個問題分類器
請根結合用戶的提問和上下文判斷用戶是希望了解的商品具體類型。
注意,你的輸出結果只能是下面列表中的某一個,不能包含任何其他信息:
- 手機(用戶在當前輸入中提到要買手機,或正在進行手機參數的收集)
- 電視機(用戶在當前輸入中提到要買電視機,或正在進行電視參數的收集)
- 冰箱(用戶在當前輸入中提到要買冰箱,或正在進行冰箱參數的收集)
- 其他(比如用戶要買非上述三個產品、用戶要買不止一個產品等情況)
輸出示例:
手機
"""
router_agent = Assistants.create(
model="qwen-plus",
name='引導員,路由器',
description='你是一個商城的引導員,負責將用戶問題路由到不同的導購員。',
instructions=ROUTER_AGENT_INSTRUCTION
)
手機導購助理
MOBILEPHONE_GUIDE_AGENT_INSTRUCTION = """你是負責給顧客推薦手機的智能導購員。
你需要按照下文中【手機的參數列表】中的順序來主動詢問用戶需要什么參數的手機,一次只能問一個參數,不要對一個參數進行重復提問。
如果用戶告訴了你這個參數值,你要繼續詢問剩余的參數。
如果用戶詢問這個參數的概念,你要用你的專業知識為他解答,并繼續向他詢問需要哪個參數。
如果用戶有提到不需要繼續購買商品,請輸出:感謝光臨,期待下次為您服務。
【手機的參數列表】
1.使用場景:【游戲、拍照、看電影】
2.屏幕尺寸:【6.4英寸、6.6英寸、6.8英寸、7.9英寸折疊屏】
3.RAM空間+存儲空間:【8GB+128GB、8GB+256GB、12GB+128GB、12GB+256GB】
如果【參數列表】中的參數都已收集完畢,你要問他:“請問您是否確定購買?”,并同時將顧客選擇的參數信息輸出,如:用于拍照|8GB+128GB|6.6英寸。問他是否確定需要這個參數的手機。如果顧客決定不購買,要問他需要調整哪些參數。
如果顧客確定這個參數符合要求,你要按照以下格式輸出:
【使用場景:拍照,屏幕尺寸:6.8英寸,存儲空間:128GB,RAM空間:8GB】。請你只輸出這個格式的內容,不要輸出其它信息。"""
mobilephone_guide_agent = Assistants.create(
model="qwen-max",
name='手機導購',
description='你是一個手機導購,你需要詢問顧客想要什么參數的手機。',
instructions=MOBILEPHONE_GUIDE_AGENT_INSTRUCTION
)
電視導購助理
TV_GUIDE_AGENT_INSTRUCTION = """你是負責給顧客推薦電視的智能導購員。
你需要按照下文中【電視的參數列表】中的順序來主動詢問用戶需要什么參數的電視,一次只能問一個參數,不要對一個參數進行重復提問。
如果用戶告訴了你這個參數值,你要繼續詢問剩余的參數。
如果用戶詢問這個參數的概念,你要用你的專業知識為他解答,并繼續向他詢問需要哪個參數。
如果用戶有提到不需要繼續購買商品,請輸出:感謝光臨,期待下次為您服務。
【電視的參數列表】
1.屏幕尺寸:【50英寸、70英寸、80英寸】
2.刷新率:【60Hz、120Hz、240Hz】
3.分辨率:【1080P、2K、4K】
如果【電視的參數列表】中的參數都已收集完畢,你要問他:“請問您是否確定購買?”,并同時將顧客選擇的參數信息輸出,如:50英寸|120Hz|1080P。問他是否確定需要這個參數的電視。如果顧客決定不購買,要問他需要調整哪些參數。
如果顧客確定這個參數符合要求,你要按照以下格式輸出:
【屏幕尺寸:50英寸,刷新率:120Hz,分辨率:1080P】。請你只輸出這個格式的內容,不要輸出其它信息。"""
tv_guide_agent = Assistants.create(
model="qwen-max",
name='電視導購',
description='你是一個電視導購,你需要詢問顧客想要什么參數的電視。',
instructions=TV_GUIDE_AGENT_INSTRUCTION
)
冰箱導購助理
FRIDGE_GUIDE_AGENT_INSTRUCTION = """你是負責給顧客推薦冰箱的智能導購員。
你需要按照下文中【冰箱的參數列表】中的順序來主動詢問用戶需要什么參數的冰箱,一次只能問一個參數,不要對一個參數進行重復提問。
如果用戶告訴了你這個參數值,你要繼續詢問剩余的參數。
如果用戶詢問這個參數的概念,你要用你的專業知識為他解答,并繼續向他詢問需要哪個參數。
如果用戶有提到不需要繼續購買商品,請輸出:感謝光臨,期待下次為您服務。
【冰箱的參數列表】
1.容量:【300L、400L、500L】
2.冷卻方式:【風冷、直冷】
3.高度:【1.5米、1.8米、2米】
如果【冰箱的參數列表】中的參數都已收集完畢,你要問他:“請問您是否確定購買?”,并同時將顧客選擇的參數信息輸出,如:300L|風冷|1.8米。問他是否確定需要這個參數的冰箱。如果顧客決定不購買,要問他需要調整哪些參數。
如果顧客確定這個參數符合要求,你要按照以下格式輸出:
【容量:300L,冷卻方式:風冷,高度:1.8米】。請你只輸出這個格式的內容,不要輸出其它信息。"""
fridge_guide_agent = Assistants.create(
model="qwen-max",
name='冰箱導購',
description='你是一個冰箱導購,你需要詢問顧客想要什么參數的冰箱。',
instructions=FRIDGE_GUIDE_AGENT_INSTRUCTION
)
選擇不同的 Agent 進行回復
agent_map = {
"意圖分類": router_agent.id,
"手機": mobilephone_guide_agent.id,
"冰箱": fridge_guide_agent.id,
"電視機": tv_guide_agent.id
}
def chat(input_prompt, thread_id):
# 首先根據用戶問題及 thread 中存儲的歷史對話識別用戶意圖
router_agent_response = get_agent_response(agent_name="意圖分類", input_prompt=input_prompt, thread_id=thread_id)
classification_result = parse_streaming_response(router_agent_response)
response_json = {
"content": "",
}
# 如果分類識別為其他時,引導用戶調整提問方式
if classification_result == "其他":
return_json["content"] = "不好意思,我沒有理解您的問題,能換個表述方式么?"
return_json['current_agent'] = classification_result
return_json['thread_id'] = thread_id
yield f"{json.dumps(return_json)}\n\n"
# 如果分類是手機、電視機或冰箱時,讓對應的 Agent 進行回復
else:
agent_response = get_agent_response(agent_name=classification_result, input_prompt=input_prompt, thread_id=thread_id)
for chunk in agent_response:
response_json["content"] = chunk
response_json['current_agent'] = classification_result
response_json['thread_id'] = thread_id
yield f"{json.dumps(response_json)}\n\n"
創建百煉商品檢索應用并集成到智能導購中(可選)
在收集完客戶的購買需求后,您可以借助這些需求描述進行商品檢索和推薦。
在您的實際生產環境中,也可以替換為通過您的已有數據庫檢索。
步驟一:創建百煉商品檢索應用
創建知識庫
百煉支持您上傳表格文件到知識庫中。本案例的導購場景包含三種商品信息手機信息.xlsx、電視信息.xlsx與冰箱信息.xlsx。此處以手機商品為例,向您介紹在百煉創建基于表格數據的知識庫過程。
新增數據表
單擊新增數據表,數據表名稱設為:百煉手機;設置列名為:系列、屏幕尺寸、像素值、存儲空間、RAM大小、電池續航、價格。
電視數據集對應列名為:品牌、屏幕尺寸、刷新率、分辨率、價格(元);冰箱數據集對應列名為:系列、容量、冷卻方式、高度、能耗、價格(元)。
導入數據
在數據表管理界面找到百煉手機數據表,單擊導入數據。將手機信息.xlsx作為知識庫文件。您可以在導入數據界面進行上傳。
創建知識庫
單擊創建知識庫,將知識庫名稱改為百煉手機知識庫,數據類型選擇結構化數據,其它參數保持默認即可,單擊下一步。選中您創建的數據表,單擊導入完成。
創建電視與冰箱數據庫
重復以上步驟,創建百煉電視知識庫與百煉冰箱知識庫。
創建百煉應用
新增應用
訪問我的應用,單擊新增應用。在應用管理界面,修改應用名稱為:商品信息存儲bot;選擇模型為通義千問-Plus,模型其它參數保持默認即可;打開知識檢索增強開關,選擇知識庫為百煉手機知識庫、百煉電視知識庫與百煉冰箱知識庫,檢索片段數設為10。在Prompt框中進行修改,修改后的Prompt為:
# 知識庫 請記住以下材料,他們可能對回答問題有幫助。 ${documents} 請你選出最相似的三個產品。
獲取百煉應用ID
單擊右上角的發布,即可通過API調用商品信息存儲bot。在應用列表中可以查看商品信息存儲bot的百煉應用 ID。
步驟二:將商品檢索應用集成到智能導購中
修改函數計算應用的代碼與環境變量
回到函數計算應用詳情頁,在環境詳情的最底部找到函數資源,點擊函數名稱,進入函數詳情頁。
在代碼視圖中找到
agents.py
文件并進行修改。將以下內容取消注釋:如果您在創建函數計算應用時沒有填入百煉應用ID,可以在函數詳情頁單擊編輯環境變量,在BAILIAN_APP_ID處填入您的百煉應用ID,單擊部署。
單擊部署代碼,等待部署完成即可。
測試檢索效果
您可以在刷新網站后,對智能導購進行測試,智能導購會將檢索到的商品信息輸出。
總結
通過以上步驟,您搭建了一個集成了智能導購的網站,可以全天候向顧客提供商品推薦服務。本案例中的架構也適用于智能問診、求職推薦等場景。
應用于生產環境
為了將智能導購適配到您的產品并應用于生產環境中,您可以:
修改知識庫。將您的商品信息作為知識庫,同時您也可以在商品參數中添加商品詳情頁或下單頁的鏈接,方便顧客進行瀏覽與下單。您也可以通過已有的數據庫或其它服務中進行商品檢索。
修改源碼中的prompt來適配到您的產品中。修改源碼的步驟為:
回到應用詳情頁,在環境詳情的最底部找到函數資源,點擊函數名稱,進入函數詳情頁。
進入函數詳情頁后,在代碼視圖中找到
prompt.py
、agents.py
文件并進行修改。prompt.py
定義了agent的功能以及詢問參數的順序等信息;agents.py
創建了agent,以及生成回復的函數。單擊部署代碼,等待部署完成即可。
參考10分鐘給網站添加AI助手中的應用于生產環境部分,將智能導購集成到您的網站中。
持續改進
建議在正式上線智能導購前,組織業務人員一起參與應用評測,確保智能導購的回復效果符合預期。如果不符合預期,可以通過優化提示詞、完善補充私有知識等方法來改進回答效果。
大模型課程
系統體驗的改進優化永遠沒有終點,您可以考慮學習并通過阿里云大模型 ACA 認證,該認證配套的免費課程能幫助您進一步了解大模型的能力和應用場景,以及如何優化通過大模型的應用效果。