這三天總共會介紹以下六種設計模式在 GenAI 的應用,今天進入到第二天:
設計模式 | 重點 | GenAI 應用 |
---|---|---|
單例模式 (Singleton) | 確保全局唯一實例 | LLM 模型初始化 |
工廠模式 (Factory Method) | 靈活創建對象 | 跨型態檔案讀取 |
觀察者模式 (Observer) | 實現事件驅動 | 資料庫更新觸發處理 |
模板模式 (Template Method) | 定義算法骨架 | 資料前處理流程框架 |
裝飾器模式 (Decorator) | 動態添加功能 | 靈活組合資料處理步驟 |
策略模式 (Strategy) | 動態切換算法 | 檢索策略調整 |
class Database:
def __init__(self):
self._observers = []
def attach(self, observer):
if observer not in self._observers:
self._observers.append(observer)
def detach(self, observer):
self._observers.remove(observer)
def notify(self, data):
for observer in self._observers:
observer.update(data)
def upload_data(self, data):
print(f"上傳新數據到資料庫: {data}")
self.notify(data)
class DataProcessor:
def update(self, data):
pass
class DataCleaningPipeline(DataProcessor):
def update(self, data):
print(f"數據清洗流程處理數據: {data}")
class FeatureExtractionPipeline(DataProcessor):
def update(self, data):
print(f"特徵提取流程處理數據: {data}")
class MachineLearningPipeline(DataProcessor):
def update(self, data):
print(f"機器學習流程處理數據: {data}")
def main():
database = Database()
cleaning_pipeline = DataCleaningPipeline()
feature_extraction = FeatureExtractionPipeline()
ml_pipeline = MachineLearningPipeline()
database.attach(cleaning_pipeline)
database.attach(feature_extraction)
database.attach(ml_pipeline)
database.upload_data("用戶行為數據")
print("\n---\n")
database.upload_data("銷售交易數據")
if __name__ == "__main__":
main()
Database
類作為被觀察者,管理觀察者列表並在數據更新時通知它們。DataProcessor
是觀察者的抽象基類,定義了更新接口。DataCleaningPipeline
、FeatureExtractionPipeline
和 MachineLearningPipeline
是具體的觀察者,實現了各自的數據處理邏輯。main
函數中,我們創建了數據庫和多個處理流程,並將處理流程附加到數據庫上。from abc import ABC, abstractmethod
class GenAIPipelineTemplate(ABC):
def process_data(self):
self.load_data()
self.preprocess()
self.feature_engineering()
self.train_model()
self.evaluate_model()
def load_data(self):
print("加載數據集")
@abstractmethod
def preprocess(self):
pass
@abstractmethod
def feature_engineering(self):
pass
def train_model(self):
print("訓練模型")
def evaluate_model(self):
print("評估模型性能")
class TextClassificationPipeline(GenAIPipelineTemplate):
def preprocess(self):
print("文本數據預處理:分詞、去停用詞")
def feature_engineering(self):
print("文本特徵工程:TF-IDF 轉換")
class ImageClassificationPipeline(GenAIPipelineTemplate):
def preprocess(self):
print("圖像數據預處理:縮放、標準化")
def feature_engineering(self):
print("圖像特徵工程:卷積特徵提取")
# 使用範例
def main():
print("文本分類流程:")
text_pipeline = TextClassificationPipeline()
text_pipeline.process_data()
print("\n---\n")
print("圖像分類流程:")
image_pipeline = ImageClassificationPipeline()
image_pipeline.process_data()
if __name__ == "__main__":
main()
GenAIPipelineTemplate
類定義了 GenAI 數據處理的通用流程,包括數據加載、預處理、特徵工程、模型訓練和評估等步驟。preprocess
和 feature_engineering
方法被定義為抽象方法,要求子類必須實現這些步驟。TextClassificationPipeline
和 ImageClassificationPipeline
是具體的子類,它們實現了特定於文本和圖像數據的預處理和特徵工程步驟。最後兩個案例會在明天繼續介紹:)
ref.
Refactoring.Guru | design-patterns