
ืคืืชืื ืขื ืืืืื ืฉืคื ืืืืืื (LLM) ืืชืืื ืืืจื ืืื ืืืืืืช ืืงืฉื-ืชืืืื ืคืฉืืื. ืื ืืจืืข ืฉืืืฉืืื ืืืจืืช ืืืืืืืช ืฆ'ืืืืื ืคืฉืื ืืืืจืฉืช ืืืืืื ืืืฆืข ืคืขืืืืช ืืืฉืืืช โ ืืื ืฉืืืื ืืืื (tools) ืืืฆืื ืืื, ืขืืืื ืขื ืืกืื ื ืชืื ืื ืื ืืืฉื ืืืขืจืืช ืืงืืฆืื โ ืื ื ื ืชืงืืื ืืืชืืจ ืืกืืื. ื-API ืืกืื ืืจืื ืฉื ืืืืื ืืื ืืกืจ ืืฆื (stateless) ืืืืขื ืืืื ืื ืื ืื ืื ืื ืืืื ืื ืื ืืืื ืืืืืงื ืืืจืืืช.
ืืฉืืื ืฉื ืจืืืช ืคืฉืืื, ืืื "ื ืชื ืืช ืืงืืืฅ ืืื, ืืฆื ื ืชืื ืื ืจืืืื ืืืื ืืืื ืืจื ื ืืืคืง ืืื", ืืืคืืช ืืืชืืจ ืชืืืืจ (orchestration) ืืืจืื:
- ืืืฆื ืื ืืืื ืืฆื (state) ืืืขืืืจืื ืืงืฉืจ (context) ืืื ืงืจืืืืช ืืจืืืืช ื-LLM?
- ืืืฆื ืืืืฉืื ืืืืืงื ืืืืืจืืช (cyclical), ืฉืื ืกืืื ืืงืืื ืืื ืืจืืงืฆืื ืืืืจืช ืื ืฉื ืืช ืขื ืืืื ืขื ืืืฉืืช ืืืืจื?
- ืืืฆื ืืชืงื ื ืื ืืืืืจืื ืืืืืืื ืฉืื ืื (OpenAI, Gemini, ืืงืืืืื) ืืืืืื, ืืืื ืืฉืืชื ืืช ืืงืื ืืื ืคืขื?
LangChain ื-LangGraph ื ืืฆืจื ืืื ืืคืฉื ืืช ืืคืืชืื ืฉื ืืขืจืืืช ืืืื ืืืกืคืง ืืืคืชืืื ืืืฉื ืกืื ืืจืืืช ืืืชืืจ ืืชืืืืจ ืืื:
- LangChain ืืกืคืง ืขืจืืช ืืืื ืืืืืืช: ืืืฉืงืื ืกืื ืืจืืืื ืืืืืืื, ืจืืืืื ืืคืจืืืคืืื ืืืืื.
- LangGraph ืืื ืืกืืจืช ืคืืชืื (framework) ืืื ืืื ืขื ืืื LangChain, ืืืืคืฉืจืช ืืื ืืช ืืช ืืืืืงืช ืงืืืช ืืืืืืืช ืฉื ืืกืืื ืืืจืฃ ืืฆืืื (state graph), ืืืื ืคืืชืจืช ืืืืื ืืืืช ืืช ืืขืืืช ืืืืืืืช ืืืืกืชืขืคืืืืช.
ืืื ืืืืื ืืื ืืืชืจ ืืช ืชืคืงืืืืื, ื ืฉืชืืฉ ืืื ืืืืื.
ืืืืื ื ืฉืืชื ืืื ืื ืืฉืื ืืืื. ืืฉ ืืื ืงืืืืืช ืืืืืืช (ืื ืืขืื, ืืืืืื, ืืืืงืื), ืื ืืคื ื ืขืฆืื ืื ืจืง ืืืงืื. ืืื ืืืจืืื ืืื ืืืื ื ืขืืืืช, ืืชื ืฆืจืืืื ืืืจืืืช ืืืื ื ืืืฆื ืืืืจ ืืช ืืืืงืื ืืืื ืืื.
ืืขืืื ืฉื ืกืืื ื ืืื ื ืืืืืืชืืช:
- LangChain ืืื ืขืจืืช ืงืืืืืช ืืืื ืืืชืงืืืช ืฉืืื.
- LangGraph ืืื ืกืคืจ ืืืืจืืืช ืืืฉืืืื ืืืืคืฉืจ ืืื ืืืจืืื ืืืงืืืืืช ืืืื ืื ืจืง ืืืืืื ืกืืืืื, ืืื ืื ืื ืื ืื ืืื ืืืื ื'ืืืืื' ืืืกืืืืื ืืงืื ืืืืืืช.
โฆ
ืืืื ื ืคืจืง ืื ืืื ืืืืืื ืืืื ืื ืคืจื.
ืืืง 1: LangChain โ ืืจืื ืืืืื ืืขืืืื ืขื LLMs
ืืืืจื ืืขืืงืจืืช ืฉื LangChain: ืืคืฉื ืืืชืงื ื ืืช ืืืื ืืจืืงืฆืื ืืื ืืงืื ืฉืืื ืืืืืื ืฉืคื ืืืืืื (LLMs). ืืื ืืกืคืง ืจืืืืื ืืืื ืื ืืฉืืืืฉ ("ืงืืืืืช") ืืคืชืจืื ืืฉืืืืช ื ืคืืฆืืช.
ืจืืืื ืืคืชื ื-LangChain (ื"ืงืืืืืช" ืฉืื ื):
1. ืืืืืื (Models)
ืืื ืื "ืขืืืคืืช" (wrappers) ืืืื ืืจืืงืฆืื ืืฉืืจื ืขื ืจืฉืชืืช ื ืืืจืื ืื. LangChain ืืืืง ืืืชื ืืฉื ื ืกืืืื:
LLMs: ืืืืฉืง ืืืฉื ืืืชืจ. ืืงืื ืืืจืืืช ืืงืกื ืืงืื, ืืืืืืจ ืืืจืืืช ืืงืกื.- ืืืืื:
llm.invoke("What color is the sky?")โ"The sky is blue."
- ืืืืื:
ChatModels: ืืืืฉืง ืืืืืจื ื ืืืืืง ืืืชืจ. ืขืืื ืขื ืจืฉืืืช ืืืืขืืช (HumanMessage,AIMessage,SystemMessage). ืื ืืืคืฉืจ ืืืืื ืืืืื ืืื ืืืชืจ ืืช ืืืงืฉืจ ืฉื ืืฉืืื.- ืืืืื:
chat.invoke([HumanMessage(content="What color is the sky?")])โAIMessage(content="The sky is usually blue...")
- ืืืืื:
LangChain ืืืื ืืช ื-API. ืืชื ืื ืฆืจืืืื ืืืืื ืืื ืืขืืื ืื ืคืจื ืขื OpenAI, Gemini ืื Ollama ืืงืืื. ืืชื ืคืฉืื ืืืืืคืื ืืืืืืงื ืืื ืืื
ChatOpenAIื-ChatGoogleGenerativeAIืืChatOllama, ืืฉืืจ ืืงืื ืฉืืื ืืืฉืื ืืขืืื.
2. ืคืจืืืคืืื (Prompts)
ืืื ืื ืชืื ืืืช ืืืงืฉืืช ืฉืืื ืืืืื. ืืืงืื ืืืจืืื ืืื ืืช ืืช ืืงืกื ืืืงืฉื ืืื ืคืขื, ืืชื ืืืฆืจืื ืชืื ืืช ืขื ืืฉืชื ืื.
from langchain_core.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant that translates text into {output_language}."),
("human", "{text_to_translate}")
])
prompt_value = template.invoke({"output_language": "French", "text_to_translate": "I love programming."})
ืคืจืืืคืืื ืืืคืืื ืืช ืืืงืฉืืช ืฉืืื ืื ืืชื ืืช ืืฉืืืืจ, ืืืืืืช ืืงืืืช ืืฉืื ืื. ืืชื ืืคืจืืืื ืืช ืืืืืืงื ืฉื ืืฆืืจืช ืืืงืฉื ืืืืืืืงื ืฉื ืงืจืืื ืืืืื.
3. ืฉืจืฉืจืืืช (Chains ืืฉืคืช LCEL)
ืืื ืืื ืฉื LangChain ืืืืงืื. ืฉืจืฉืจืช ืืื ืืืืืจ ืจืฆืืฃ ืฉื ืืกืคืจ ืจืืืืื. ืืืื, ืืฉืชืืฉืื ืืฉื ืื ื-LangChain Expression Language (LCEL), ืฉื ืจืื ืืื ืฆืื ืืจ (|).
ืืฉืจืฉืจืช ืืคืฉืืื ืืืืชืจ: ืคืจืืืคื | ืืืื.
chain = template | get_gemini_llm()
response = chain.invoke({"output_language": "German", "text_to_translate": "Hello, world!"})
# response.content ืืืื "Hallo, Welt!"
ืฉืจืฉืจืืืช ืืืคืฉืจืืช ืืื ืืืฆืืจ ืชืืืืื ืขืืืื ืคืฉืืืื. ืืืืืื, ืชืืืื ืืงืื ื ืชืื ืื ืืืืฉืชืืฉ, ืืืจ ืื ืืืฆืืจ ืคืจืืืคื, ืืฉืืื ืืืชื ืืืืื, ืืืืกืืฃ, ืืขืื ืืช ืืชืืืื.
4. ืื ืชืื ืคืื (Output Parsers)
ืืืืืื ืืืืืจืื ืืงืกื, ืืื ืืืืฉืืืื ืื ืื ื ืืขืืชืื ืงืจืืืืช ืฆืจืืืื ื ืชืื ืื ืืืื ืื (JSON, ืจืฉืืื, ืืกืคืจ). ืื ืชืื ืืคืื ืืืืจืื ืืช ืชืืืืช ืืืงืกื ื"ืืืืืืช" ืฉื ืืืืื ืืคืืจืื ืืจืฆืื.
from langchain_core.output_parsers import JsonOutputParser
# ... ืืืฆืจืื ืคืจืืืคื ืฉืืืงืฉ ืืืืืื ืืืฉืื ืืคืืจืื JSON
parser = JsonOutputParser()
chain = template | get_openai_llm() | parser
# ืืขืช chain.invoke(...) ืื ืืืืืจ ืืืืืืงื ืืงืกื, ืืื ืืืืื ืคืืืชืื (dict)
ืืื ืฉืืงืื ืฉืืื ืืืื ืืขืืื ืขื ืืชืืฆืื ืืืืคื ืคืจืืืจืืื. ืืืงืื ืื ืกืืช ืืืืฅ ืืช ืื ืชืื ืื ืืืจืืฉืื ืืืืจืืืช ืืงืกื, ืืชื ืืงืืืื ืืืืืืงื ืืืื ืืฉืืืืฉ.
5. ืืืื (Tools)
ืื ืื ืฉื ืืชื ืืืืื "ืืืืื". ืืื ืืื ืื ืคืื ืงืฆืื ืฉืกืืื ืืืื ืืืคืขืื. ืื ืืืื ืืืืืช:
- ืืืคืืฉ ืืืื ืืจื ื (
TavilySearch,BraveSearch). - ืืืฉืืื.
- ืคืื ืงืฆืื ืืงืจืืืช ืงืืืฅ ืืืืืกืง.
- ืงืจืืื ื-API ืืคื ืืื ืฉืืื.
ืืืื ืืคื ื ืขืฆืื ืื ืืืืข ืื ืืื ืืืืืืจ ืืืื ืื ืื ืืชืื ืืงืืืฅ
report.docxืฉืืื. ืืืื ืื ืืืจื ืืืืืื ืขืืืจื ืืืฉืช ืืืืืข ืืืฆืื ื ืืืืฆืข ืคืขืืืืช ืืขืืื ืืืืืชื.
ืืืง 2: LangGraph โ ืืื ืฆื (Orchestrator) ืืืฆืืจืช ืกืืื ืื
ืื LangChain ืืื ืขืจืืช ืืืืงืื, ืื LangGraph ืืื ืืขืจืืช ืืืงืจื ืฉืืืืืื ืืืืื ืืืง ืืืฉืชืืฉ ืืืชื.
ืืืขืื ืฉ-LangGraph ืคืืชืจ: ืฉืจืฉืจืืืช ืงืืืกืืืช ื-LangChain ืื ืืื ืืจืืืช. ืื ืืืืืืช ืื ืงืืื ื' ืื ืงืืื ื'. ืืื ืืฉืืืืช ืืืืชืืืช ืืื ื ืืื ืืจืืืช. ืื ืืืจืฉืืช ืืืืืืช, ืืกืชืขืคืืืืช ืืงืืืช ืืืืืืช.
ืืืืืื, ืกืืื-ืืืงืจ ืืืื:
- ืืืืื ืืช ืืืงืฉื.
- ืืืืืื: ืืื ืืฉ ืฆืืจื ืืืืคืืฉ ืืืื ืืจื ื?
- ืื ืื โ ืืืฉืชืืฉ ืืืื ืืืืคืืฉ.
- ืื ืชื ืืช ืืชืืฆืืืช.
- ืืืืืื: ืืื ืืืืืข ืืกืคืืง?
- ืื ืื โ ืืืืืจ ืืฉืื 3 ืขื ืฉืืืืชื ืืืืืงืช ืืืชืจ (ืื ืืืืื).
- ืื ืื โ ืืืืฆืจ ืืช ืืชืฉืืื ืืกืืคืืช.
ืืืืืงื ืืืจืืืช ืืื ืื ื ืืชื ืช ืืชืืืืจ ืืืืฆืขืืช ืฉืจืฉืจืช ืคืฉืืื.
ืืจืขืืื ืืืจืืื ืฉื LangGraph: ืืืฆืื ืืช ืคืขืืืช ืืกืืื ืืืจืฃ ืืฆืืื (ืื ืชืจืฉืื ืืจืืื).
ืจืืืื ืืคืชื ื-LangGraph (ืจืืืื ืชืจืฉืื ืืืจืืื):
1. ืืฆื (State)
ืืื ืืืืืจืื ืืืจืืื ืฉื ืื ืืชืืืื. ืืืจื ืืื ืืื ืืืืื ืคืืืชืื (TypedDict) ืืืืขืืจ ืืฉืื ืืื ืืฉื ื. ืื ืฉืื ืืืื ืืงืจืื ืืื ื ื ืชืื ืื ืืืืชืื ืืืื ื ืชืื ืื ืืืฉืื.
ืืืืื ืืืฆื:
{"user_request": "...", "search_results": [], "final_answer": None}.
2. ืฆืืชืื (Nodes)
ืืื ืื ืืืืงื ืืคืขืืื ืืชืจืฉืื ืืืจืืื ืฉืืื. ืื ืฆืืืช ืืื ืคืื ืงืฆืืืช ืคืืืชืื ืืฉืจ:
- ืืงืืืช ืืช ื
ืืฆืืื ืืืื ืืงืื. - ืืืฆืขืช ืคืขืืื ืืืฉืื (ืงืืจืืช ื-LLM, ืืฉืชืืฉืช ืืืื).
- ืืืืืจื ืืช ื
ืืฆืืืืขืืืื.
ืืืืืืืช ืืฆืืชืื:
call_model_node,execute_tool_node,analyze_results_node.
3. ืงืฉืชืืช (Edges)
ืืื ืื ืืืืฆืื ืืืืืจืื ืืื ืืฆืืชืื. ืื ืงืืืขืื ืืืื ืฆืืืช ืืืคืขื ืืื. ืืฉื ื ืฉื ื ืกืืืื ืฉื ืงืฉืชืืช:
- ืงืฉืชืืช ืจืืืืืช: ืคืฉืื ืืืืจืืช ืฆืืืช ื' ืืฆืืืช ื'. ืืืืจ ืกืืื ื', ืชืืื ืืืคืขื ื'.
- ืงืฉืชืืช ืืืชื ืืช (
Conditional Edges): ืืื ืืืืง ืืืฉืื ืืืืชืจ. ืืืืจ ืฆืืืช ื', ืืืคืขืืช ืคืื ืงืฆืืืช "ื ืชื" ืืืืืืช, ืืฉืจ ืืืื ืช ืืช ืืืฆืืื ืืืื ืืืืืืื ืืื ืืืืฉืื: ืืฆืืืช ื', ื' ืื ื'.
ืืืืื ืืงืฉืช ืืืชื ืืช:
- ืืืืจ ืงืจืืื ืืืืื (ืืฆืืืช
agent_node), ืื ื ืืืืงืื ืืช ืืืฆื.- ืื ืืชืืืืช ืืืืื ืืฉ ืงืจืืื ืืืื โ ืื ื ืืืืืื ืืฆืืืช
execute_tool_node.- ืื ืืื ืงืจืืื ืืืื โ ืื ื ืืืืืื ืืฆืืืช ืืกืืคื
END.
LangChain ืืื LangGraph: ืืชื ืืืฉืชืืฉ ืืื?
| ืงืจืืืจืืื | LangChain (ืฉืจืฉืจืืืช LCEL) | LangGraph |
|---|---|---|
| ืฉืืืืฉ ืขืืงืจื | ืืฉืืืืช ืคืฉืืืืช ืืืื ืืจืืืช | ืืฉืืืืช ืืืจืืืืช ืืฆืืงืืืืช (ืกืืื ืื) |
| ืืื ื | ืฆืื ืืจ (ื' โ ื' โ ื') | ืืจืฃ (ืชืจืฉืื ืืจืืื ืขื ืืกืชืขืคืืืืช ืืืืืืืช) |
| ืืงืจืช ืืจืืื | ืืืจืืื ืืกืืืช, ืืืืืจืช ืืจืืฉ | ืืื ืืืช, ื ืงืืขืช ืืืื ืจืืฆื |
| ืืืืืช ืืฉืืื | 1. ืืงืืช ืืงืกื. 2. ืืกืื ืืืชื. 3. ืืชืจืื ืืืชื ืืฉืคื ืืืจืช. | 1. ืืงืื ืฉืืื. 2. ืืืคืฉ ืืืื ืืจื ื ืขื ืืืฆืืืช ืชืฉืืื. 3. ืืกืื ืืช ืืืืฆืืื ืืืืฉืื. |
| ืื ืืืืื | ืคืก ืืืฆืืจ ืืืคืขื | ืฆืืืช ืฉื ืื ืฉืื ืฉืืชืืืขืฅ ืืืงืื ืืืืืืช |
ืืืืืจ ืื ืืืืงืื
- ืงืื ืืืฉืชืืฉ ื ืื ืก ืืืฆื ืืืชืืืชื ืฉื LangGraph.
- ืืฆืืืช "ืกืืื" ืืงืื ืืช ืืืฆื. ืืชืื ืฆืืืช ืื ื ืืฆืืช ืฉืจืฉืจืช LangChain (
ืคืจืืืคื | ืืืื | ืื ืชื ืคืื). ืืืืื, ืืืืฆืขืืช ืืืื ื-LangChain, ืืืืื ืื ืืขืฉืืช ืืืื (ืืืฉื, "ืืืคืขืื ืืืคืืฉ"). ืืืืืชื ื ืืชืืช ืืืฆื. - ืงืฉืช ืืืชื ืืช ืื ืชืืช ืืช ืืืฆื ืืืืืื ืช ืืช ืืืจืืื ืืฆืืืช "ืืคืขืื ืืืื".
- ืฆืืืช ืื ืืืฆืข ืืช ืืงืจืืื ืืืืืชืืช ืืืื (ืืืฉื, ืืืฆืข ืืืคืืฉ ืืืื ืืจื ื) ืืืืชื ืืช ืืชืืฆืื ืืืืจื ืืืฆื.
- ืืืจืืื ืืืืจืช ืืฆืืืช "ืกืืื" (ืื ืืืืื). ืืขืช ืืืืื ืจืืื ืืช ืชืืฆืืช ืืืืคืืฉ ืืืงืื ืืืืื ืืืฉื.
- ืืืืืื ืืืืจืช ืขื ืขืฆืื ืขื ืฉืืืืื ืืืืื ืฉืืืฉืืื ืืืฉืืื. ืื, ืืงืฉืช ืืืืชื ืืช ืชืืืื ืืช ืืืจืืื ืืกืืื.