🎯 Mục tiêu bài học
Đi sâu hơn vào LangChain framework - hiểu các components, patterns và best practices cho text processing.
Sau bài này, bạn sẽ:
✅ Hiểu LangChain architecture và chọn model phù hợp ✅ Sử dụng advanced prompt patterns (Few-Shot, Dynamic) ✅ Implement memory systems cho conversational text processing ✅ Sử dụng callbacks, fallbacks và caching để tối ưu pipeline
🔍 LangChain Architecture
Checkpoint
Bạn đã hiểu kiến trúc tổng thể của LangChain và các components chưa?
📐 Model Selection Strategy
1from langchain_openai import ChatOpenAI2from langchain_anthropic import ChatAnthropic34# Fast and cheap - high volume tasks5fast_llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)67# Powerful - complex reasoning8power_llm = ChatOpenAI(model="gpt-4o", temperature=0.3)910# Long context - large documents11long_llm = ChatAnthropic(12 model="claude-3-5-sonnet-20241022",13 max_tokens=409614)- gpt-4o-mini: Fast, cheap - dùng cho batch processing, simple tasks
- gpt-4o: Balanced - dùng cho content generation, analysis
- Claude 3.5 Sonnet: Long context - dùng cho document processing
Checkpoint
Bạn đã biết cách chọn model phù hợp cho từng loại task chưa?
📐 Advanced Prompt Patterns
Few-Shot Prompting
1from langchain_core.prompts import FewShotChatMessagePromptTemplate23examples = [4 {"input": "Toi rat thich san pham nay!", "output": "Positive"},5 {"input": "San pham kem chat luong", "output": "Negative"},6 {"input": "San pham binh thuong", "output": "Neutral"},7]89example_prompt = ChatPromptTemplate.from_messages([10 ("human", "{input}"),11 ("ai", "{output}")12])1314few_shot = FewShotChatMessagePromptTemplate(15 example_prompt=example_prompt,16 examples=examples17)1819final_prompt = ChatPromptTemplate.from_messages([20 ("system", "Ban la sentiment analyzer. Phan loai sentiment cua text."),21 few_shot,22 ("human", "{text}")23])2425chain = final_prompt | fast_llm26result = chain.invoke({"text": "Dich vu tuyet voi, se quay lai!"})Dynamic Prompts
1from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder23dynamic_prompt = ChatPromptTemplate.from_messages([4 ("system", "Ban la {role} chuyen ve {domain}."),5 MessagesPlaceholder("history", optional=True),6 ("human", "{input}")7])89# Use with different configs10result = dynamic_prompt.invoke({11 "role": "content writer",12 "domain": "technology",13 "input": "Viet intro cho blog ve AI",14 "history": []15})Checkpoint
Bạn đã hiểu cách sử dụng Few-Shot và Dynamic Prompts chưa?
📐 Memory Systems
Conversation Buffer
1from langchain_core.chat_history import InMemoryChatMessageHistory2from langchain_core.runnables.history import RunnableWithMessageHistory34store = {}56def get_session_history(session_id: str):7 if session_id not in store:8 store[session_id] = InMemoryChatMessageHistory()9 return store[session_id]1011prompt = ChatPromptTemplate.from_messages([12 ("system", "Ban la writing assistant. Nho context hoi thoai."),13 MessagesPlaceholder("history"),14 ("human", "{input}")15])1617chain = prompt | fast_llm1819with_memory = RunnableWithMessageHistory(20 chain,21 get_session_history,22 input_messages_key="input",23 history_messages_key="history"24)2526# Session 127config = {"configurable": {"session_id": "user-1"}}28r1 = with_memory.invoke({"input": "Toi muon viet blog ve Python"}, config=config)29r2 = with_memory.invoke({"input": "Goi y 5 tieu de"}, config=config)30# r2 nho context la Python blogCheckpoint
Bạn đã hiểu cách implement memory cho conversational text processing chưa?
🛠️ Callbacks và Logging
1from langchain_core.callbacks import BaseCallbackHandler23class TokenCounter(BaseCallbackHandler):4 def __init__(self):5 self.total_tokens = 06 7 def on_llm_end(self, response, **kwargs):8 if response.llm_output:9 usage = response.llm_output.get("token_usage", {})10 self.total_tokens += usage.get("total_tokens", 0)11 print(f"Tokens used: {usage.get('total_tokens', 0)}")1213counter = TokenCounter()1415llm_with_callbacks = ChatOpenAI(16 model="gpt-4o-mini",17 callbacks=[counter]18)1920# Run chain21result = (prompt | llm_with_callbacks).invoke({"input": "Hello"})22print(f"Total tokens: {counter.total_tokens}")Checkpoint
Bạn đã hiểu cách sử dụng callbacks để tracking tokens chưa?
🛠️ Fallback Chains
1from langchain_core.runnables import RunnableWithFallbacks23primary = ChatOpenAI(model="gpt-4o")4fallback = ChatOpenAI(model="gpt-4o-mini")5backup = ChatAnthropic(model="claude-3-5-sonnet-20241022")67# Auto-fallback khi primary fail8robust_llm = primary.with_fallbacks([fallback, backup])910chain = prompt | robust_llm | StrOutputParser()11# Neu gpt-4o fail -> try gpt-4o-mini -> try claudeCheckpoint
Bạn đã hiểu cách setup fallback chains để tăng reliability chưa?
⚡ Caching
1from langchain_core.globals import set_llm_cache2from langchain_community.cache import InMemoryCache34# Enable caching5set_llm_cache(InMemoryCache())67# First call - hits API8result1 = llm.invoke("Giai thich AI")9# Second call with same input - returns cached result10result2 = llm.invoke("Giai thich AI") # Instant!Checkpoint
Bạn đã hiểu cách sử dụng caching để tối ưu hiệu suất và chi phí chưa?
🎯 Tổng kết
- Build text processing pipeline với few-shot prompting
- Implement conversation memory cho writing assistant
- Add token counting và cost tracking
- Setup fallback chain với multiple providers
Câu hỏi tự kiểm tra
- Memory trong LangChain giúp giải quyết vấn đề gì khi xây dựng ứng dụng text processing?
- Fallback chains hoạt động như thế nào khi primary model gặp lỗi?
- Caching trong LangChain giúp tối ưu hiệu suất và chi phí như thế nào?
- Callbacks và token counting được sử dụng để theo dõi những thông tin gì trong quá trình xử lý?
🎉 Tuyệt vời! Bạn đã hoàn thành bài học LangChain Deep Dive cho Text Processing!
Tiếp theo: Hãy khám phá các LCEL Patterns nâng cao để xây dựng pipeline mạnh mẽ hơn!
