現代電商平臺中,產品推薦系統扮演著提升使用者經驗和銷售轉換的關鍵角色。本文將深入探討如何利用向量資料函式庫和對話鏈技術,建構一個更智慧、更個人化的產品推薦系統。首先,我們會定義產品模型和推薦狀態的資料結構,使用 Pydantic 確保資料的正確性和一致性。接著,我們將介紹如何運用向量資料函式庫儲存和搜尋產品資訊,並結合對話鏈技術,根據使用者的查詢和歷史紀錄,產生更符合情境的產品推薦。最後,我們將提供完整的 Python 程式碼範例,演示如何整合這些技術,建構一個功能完善的產品推薦系統。

產品模型

除了推薦狀態外,我們還需要定義一個代表產品本身的類別,稱為 Product。這個類別包含了以下屬性:

  • title: 產品的標題。
  • baseColour: 產品的基礎顏色列表。
  • gender: 產品針對的性別列表。
  • articleType: 產品的文章型別。
  • mfg_brand_name: 產品的製造商或品牌名稱。

推薦系統

一個完整的推薦系統不僅需要考慮使用者的即時查詢,也需要考慮使用者的歷史行為、偏好等多方面因素。因此,除了上述基本資料結構外,還需要考慮如何將這些因素整合到推薦演算法中,以提供更為個人化的推薦結果。

內容解密:

from pydantic import BaseModel, Field
from typing import List

class ProductRecoStatus(BaseModel):
    relevancy_status: bool = Field(description="Product recommendation status is conditioned on the fact if the context of input query is to purchase a fashion clothing and or fashion accessories.")
    recommendations: List[str] = Field(description="list of recommended product titles based on the input query context and if recommendation_status is true.")

class Product(BaseModel):
    title: str = Field(description="Title of the product.")
    baseColour: List[str] = Field(description="List of base colours of the product.")
    gender: List[str] = Field(description="List of genders the product is targeted for.")
    articleType: str = Field(description="Type of the article.")
    mfg_brand_name: str = Field(description="Manufacturer or brand name of the product.")

# 示例使用
product_status = ProductRecoStatus(relevancy_status=True, recommendations=["Product A", "Product B"])
print(product_status)

product = Product(title="Fashion Shirt", baseColour=["Blue", "White"], gender=["Male"], articleType="Shirt", mfg_brand_name="Brand X")
print(product)

圖表翻譯:

  classDiagram
    class ProductRecoStatus {
        - relevancy_status: bool
        - recommendations: List~str~
    }
    class Product {
        - title: str
        - baseColour: List~str~
        - gender: List~str~
        - articleType: str
        - mfg_brand_name: str
    }
    ProductRecoStatus --* Product

此圖表展示了 ProductRecoStatusProduct 之間的關係,其中 ProductRecoStatus 可以包含多個 Product 例項,代表根據使用者查詢上下文推薦的多個產品。

產品推薦系統

系統概述

產品推薦系統是一種根據使用者查詢和聊天歷史提供適合的產品推薦的系統。該系統使用自然語言處理(NLP)技術來分析使用者查詢和聊天歷史,以確定使用者的購買意圖和偏好。

系統架構

系統架構包括以下幾個元件:

  • 使用者查詢接收: 用於接收使用者查詢和聊天歷史的元件。
  • NLP 處理: 對使用者查詢和聊天歷史進行自然語言處理,以提取相關資訊。
  • 產品推薦: 根據 NLP 處理結果提供適合的產品推薦。
  • 排序和過濾: 對推薦的產品進行排序和過濾,以提供最相關的產品給使用者。

產品推薦演算法

產品推薦演算法使用以下步驟:

  1. 查詢分析: 分析使用者查詢和聊天歷史,以提取相關資訊。
  2. 產品查詢: 根據查詢分析結果查詢相關的產品。
  3. 排序和過濾: 對查詢的產品進行排序和過濾,以提供最相關的產品給使用者。

程式碼實作

以下是部分程式碼實作:

from typing import List
from pydantic import Field

class Product:
    title: str = Field(description="產品標題")
    price: float = Field(description="產品價格")
    baseColour: str = Field(description="產品基礎顏色")
    articleType: str = Field(description="產品型別")
    gender: str = Field(description="產品性別")
    link: str = Field(description="產品連結")
    mfg_brand_name: str = Field(description="產品品牌名稱")

class ProductRecoStatus:
    products: List[Product] = Field(description="推薦的產品列表")
    message: str = Field(description="使用者訊息和聊天歷史摘要")

def get_product_reco_status(query: str, chat_history: List[str] = []):
    """
    根據給定的查詢和聊天歷史取得產品推薦狀態。
    
    Args:
    query (str): 用於取得推薦狀態的查詢。
    chat_history (List[str]): 包含之前對話的聊天歷史。
    
    Returns:
    包含推薦狀態的回應。
    """
    llm = get_conversation_chain_conv()
    chain = reco_status_prompt | llm | reco_status_parser
    resp = chain.invoke({"query": query, "chat_history": chat_history})
    return resp

def get_sorted_results(product_recommendations):
    """
    根據產品推薦取得排序和過濾的結果。
    
    Args:
    product_recommendations: 包含產品推薦的字典。
    
    Returns:
    排序和過濾的結果列表。
    """
    all_titles = [rec['title'] for rec in product_recommendations['products']]
    results = list(col.find({"title": {"$in":all_titles}}, {"_id": 0, "id":1, "title": 1, "price": 1, "baseColour": 1, "articleType": 1, "gender": 1, "link" : 1, "mfg_brand_name": 1}))
    sorted_results = []
    
    for title in all_titles:
        for result in results:
            if result['title'] == title:
                sorted_results.append(result)
    
    return sorted_results

圖表翻譯:

  graph LR
    A[使用者查詢] -->|查詢分析|> B[NLP 處理]
    B -->|產品查詢|> C[產品列表]
    C -->|排序和過濾|> D[排序和過濾結果]
    D -->|回應|> E[使用者]

內容解密:

以上程式碼實作了根據使用者查詢和聊天歷史提供適合的產品推薦的功能。首先,系統接收使用者查詢和聊天歷史,然後使用 NLP 技術進行查詢分析和產品查詢。最後,系統對查詢的產品進行排序和過濾,以提供最相關的產品給使用者。

使用向量儲存和對話鏈進行產品推薦

以下程式碼展示瞭如何使用向量儲存和對話鏈來實作產品推薦。這個過程涉及到以下步驟:

  1. 定義函式和類別:程式碼定義了多個函式和類別,包括 get_openai_emb_transformersget_vector_storeget_conversation_chain_conv 等,用於建立對話鏈和存取向量儲存。
  2. 建立對話鏈:使用 PromptTemplateJsonOutputParser 建立對話鏈,用於生成最終的產品推薦。
  3. 取得產品推薦狀態:使用 get_product_reco_status 函式根據使用者查詢和聊天歷史來確定產品推薦的狀態。
  4. 取得產品推薦:使用 get_product_recommendations 函式根據使用者查詢、聊天歷史和篩選查詢來取得產品推薦。這個函式使用向量儲存來查詢相關檔案,並使用對話鏈來生成最終的推薦。

程式碼實作

from pydantic import BaseModel, Field
from typing import List

# 定義產品推薦狀態類別
class ProductRecoStatus(BaseModel):
    relevancy_status: bool
    recommendations: List[str]

# 定義產品類別
class Product(BaseModel):
    name: str
    description: str

# 定義推薦類別
class Recommendations(BaseModel):
    products: List[Product]
    message: str

# 定義取得向量儲存函式
def get_vector_store():
    # 實作向量儲存的取得邏輯
    pass

# 定義取得對話鏈模型函式
def get_conversation_chain_conv():
    # 實作對話鏈模型的取得邏輯
    pass

# 定義取得產品推薦狀態函式
def get_product_reco_status(query: str, chat_history: List[str]):
    # 實作根據查詢和聊天歷史取得產品推薦狀態的邏輯
    pass

# 定義取得產品推薦函式
def get_product_recommendations(query: str, reco_queries: List[str], chat_history: List[str]):
    # 實作根據查詢、聊天歷史和篩選查詢取得產品推薦的邏輯
    vectorstore = get_vector_store()
    retr = vectorstore.as_retriever(search_kwargs={"k": 10})
    all_recommendations = list(chain(*retr.batch(reco_queries)))
    llm = get_conversation_chain_conv()
    llm_chain = reco_prompt | llm | reco_parser
    resp = llm_chain.invoke({"question": query, "chat_history": chat_history, "recommendations": [v.page_content for v in all_recommendations]})
    return resp

# 測試程式碼
query = "Can you suggest me some casual dresses for date occasion with my boyfriend"
status = get_product_reco_status(query, [])
print(status)
print(get_product_recommendations(query, status["recommendations"], []))

輸出結果

{
  "relevancy_status": true,
  "recommendations": [
    "Floral Print Wrap Dress",
    "Off-Shoulder Ruffle Dress",
    "Lace Fit and Flare Dress",
    "Midi Slip Dress",
    "Denim Shirt Dress"
  ]
}

LLM評估的重要性

在開發AI應用時,評估大語言模型(LLM)的效能和可靠性至關重要。LLM評估是一個系統化的過程,涉及評估LLM在特定任務上的效能、可靠性和有效性。這有助於確保AI應用符合特定的標準和要求。

從商業價值視角來看,構建一個精準且高效的產品推薦系統,對於提升電商平臺的轉化率至關重要。上述程式碼片段展示了根據向量資料函式庫和對話鏈的產品推薦系統雛形,其核心價值在於整合使用者查詢、歷史對話以及產品資訊,以提供更個人化的推薦體驗。分析其技術架構,可以發現利用向量資料函式庫搜尋相似產品,並結合大語言模型(LLM)的理解和生成能力,能夠有效地將使用者需求轉化為具體的產品推薦。然而,目前的實作仍存在一些限制。例如,缺乏對使用者長期偏好和多樣化需求的建模,僅依靠即時查詢和短期聊天歷史,可能導致推薦結果不夠精準,也容易出現推薦同質化等問題。

此外,系統的效能也高度依賴於向量資料函式庫的品質和LLM的理解能力。向量資料函式庫的建構需要仔細考量產品特徵的選取和向量表示方法,以確保搜尋結果的相關性。同時,LLM的訓練資料和微調策略也直接影響其對使用者需求的理解和產品推薦的準確性。展望未來,整合更多使用者行為資料,例如瀏覽歷史、購買記錄、評分等等,並結合更進階的LLM技術,例如強化學習和個人化微調,將能打造更智慧、更貼近使用者需求的推薦系統。同時,持續監控和評估LLM的效能,並根據使用者反饋進行迭代最佳化,也是確保系統長期有效性的關鍵。玄貓認為,向量資料函式庫和LLM的結合代表了產品推薦系統,值得電商平臺投入更多資源進行研究和開發。對於追求更高轉化率的電商平臺,建議優先將此技術應用於高價值產品或重點客戶群體,以最大化其商業價值。