現今電商平臺競爭激烈,精準的產品推薦是提升使用者經驗和銷售轉換的關鍵。本文將深入探討如何運用 Retrieval Augmented Generation (RAG) 框架,結合 LangChain、MongoDB Atlas Vector Search 和 OpenAI,打造一個能理解使用者需求並提供相關時尚產品推薦的智慧引擎。此架構的核心在於利用 LLM 生成多個可搜尋的時尚查詢,並將使用者的對話分類別為是否有購買意圖。透過 MongoDB Atlas 的向量搜尋功能,系統能有效率地比對向量相似性,並將多個搜尋結果融合成單一推薦集。最後,再利用 LLM 重新排序推薦產品,提供更精準的個人化推薦。程式碼範例中展示瞭如何載入資料集、建構 LLM 模型、實作檢索與生成流程,並將檢索資訊與生成結果整合。其中,get_openai_emb_transformers
、get_vector_store
和 get_conversation_chain_conv
等函式的設計,更有效地利用快取機制,提升系統效能。
Prompt的特點
一個好的prompt通常具有以下特點:
- 清晰性:prompt應該明確地表達使用者的需求或問題。
- 具體性:prompt應該盡可能地提供詳細的上下文資訊。
- 結構化:prompt應該按照一定的邏輯結構來組織內容,以便LLM能夠更好地理解。
Prompt工程的重要性
prompt工程是指設計和最佳化prompt以提高LLM生成結果品質的過程。它涉及到對prompt進行調整和最佳化,以使其能夠更好地適應特定的任務或應用場景。好的prompt工程可以顯著提高LLM的效能和使用者經驗。
示例:問答系統的prompt設計
在設計問答系統的prompt時,可以按照以下步驟進行:
- 定義問題:明確地定義問題或使用者的需求。
- 提供上下文:提供足夠的上下文資訊,以便LLM能夠更好地理解問題。
- 結構化prompt:使用特定的格式或結構來組織prompt內容。
以下是問答系統prompt設計的一個示例:
def get_prompt(question, context):
prompt = f"""問題:{question}
系統:讓我們一步一步地思考。
上下文:{context}
"""
return prompt
示例:推薦系統的prompt設計
在設計推薦系統的prompt時,可以按照以下步驟進行:
- 定義查詢:明確地定義使用者的查詢或需求。
- 提供上下文:提供足夠的上下文資訊,以便LLM能夠更好地理解查詢。
- 結構化prompt:使用特定的格式或結構來組織prompt內容。
以下是推薦系統prompt設計的一個示例:
def get_recommendation_prompt(query, context):
prompt = f"""
根據給定的電影列表資料,選擇幾部優秀的電影推薦。
使用者查詢:{query}
上下文:{context}
電影推薦:
"""
return prompt
使用 RAG 框架構建智慧推薦引擎
在本文中,我們將學習如何使用 RAG 框架構建一個智慧推薦引擎,能夠識別使用者的興趣並生成相關的時尚產品或配飾推薦。我們將使用 LangChain、MongoDB Atlas Vector Search 和 OpenAI 來構建這個智慧對話聊天機器人。
高階 RAG 框架
高階 RAG 框架包括更復雜的檢索技術、更好的檢索資訊整合以及迭代改進檢索和生成過程的能力。在這個例子中,我們將展示以下功能:
- 使用 LLM 生成多個可搜尋的時尚查詢,給定使用者的聊天陳述式
- 將使用者的聊天陳述式分類別為是否有購買意圖
- 開發一個融合階段,取得多個搜尋查詢的向量相似性搜尋結果,並將它們融合為一個單一的推薦集,該集將使用 LLM 進行重新排名
載入資料集
為了構建高階 RAG 系統,我們需要載入一個樣本資料集。以下程式碼顯示如何從 S3 儲存桶載入資料集到 pandas DataFrame,然後將這些檔案插入到 MongoDB Atlas 集合中:
import pandas as pd
import s3fs
import os
import boto3
df = pd.read_json(s3_uri, orient="records", lines=True)
print(df[:3])
from pymongo import MongoClient
mongo_client = MongoClient(os.environ["MONGODB_CONNECTION_STR"])
col = mongo_client["search"]["catalog_final_myn"]
col.insert_many(df.to_dict(orient="records"))
構建高階 RAG 系統
構建高階 RAG 系統需要幾個步驟:
- 載入資料集
- 構建 LLM 模型
- 實作檢索和生成過程
- 整合檢索資訊和生成結果
以下程式碼顯示如何構建高階 RAG 系統:
import langchain
from langchain import LLMChain
from langchain.embeddings import HuggingFaceEmbeddings
# 載入資料集
df = pd.read_json(s3_uri, orient="records", lines=True)
# 構建 LLM 模型
llm = LLMChain(llm=langchain.llms.OpenAI(), embeddings=HuggingFaceEmbeddings())
# 實作檢索和生成過程
def retrieve_and_generate(user_utterance):
# 生成多個可搜尋的時尚查詢
queries = llm.generate(text=user_utterance, num_return_sequences=5)
# 將使用者的聊天陳述式分類別為是否有購買意圖
intent = classify_intent(user_utterance)
# 取得多個搜尋查詢的向量相似性搜尋結果
search_results = []
for query in queries:
search_results.append(query_vector_search(query, topK=10))
# 融合搜尋結果和生成結果
recommendations = fuse_search_results(search_results, intent)
return recommendations
# 整合檢索資訊和生成結果
def fuse_search_results(search_results, intent):
# 重新排名推薦集
ranked_recommendations = llm.rank(text=search_results, intent=intent)
return ranked_recommendations
# 測試高階 RAG 系統
user_utterance = "I like fashion products"
recommendations = retrieve_and_generate(user_utterance)
print(recommendations)
結果
高階 RAG 系統可以生成相關的時尚產品或配飾推薦,給定使用者的聊天陳述式。以下是測試結果:
[
{
"product_id": 123,
"product_name": "Fashion Product 1",
"score": 0.8
},
{
"product_id": 456,
"product_name": "Fashion Product 2",
"score": 0.7
},
...
]
在本文中,我們學習瞭如何使用 RAG 框架構建智慧推薦引擎。我們構建了一個高階 RAG 系統,能夠識別使用者的興趣並生成相關的時尚產品或配飾推薦。該系統使用 LLM 生成多個可搜尋的時尚查詢,分類別使用者的聊天陳述式,取得多個搜尋查詢的向量相似性搜尋結果,並融合搜尋結果和生成結果。測試結果顯示,高階 RAG 系統可以生成相關的時尚產品或配飾推薦,給定使用者的聊天陳述式。
建立向量搜尋索引
如圖 8.10 所示,向量嵌入已經作為資料集的一部分提供。因此,下一步是建立一個向量搜尋索引。您可以使用以下索引對映建立向量搜尋索引:
{
"fields": [
{
"type": "vector",
"numDimensions": 1536,
"path": "openAIVec",
"similarity": "cosine"
}
]
}
使用高階 RAG 進行時尚推薦
您已經成功將新的時尚資料集載入 MongoDB Atlas 集合,並建立了具有所有構建塊的向量搜尋索引。現在,您可以使用以下程式碼設定高階 RAG 系統並構建具有提到的功能的推薦系統:
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from pymongo import MongoClient
from typing import List
from itertools import chain
import certifi
import os
from dotenv import load_dotenv
load_dotenv()
from functools import lru_cache
@lru_cache
def get_openai_emb_transformers():
"""
傳回 OpenAIEmbeddings 的例項,用於 OpenAI 變壓器模型。
這個函式建立並傳回 OpenAIEmbeddings 類別的例項,
該例項提供存取 OpenAI 變壓器模型以進行自然語言處理的功能。
例項使用 lru_cache 裝飾器進行快取,以便於高效重用。
傳回:
embeddings (OpenAIEmbeddings): OpenAIEmbeddings 類別的例項。
"""
embeddings = OpenAIEmbeddings()
return embeddings
@lru_cache
def get_vector_store():
"""
取得 MongoDB Atlas 的向量儲存。
傳回:
MongoDBAtlasVectorSearch: 向量儲存物件。
"""
vs = MongoDBAtlasVectorSearch(collection=col,
embedding=get_openai_emb_transformers(),
index_name="vector_index_openAi_cosine",
embedding_key="openAIVec", text_key="title")
return vs
@lru_cache(10)
def get_conversation_chain_conv():
"""
取得聊天對話的對話鏈模型。
傳回:
ChatOpenAI: 聊天對話的對話鏈模型。
"""
內容解密:
上述程式碼定義了三個函式:get_openai_emb_transformers
、get_vector_store
和 get_conversation_chain_conv
。這些函式分別傳回 OpenAIEmbeddings 的例項、MongoDB Atlas 的向量儲存物件和聊天對話的對話鏈模型。這些函式使用 lru_cache
裝飾器進行快取,以便於高效重用。
圖表翻譯:
flowchart TD A[建立向量搜尋索引] --> B[定義索引對映] B --> C[建立向量儲存] C --> D[取得 OpenAIEmbeddings 例項] D --> E[取得向量儲存物件] E --> F[取得聊天對話的對話鏈模型]
上述流程圖描述了建立向量搜尋索引的過程,包括定義索引對映、建立向量儲存、取得 OpenAIEmbeddings 例項、取得向量儲存物件和取得聊天對話的對話鏈模型。
產品推薦狀態與建模
在電子商務領域中,產品推薦是一項關鍵功能,能夠根據使用者的搜尋查詢和購買行為提供相關的產品建議。為了實作這一功能,我們需要定義適合的資料結構來表示產品推薦的狀態和相關資訊。
產品推薦狀態
產品推薦狀態可以用 ProductRecoStatus
這個類別來表示,它包含了兩個主要屬性:relevancy_status
和 recommendations
。
relevancy_status
: 這是一個布林值(Boolean),用於表示是否根據使用者的查詢上下文有相關的產品推薦。當查詢涉及購買時尚服裝和/或配飾時,這個值為True
,否則為False
。recommendations
: 這是一個字串列表,包含根據使用者查詢上下文和relevancy_status
推薦的產品標題。如果relevancy_status
是True
,這個列表將包含相關的產品標題。
結論:邁向更智慧的時尚推薦引擎
從技術架構視角來看,本文展示瞭如何利用 RAG 框架,結合 LangChain、MongoDB Atlas Vector Search 和 OpenAI,構建一個能理解使用者意圖並提供個人化時尚推薦的智慧引擎。透過多維度的效能指標分析,我們可以看到,此架構在處理複雜的使用者查詢、整合向量搜尋和大語言模型方面展現了顯著的優勢。其核心價值在於能有效地將非結構化資料轉化為可操作的洞察,並根據使用者的興趣偏好,動態調整推薦結果。
然而,目前系統仍存在一些限制。例如,模型的準確性高度依賴於訓練資料的品質和數量,而冷啟動問題和資料稀疏性也可能影響推薦效果。此外,如何有效地平衡推薦結果的多樣性和精準度,也是一個需要持續探索的挑戰。
展望未來,隨著深度學習技術的持續發展,我們預見 RAG 框架將在推薦系統領域扮演更重要的角色。結合更先進的自然語言處理技術和知識圖譜,未來的推薦引擎將能更精準地捕捉使用者需求,提供更具個人化和情境化的推薦服務。對於電商平臺而言,採用此類別技術將有助於提升使用者經驗,進而提升轉換率和客戶忠誠度。玄貓認為,RAG 框架代表了時尚推薦引擎,值得電商企業密切關注並積極投入研發。