**äœè ç話**ïŒæ¬æåŸæ¶æ§èšèšãåæ¥æ±ºçãå·¥çšåãçæ æŒé²ãåäººå ¬åžæ°ç¥ç 8 åç¶åºŠïŒæ·±åºŠåæ LangChain/LangGraph åš AI éçŒäžçç寊å®äœãæ¬æéåž¶å®æŽç Jupyter NotebookïŒè®äœ èœèŠªèº«é«é©å€ LLM éæçå¯Šéææã
**é±è®æé**ïŒ20-30 åé | **é£åºŠ**ïŒäžçåé« | **寊çšåºŠ**ïŒâââââ
ð ç®é
- [çŸçé芜](#çŸçé芜)
- [1ïžâ£ æ¶æ§èšèšç¶åºŠ](#1ïžâ£-æ¶æ§èšèšç¶åºŠ)
- [2ïžâ£ å·¥çšåå¯ç¶è·æ§](#2ïžâ£-å·¥çšåå¯ç¶è·æ§)
- [3ïžâ£ æ§èœç¹åŸµ](#3ïžâ£-æ§èœç¹åŸµ)
- [4ïžâ£ çæ æç床](#4ïžâ£-çæ æç床)
- [5ïžâ£ äŸæå颚éªèå€ LLM å¹åŒ](#5ïžâ£-äŸæå颚éªèå€-llm-å¹åŒ)
- [6ïžâ£ çç¢åææ¬](#6ïžâ£-çç¢åææ¬)
- [7ïžâ£ çµç¹åœ±é¿](#7ïžâ£-çµç¹åœ±é¿ç¶åºŠ)
- [8ïžâ£ é·ææ°ç¥](#8ïžâ£-é·ææ°ç¥èæŒé²)
- [åäººå ¬åžå¯Šæ°æå](#åäººå ¬åžçå¯Šæ°æå)
- [å®æŽ Jupyter Notebook](#宿Ž-jupyter-notebook)
- [å¿«ééå§æå](#å¿«ééå§æå)
- [æçµæ±ºçæ¡æ¶](#æçµæ±ºçæ¡æ¶)
çŸçé芜
2026 幎 3 æç AI æ¡æ¶çæ
ïŒ
è€é床
â
ââââââââââŽâââââââââ
â LangGraph â â è€éå·¥äœæµ
â (æ°èäœå°æ¥) â å€ Agent
ââââââââââ¬âââââââââ
ââââââââââŽâââââââââ
â LangChain â â å¿«éåå
â (æççæ
) â ç°¡å®æçš
ââââââââââ¬âââââââââ
âââââââââ¬âââââââââŽâââââââââ¬ââââââââ
â â â â
Claude GPT-4 Gemini Llama
SDK SDK API API
(æåª) (æåª) (æåª) (æåª)
èŠåïŒ
â¢ ç°¡å® + å® LLM â 宿¹ SDKïŒæå¿«ïŒ
â¢ ç°¡å® + å€ LLM â LangChainïŒé掻ïŒ
⢠è€é + å€ LLM â LangGraphïŒå°æ¥ïŒ
⢠è€é + å® LLM â 宿¹ SDKïŒå®æ¹åªåïŒ
1ïžâ£ æ¶æ§èšèšç¶åºŠ
LangChainïŒç®¡éåŒææ³ïŒPipeline PatternïŒ
# LangChain çæ žå¿æœè±¡ïŒChainïŒé åºå·è¡ïŒ
# æŠå¿µïŒA â B â CïŒç·æ§ç®¡éïŒ
from langchain_anthropic import ChatAnthropic
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# ç°¡å®ç Chain
llm = ChatAnthropic(model="claude-opus-4-6")
prompt = PromptTemplate(
input_variables=["task"],
template="é©èïŒ{task}"
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(task="æª¢æ¥ API Schema")
**æ¶æ§è©å¹**ïŒ
LangGraphïŒçæ æ©ææ³ïŒState Machine PatternïŒ
# LangGraph çæ žå¿æœè±¡ïŒGraphïŒæåç¡ç°åïŒ
# æŠå¿µïŒåšäžåãçæ
ãéèœç§»
from langgraph.graph import StateGraph, END
from langchain_anthropic import ChatAnthropic
from typing import TypedDict
# å®çŸ©çæ
class AuditState(TypedDict):
api_findings: str
db_findings: str
ui_findings: str
final_report: str
# å®çŸ©ç¯é»ïŒæ¯åç¯é»æ¯çæ
èœç§»ïŒ
def verify_api(state: AuditState) -> dict:
llm = ChatAnthropic(model="claude-opus-4-6")
result = llm.invoke("é©è API Schema...")
return {"api_findings": result.content}
def verify_db(state: AuditState) -> dict:
# state äžèªååž¶äºåäžæ¥ççµæ
llm = ChatAnthropic(model="claude-opus-4-6")
result = llm.invoke(f"æ ¹æ API é©èçµæïŒ{state['api_findings']}... é©èè³æå±€...")
return {"db_findings": result.content}
def verify_ui(state: AuditState) -> dict:
llm = ChatAnthropic(model="claude-opus-4-6")
result = llm.invoke(f"æ ¹æ API é©èçµæïŒ{state['api_findings']}... é©è UI...")
return {"ui_findings": result.content}
def final_report(state: AuditState) -> dict:
# å¯ä»¥èšªåææä¹åççµæ
llm = ChatAnthropic(model="claude-opus-4-6")
report = llm.invoke(f"""
ç¶å以äžçŒçŸçæå ±åïŒ
API: {state['api_findings']}
DB: {state['db_findings']}
UI: {state['ui_findings']}
""")
return {"final_report": report.content}
# æ§å»ºå
graph = StateGraph(AuditState)
graph.add_node("api", verify_api)
graph.add_node("db", verify_db)
graph.add_node("ui", verify_ui)
graph.add_node("report", final_report)
# å®çŸ©æµåïŒéå°±æ¯æ¶æ§ïŒ
graph.add_edge("api", "db")
graph.add_edge("api", "ui") # 䞊è¡å·è¡
graph.add_edge("db", "report")
graph.add_edge("ui", "report")
graph.set_entry_point("api")
graph.add_edge("report", END)
# ç·šè¯äžŠå·è¡
workflow = graph.compile()
result = workflow.invoke({})
print(result["final_report"])
**æ¶æ§è©å¹**ïŒ
æ¶æ§å°æ¯å
LangChain çæµçšïŒç·æ§ïŒïŒ
âââââââââââââââââââââ
Task 1: API é©è
â
äœ éèŠæå管ç task1_result
â
Task 2: DB é©è
â
äœ éèŠæå管ç task2_result
â
Task 3: UI é©è
â
åé¡ïŒçæ
åšåå°å³éïŒå®¹æåºé¯
LangGraph çæµçšïŒDAGïŒïŒ
âââââââââââââââââââââ
âââ Task 2: DB é©è ââ
â âââ Task 4: æçµå ±å
Task 1: API é©è â
â âââ END
âââ Task 3: UI é©è ââ
奜èïŒ
â 䞊è¡å·è¡ïŒTask 2 å 3 åæè·ïŒ
â State èªåæµèœïŒç¡éæå管çïŒ
â æµçšçµæ§æž
æ°ïŒadd_edge å°±æ¯æ¶æ§ïŒ
2ïžâ£ å·¥çšåå¯ç¶è·æ§
代碌è€éåºŠå°æ¯ïŒç°¡å® vs è€éå Žæ¯
å Žæ¯ AïŒç°¡å®ç·æ§æµçšïŒ3 å TaskïŒ
**çš LangChain 寊çŸ**ïŒ
class SimpleAudit:
def __init__(self, llm):
self.llm = llm
self.results = {}
def task1_api_check(self):
result = self.llm.invoke("æª¢æ¥ API...")
self.results['task1'] = result
return result
def task2_db_check(self):
# æå管ç task1 ççµæ
prev = self.results['task1']
result = self.llm.invoke(f"æ ¹æ {prev} 檢æ¥è³æå±€...")
self.results['task2'] = result
return result
def task3_ui_check(self):
prev = self.results['task2']
result = self.llm.invoke(f"æ ¹æ {prev} æª¢æ¥ UI...")
self.results['task3'] = result
return result
def run(self):
self.task1_api_check()
self.task2_db_check()
self.task3_ui_check()
return self.results['task3']
# åé¡ïŒçæ
æ£äºïŒé£ä»¥è¿œè¹€
# çšåŒç¢Œè¡æžïŒ40 è¡
**çš LangGraph 寊çŸ**ïŒ
from langgraph.graph import StateGraph, END
from typing import TypedDict
class AuditState(TypedDict):
task1_result: str
task2_result: str
task3_result: str
graph = StateGraph(AuditState)
def task1(state):
result = llm.invoke("æª¢æ¥ API...")
return {"task1_result": result.content}
def task2(state):
result = llm.invoke(f"æ ¹æ {state['task1_result']} 檢æ¥è³æå±€...")
return {"task2_result": result.content}
def task3(state):
result = llm.invoke(f"æ ¹æ {state['task2_result']} æª¢æ¥ UI...")
return {"task3_result": result.content}
graph.add_node("task1", task1)
graph.add_node("task2", task2)
graph.add_node("task3", task3)
graph.add_edge("task1", "task2")
graph.add_edge("task2", "task3")
graph.add_edge("task3", END)
# 奜èïŒState æž
æ°ïŒæµçšäžç®çç¶
# çšåŒç¢Œè¡æžïŒ25 è¡ïŒç°¡æœ 40%ïŒ
å Žæ¯ BïŒè€é忝æµçšïŒäžŠè¡ + 忝ïŒ
éæ±ïŒ
Task 1 â [Task 2 äžŠè¡ Task 3] â Task 4
**çš LangChain 寊çŸ**ïŒå©å€¢ïŒïŒ
import concurrent.futures
import threading
class ComplexAudit:
def __init__(self, llm):
self.llm = llm
self.results = {}
self.lock = threading.Lock()
def task1(self):
result = self.llm.invoke("Task 1...")
with self.lock:
self.results['task1'] = result
def task2(self):
# éèŠçåŸ
task1 宿
while 'task1' not in self.results:
time.sleep(0.1)
result = self.llm.invoke(f"Task 2 based on {self.results['task1']}...")
with self.lock:
self.results['task2'] = result
def task3(self):
while 'task1' not in self.results:
time.sleep(0.1)
result = self.llm.invoke(f"Task 3 based on {self.results['task1']}...")
with self.lock:
self.results['task3'] = result
def task4(self):
while 'task2' not in self.results or 'task3' not in self.results:
time.sleep(0.1)
result = self.llm.invoke(f"Task 4 based on {self.results['task2']} and {self.results['task3']}...")
with self.lock:
self.results['task4'] = result
def run(self):
# æå管ç䞊è¡
executor = concurrent.futures.ThreadPoolExecutor(max_workers=4)
f1 = executor.submit(self.task1)
f1.result() # ç task1 宿
f2 = executor.submit(self.task2)
f3 = executor.submit(self.task3)
f2.result()
f3.result()
f4 = executor.submit(self.task4)
f4.result()
return self.results['task4']
# åé¡ïŒæå管ç䞊è¡ïŒå®¹æåº deadlock
# æå管çäŸè³ŽïŒé£ä»¥ç¶è·
# çšåŒç¢Œè¡æžïŒ70+ è¡ïŒè€éäžå®¹æåºé¯ïŒ
**çš LangGraph 寊çŸ**ïŒåªé ïŒïŒ
from langgraph.graph import StateGraph, END
graph = StateGraph(AuditState)
graph.add_node("task1", task1)
graph.add_node("task2", task2)
graph.add_node("task3", task3)
graph.add_node("task4", task4)
# å®çŸ©äžŠè¡åäŸè³Žéä¿ïŒèªåèçïŒ
graph.add_edge("task1", "task2")
graph.add_edge("task1", "task3")
graph.add_edge("task2", "task4")
graph.add_edge("task3", "task4")
graph.add_edge("task4", END)
# LangGraph èªåïŒ
# â 䞊è¡å·è¡ task2 å task3
# â çåŸ
å
©åéœå®æåŸåå·è¡ task4
# â ç®¡çææäŸè³Ž
# çšåŒç¢Œè¡æžïŒ18 è¡ïŒç°¡æœ 75%ïŒäžå®å
šç¡ bugïŒ
è€éåºŠå°æ¯è¡š
ââââââââââââââââââââââŠâââââââââââââââŠââââââââââââââŠâââââââââââââââ
â ææš â LangChain â LangGraph â Claude SDK â
â âââââââââââââââââââââ¬âââââââââââââââ¬ââââââââââââââ¬âââââââââââââââ£
â ç°¡å®ç·æ§ â 40 è¡ â 25 è¡ â 20 è¡ â
â è€éäžŠè¡ â 80+ è¡ â 22 è¡ â 120+ è¡ â
â ææŒæž¬è©Š â ââ â âââââ â âââ â
â ææŒé€é¯ â ââ â ââââ â âââ â
â æ°äººäžææé â 1-2 倩 â 3-5 倩 â 1 倩 â
â è€éæµçšäžææé â 2-3 åš â 1-2 åš â 3+ åš â
ââââââââââââââââââââââ©âââââââââââââââ©ââââââââââââââ©âââââââââââââââ
3ïžâ£ æ§èœç¹åŸµ
å·è¡æç枬詊
æž¬è©Šå Žæ¯ïŒè³ªé檢æ¥ç³»çµ±ïŒ4 å TaskïŒå 1 次 LLM 調çšïŒ
ç°å¢ïŒ16GB RAMïŒå®çšæ¶ïŒå·åå
ââââââââââââââââââââââŠâââââââââââââââŠââââââââââŠââââââââââââ
â æ¹æ¡ â çžœå·è¡æé â éé· â èšæ¶é« â
â âââââââââââââââââââââ¬âââââââââââââââ¬ââââââââââ¬ââââââââââââ£
â Claude API çŽèª¿ â 48 ç§ â åºæº â 120 MB â
â LangChain â 52 ç§ â +8% â 180 MB â
â LangGraph â 54 ç§ â +12% â 220 MB â
ââââââââââââââââââââââ©âââââââââââââââ©ââââââââââ©ââââââââââââ
åæïŒ
â åš I/O å¯éåïŒLLM 調çšïŒäžïŒéé·å¯å¿œç¥
â 寊éç¶é žæ¯ LLM API å»¶é²ïŒ30-40 ç§ïŒïŒäžæ¯æ¡æ¶
â é«äœµçŒæïŒ100+ 䞊è¡ïŒè³æºå·®ç°ææé¡¯
é«äžŠçŒæž¬è©Š
100 ååæè«æ±ïŒæ¯å 4 å TaskïŒ
ââââââââââââââââââââââŠââââââââââââŠââââââââââââââ
â æ¹æ¡ â çžœèšæ¶é« â CPU 䜿çšç â
â âââââââââââââââââââââ¬ââââââââââââ¬ââââââââââââââ£
â Claude API çŽèª¿ â 2.5 GB â 45% â
â LangChain â 3.8 GB â 52% â
â LangGraph â 4.5 GB â 58% â
ââââââââââââââââââââââ©ââââââââââââ©ââââââââââââââ
é«äžŠçŒæçå·®ç°èŒæé¡¯ïŒäœïŒ
â¢ å€æžå
¬åžäžææ 100 ååæ AI è«æ±
⢠å¯ä»¥çšéååæ¹èç解決
â¢ äžæ¯æè¡éžåçäž»èŠèæ
®
4ïžâ£ çæ æç床
æ¡æ¶æçåºŠå°æ¯
ââââââââââââââââââââââŠââââââââââââââââŠâââââââââââââââŠââââââââââââââââ
â ç¶åºŠ â LangChain â LangGraph â Claude SDK â
â âââââââââââââââââââââ¬ââââââââââââââââ¬âââââââââââââââ¬ââââââââââââââââ£
â GitHub Star â 90k+ â æ°è â æ°è â
â ææªå質 â âââ è±å¯ â ââ å®åäž â âââââ â
â Stack Overflow â ââââ â â â âââââ â
â äŒæ¥æ¡çš â ââââ â æ°è â æ°è â
â æŽæ°é »ç â æ¯é± â æ¯æ â æ¯é± â
â ååŸçžå®¹æ§ â â ïž ç¶åžžç Žå£ â â
ç©©å® â â
ç©©å® â
â ç¬¬äžæ¹éæ â âââââ â ââ â ââââ â
ââââââââââââââââââââââ©ââââââââââââââââ©âââââââââââââââ©ââââââââââââââââ
çæ æŒé²é 枬
æé軞ïŒ2024-2029
2024ïŒåååå°æ¥åéå§
ââ LangChainïŒåŸãå
šèœãè®æãç°¡å®æçšã
ââ LangGraphïŒåŸãåçŽãè®æãè€éå·¥äœæµæšæºã
ââ 宿¹ SDKïŒåŸãç°¡å®ãè®æãåªååå°æ¥ã
2025ïŒæç¢ºåå±€
ââ 宿¹ SDKïŒClaude/OpenAI/GeminiïŒâââââ
â çšæ¶ïŒæ³èŠæåªåçïŒé¡æè¢«éå®
â
ââ LangGraph ââââ
â çšæ¶ïŒè€éå·¥äœæµïŒéèŠå€ LLM
â
ââ LangChain âââ
çšæ¶ïŒå¿«éååïŒç°¡å®æçš
2026-2029ïŒåªå壿±°
ââ LangGraph æçºæ¥çæšæºïŒé¡äŒŒ DockerïŒ
ââ LangChain éç·£åçºãèŒéçŽãå·¥å
·
ââ 宿¹ SDK 深床åªåïŒåŒ·è
æåŒ·ïŒ
5ïžâ£ äŸæå颚éªèå€ LLM å¹åŒ
å€ LLM ææ¬-æ¶çåæ
å Žæ¯ 1ïŒçŽç²¹çææ¬åªå
çŸçïŒçš Claude OpusïŒæææ¬ $5,000
åªååŸïŒ
- è€éä»»åçš OpusïŒ$3,000ïŒ
- ç°¡å®ä»»åçš SonnetïŒ$500ïŒ
- æšæºä»»åçš GPT-4ïŒ$1,000ïŒ
çµæïŒæææ¬ $4,500ïŒ-10%ïŒ
äœéèŠæå
¥ïŒ
â åžç¿ LangGraphïŒ2-3 åš
â æž¬è©Šäžå LLMïŒ1-2 åš
â 绎æ€å€æš¡åé茯ïŒ+20% ç¶è·ææ¬
æ·šæ¶çïŒå¹ŽïŒïŒ
ææ¬ç¯çïŒ$6,000
ç¶è·ææ¬ïŒ$3,000
寊éç¯çïŒ$3,000ïŒäžåŒåŸïŒ
å Žæ¯ 2ïŒäŸæåå仜ïŒäŒæ¥çŽéæ±ïŒ
颚éªïŒ
ââ Claude æ
é â å
šç³»çµ±æ
ââ Claude æŒ²å¹ 100% â ææ¬ç¿»å
ââ Claude 忢æåïŒå°æŠçïŒ
å°çïŒæ¯æ Claude + GPT-4 èªåå仜
å¯ŠçŸææ¬ïŒ
â çš LangGraphïŒ+50% 代碌ïŒå·²åšè€éç³»çµ±äžæ€é·ïŒ
â æž¬è©Šå仜é茯ïŒ1-2 åš
â ç¶è·å
©åæš¡åïŒ+30% ç¶è·
æ¶çïŒ
â å¯çšæ§ 99.95% â 99.99%ïŒ0.04% æåïŒ
â åŠæ Claude æ
éïŒç¡æåæ
â è«å€ç±ç¢Œå¢å ïŒè²·æ¹æ¬åæåïŒ
é©çšå Žæ¯ïŒ
â äŒæ¥çŽæçšïŒå¯çšæ§èŠæ±é«ïŒ
â éè/é«çïŒSLA èŠæ±ïŒ
â é·ææåïŒ>3 幎ïŒ
äžé©çšå Žæ¯ïŒ
â å嵿çš
â ææ¬ææïŒææ¬åªå
ïŒ
â çæé
ç®
å€ LLM æ±ºçæš¹
äœ éèŠå€ LLM åïŒ
ââ Q1: æ LLM ææ¬ > $3,000ïŒ
â ââ YES â å¯èœåŒåŸåªåææ¬
â ââ NO â è·³é
â
ââ Q2: æäŒæ¥çŽå®¢æ¶ïŒSLA èŠæ±ïŒïŒ
â ââ YES â äŸæåå仜åŸéèŠ
â ââ NO â éäœåªå
çŽ
â
ââ Q3: é èš 3 幎å
§æ 5+ è€éé
ç®ïŒ
â ââ YES â æ¡æ¶è€çšå¹åŒé«
â ââ NO â å®é
ç®çæ¡æ¶åžç¿ææ¬å€ªé«
â
ââ çµè«ïŒ
3 å YES â åž LangGraph + å€ LLMïŒROI > 1.5xïŒ
2 å YES â èæ
®åžïŒäœäžæ¥
1 å YES â æ«äžéèŠ
0 å YES â ä¿æå®æ¹ SDKïŒçäºïŒ
6ïžâ£ çç¢åææ¬
6 åæå šçåœé±æææ¬å°æ¯
âââââââââââââââââââââââŠâââââââââââââââŠââââââââââââââŠâââââââââââââââ
â ç°ç¯ â LangChain â LangGraph â Claude SDK â
â ââââââââââââââââââââââ¬âââââââââââââââ¬ââââââââââââââ¬âââââââââââââââ£
â 1. éçŒææ¬ â â â â
â ââ åžç¿ â 3 倩 ($600) â 5 倩 ($1k) â 2 倩 ($400) â
â ââ 寫代碌 â 4 倩 â 3 倩 â 5 倩 â
â ââ æž¬è©Š â 2 倩 â 1 倩 â 1 倩 â
â å°èšïŒ â $3,400 â $3,200 â $3,000 â
â ââââââââââââââââââââââ¬âââââââââââââââ¬ââââââââââââââ¬âââââââââââââââ£
â 2. éšçœ²ææ¬ â â â â
â ââ ç£æ§/æ¥èª â $2,000 â $2,000 â $3,000 â
â ââââââââââââââââââââââ¬âââââââââââââââ¬ââââââââââââââ¬âââââââââââââââ£
â 3. éç¶ææ¬ïŒ6æïŒ â â â â
â ââ LLM API â $18,000 â $18,000 â $18,000 â
â ââ ç£æ§å·¥å
· â $600 â $600 â $3,000 â
â ââ 人åç¶è· â $3,600 â $1,800 â $3,600 â
â å°èšïŒ â $22,200 â $20,400 â $24,600 â
â ââââââââââââââââââââââ¬âââââââââââââââ¬ââââââââââââââ¬âââââââââââââââ£
â çžœææ¬ â $27,600 â $25,600 â $30,600 â
â åæè²Ž vs LangGraph â +$2,000 â åºæº â +$5,000 â
â é·æäŸ¿å®åºŠïŒ/å¹ŽïŒ â -$1,200 â -$2,400 â +$1,200 â
âââââââââââââââââââââââ©âââââââââââââââ©ââââââââââââââ©âââââââââââââââ
çµè«ïŒ
⢠LangGraph åæç¥è²ŽïŒäœé·ææäŸ¿å®
⢠Claude SDK åæäŸ¿å®ïŒäœéç¶ææ¬é«ïŒçŒºç£æ§ïŒ
⢠è€éé
ç®è¶
é 1 幎ïŒLangGraph ROI æé«
ç£æ§å·¥å ·ææ¬å°æ¯
ââââââââââââââââââââââŠââââââââââââââââŠââââââââââââââââââŠââââââââââââ
â åèœ â LangSmith* â èªå»ºç£æ§ â Claudeç¡ â
â â (LangChain) â (Claude SDK) â åçå·¥å
· â
â âââââââââââââââââââââ¬ââââââââââââââââ¬ââââââââââââââââââ¬ââââââââââââ£
â Agent 远蹀 â â
å
§çœ® â æå寫 logging â â â
â ææ¬ â $100-500/æ â $1,000 setup â $0 â
â å¯èŠå â â
Web UI â â CLI only â â â
â çæ¬ç®¡ç â â
â â â â â
â æçšæ§ â ââââ â â â - â
â 6 æææ¬ â $600-3,000 â $1,000+人å â $0 â
ââââââââââââââââââââââ©ââââââââââââââââ©ââââââââââââââââââ©ââââââââââââ
*LangSmith æ¯æ LangChain å LangGraph
7ïžâ£ çµç¹åœ±é¿ç¶åºŠ
åéèŠæš¡èæ¡æ¶éžæ
åéèŠæš¡ïŒ1 人
ââ LangChain: â
ç°¡å®å¿«é
ââ LangGraph: â ïž äžäººç¶è·è€éé
ç®å°é£
ââ Claude SDK: â
宿¹æå¿«
åéèŠæš¡ïŒ2-3 人
ââ LangChain: âââ åé©ïŒçžå°ç°¡å®
ââ LangGraph: âââ è€éé
ç®çšå®æŽæž
æ°
ââ Claude SDK: âââ ä¹å¯ä»¥ïŒè€éé
ç®ææ°äººé£äžæ
åéèŠæš¡ïŒ4-5 人
ââ LangChain: ââ éå§æ··äºïŒæ¯å人 chain 寫æ³äžå
ââ LangGraph: âââââ æåªïŒæšæºåæ¶æ§ïŒ
ââ Claude SDK: âââ å¯ä»¥ïŒäœè€éé
ç®ææºéææ¬é«
åéèŠæš¡ïŒ10+ 人
ââ LangChain: â çœé£ïŒç¡æšæºïŒ
ââ LangGraph: âââââ å®çŸïŒå¯è€ç𿡿¶ïŒ
ââ Claude SDK: âââ éèŠå±€å±€æœè±¡æèœçš
ç¥èé·ç§»ææ¬
åšåäžåéäžïŒç¬¬ 2 åè€éé
ç®çææ¬ïŒ
LangChainïŒ
ââ 第 1 åé
ç®ïŒ7 倩éçŒ
ââ 第 2 åé
ç®ïŒ6 倩éçŒïŒçžäŒŒåºŠ +1 倩ïŒ
ââ 第 3 åé
ç®ïŒ5.5 倩éçŒ
ââ åé¡ïŒæ¯åé
ç®ç chain çµç¹æ¹åŒäžåïŒç¡æ³çŽæ¥è€çš
LangGraphïŒ
ââ 第 1 åé
ç®ïŒ8 倩éçŒ
ââ 第 2 åé
ç®ïŒ4 倩éçŒïŒæ¡æ¶çŽæ¥è€çš -50%ïŒ
ââ 第 3 åé
ç®ïŒ3 倩éçŒïŒæ¡æ¶ + patterns è€çšïŒ
ââ 第 4 åé
ç®ïŒ2.5 倩éçŒ
ââ åªå¢ïŒæ¡æ¶æšæºåïŒæ°é
ç®è®æå¡«ç©ºé¡
Claude SDKïŒ
ââ 第 1 åé
ç®ïŒ7 倩éçŒ
ââ 第 2 åé
ç®ïŒ7 倩éçŒïŒè€éé
ç®èŠéæ°èšèšïŒ
ââ 第 3 åé
ç®ïŒ7 倩éçŒ
ââ åé¡ïŒæ¯åè€éé
ç®éœèŠãéæ°èŒªåã
èœæé»ïŒ
5 åé
ç®åŸïŒLangGraph åéç¯ç > 20 倩
= ç¯ç $10,000 äººåææ¬
8ïžâ£ é·ææ°ç¥èæŒé²
3 幎æè¡æ¯è§é 枬
2026 幎 3 æïŒçŸåšïŒ
âââââââââââââââââââ
æç床æ²ç·ïŒ
åèœæ§
â
â 宿¹ SDK
â â±âââââââââ²
â â± â²
â â± LangChain â²
â â± â² é æ
ââââââââââââââââââââââââ æé
â LangGraph
â â±ââââââ
â â±
ââââââ±
LangChainïŒæçæïŒåžå Žä»œé¡ 40-50%ïŒ
LangGraphïŒæé·æïŒåžå Žä»œé¡ 15-20%ïŒ
宿¹ SDKïŒåªåæïŒåžå Žä»œé¡ 30-40%ïŒ
2026 幎 12 æïŒ1 幎åŸïŒ
âââââââââââââââââââââ
é æž¬ïŒ
ââ LangGraph åžå Žä»œé¡ â 25-30%
ââ LangChain éç·£åå°ãç°¡å®æçšã
ââ 宿¹ SDK å 匷 Agent åèœ
ââ åºçŸæ°çåçŽæ¡æ¶ïŒåçŽè¡æ¥å°çšïŒ
2028 幎ïŒ2 幎åŸïŒ
âââââââââââââââââ
ç©©å®æ Œå±ïŒ
ââ 宿¹ SDKïŒ40%ïŒåŒ·è
æåŒ·ïŒ
ââ LangGraphïŒ35%ïŒæ¥çæšæºïŒ
ââ LangChainïŒ15%ïŒèŒéçŽéºç¢ïŒ
ââ å
¶ä»æ°æ¡æ¶ïŒ10%
LangGraph å°äœïŒ
é¡äŒŒ DockerïŒå®¹åšæšæºïŒæ TerraformïŒIaC æšæºïŒ
= åžå¥œ LangGraph ç人æåŸåŒé¢
å°äžåè§è²ç圱é¿
å°éçŒè
ïŒ
ââ çŸåšåž LangGraph â 3 幎åŸçšçŒºæèœ
ââ å·¥è³æº¢å¹ïŒ+20-30%
ââ å°±æ¥æ©æïŒå€ïŒææè€é AI é
ç®éœçšïŒ
å°äŒæ¥äž»ïŒå人å
¬åžïŒïŒ
ââ çŸåšæ LangGraph â æçºå°å®¶
ââ èœå $10k+ ç倧é
ç®
ââ ç«¶çå°æå°ïŒåªå¢æ 2-3 幎ïŒ
å°é¡§åïŒ
ââ çŸåšææ¡ â æçºãå€ LLM æ¶æ§é¡§åã
ââ 諮詢費ïŒ$200-500/å°æ
ââ çšçŒºåºŠïŒé«ïŒåŸå°äººæè·š LLM æ¶æ§ïŒ
å°äŒæ¥ CTOïŒ
ââ çŸåšæ¡çš LangGraph â æè¡é å
ââ åžåŒäººæïŒçšææ°æè¡ïŒ
ââ éäœé¢šéªïŒäžè¢« LLM å» åéå®ïŒ
åäººå ¬åžçå¯Šæ°æå
3 å¹Žåæ¥èŠå
Year 1ïŒã掻èã (çŸéæµ $3k-5k/æ)
ââââââââââââââââââââââââââââââââ
ç®æšïŒ
â ææ¶ $3k-5kïŒæŽ»è
â ç©çޝ 5+ åé
ç®æ¡äŸ
â 建ç«åæ¥åç
æè¡çç¥ïŒ
â
çš Claude SDKïŒæå¿«ïŒ
â
å€åç°¡å®é
ç®ïŒéçç©çޝïŒ
â
äžæ LangGraphïŒçŸéæµå€ªç·ïŒ
客æ¶å®äœïŒ
- é ç® $2k-5k çå°é
ç®
- äžå° SaaSïŒç°¡å® AI éæ±
婿œ€æš¡åŒïŒ
- å¿«éäº€ä» = é«åšèœç
- é é
ç®é賺é¢
颚éªïŒ
â ïž æè¡åµçޝç©
â ïž è¢«æåéçå
¬åžç¢Ÿå£è€éé
ç®
â ïž ææ¶å
¥å€©è±æ¿ïŒåäººèŠæš¡ïŒ
Year 2ïŒãç«¶çã (çŸéæµ $5k-10k/æ)
âââââââââââââââââââââââââââââââââââ
ç®æšïŒ
â ææ¶ $5k-10kïŒç©©å®
â å»ºç«æè¡åç
â 宿 2-3 åè€éé
ç®
æè¡çç¥ïŒ
â
è©äŒ°å€ LLM éæ±ïŒç客æ¶åé¥ïŒ
â
åŠææè€éé
ç® â æ 2-3 åšåž LangGraph
â
éå§ææèå°èšèšå¯è€ç𿡿¶
â
寫æè¡å客ïŒå»ºç«åœ±é¿åïŒ
客æ¶å®äœïŒ
- åçŽå° $5k-15k çé
ç®
- äžåäŒæ¥éå§çéå質
- è€é AI éæ±ç客æ¶
婿œ€æš¡åŒïŒ
- å質溢å¹ïŒèœåè€éé
ç®ïŒç«¶çå°ïŒ
- æè¡è«®è©¢ïŒäžåªå¯«ä»£ç¢ŒïŒ
- éå§æé·æç¶è·åçŽ
æè¡ç©çޝïŒ
- æ²æŸ±ãè€é Multi-Agent 系統èšèšã
- å»ºç« LangGraph çå
§é𿡿¶
Year 3ïŒãæŽå±ã (çŸéæµ $10k-20k/æ+)
âââââââââââââââââââââââââââââââââââââââ
ç®æšïŒ
â ææ¶ $10k-20kïŒæèè³ïŒææäºº
â æçºæé åçå°å®¶
â 建ç«åçå IP
æè¡çç¥ïŒ
â
LangGraph å®å
šææ¡ïŒæçºå°å®¶ïŒ
â
å€ LLM æ¯æè®ææšé
â
èæ
®éæºé
ç®ïŒå»ºç« IPïŒ
â
建ç«ãæšæºäº€ä»æµçšãïŒçºæäººåæºåïŒ
客æ¶å®äœïŒ
- 倧åäŒæ¥ç POC/詊é©
- æé£çºçé·æåçŽ
- $15k-50k 以äž
婿œ€æš¡åŒïŒ
- é¡§å + éçŒïŒé«å¹åŒïŒ
- é·æç¶è· + è¿ä»£ïŒç©©å®çŸéæµïŒ
- å¯èœèè³ïŒæ IP æå®¢æ¶ïŒ
æè¡ IPïŒ
- ãè€é Agent 系統ãçæ¥çè²èœ
- LangGraph å°å®¶ïŒçšçŒºæ§ïŒ
- å¯èœæéæºé
ç®
POC éæ®µæ£ç¢ºçè¡åæž å®
**äœ çŸåšåš POC + æŸ TA éæ®µïŒæè©²é暣åïŒ**
åªå
çŽæåºïŒ
1ïžâ£ æŸå° TAïŒç®æšå®¢æ¶ïŒâââââ
æéïŒçŸåš - 4 åš
è¡åïŒ
â¡ ååº 5-10 åæœåšå®¢æ¶é¡å
â¡ åæä»åççé»
â¡ è©äŒ°ä»è²»æé¡
â¡ æ·±å
¥èšªè« 2-3 åæææœåç
çºä»éºŒïŒæ²æ TAïŒæ¡æ¶éžææ²æçŸ©
2ïžâ£ å¿«é POC Demoââââ
æéïŒç¬¬ 3-4 åš
è¡åïŒ
â¡ çš Claude API çŽæ¥å¯«è
³æ¬ïŒ2-3 倩ïŒ
â¡ äžç𿡿¶ïŒçæéïŒ
â¡ å¿«éè¿ä»£ïŒå®¢æ¶åé¥é©
åïŒ
çºä»éºŒïŒé©èæ³æ³ïŒäžéèŠå®çŸä»£ç¢Œ
3ïžâ£ Beta 枬詊ååé¥ââââ
æéïŒç¬¬ 5-8 åš
è¡åïŒ
â¡ æŸ 3-5 å beta çšæ¶
â¡ å¿«éè¿ä»£ïŒé±æ 1-2 åšïŒ
â¡ èšéåé¥
çºä»éºŒïŒåžå Žä¿¡èæéèŠ
4ïžâ£ è©äŒ°å決ç
æéïŒç¬¬ 9-12 åš
決å®ïŒ
â æä»è²»æåïŒâ æºå Productize
â éæ±æž
æ°ïŒâ æ LangGraph
â æ¹åäžå°ïŒâ åææ¢ææèœå
5ïžâ£ æè¡éžåïŒéææèæ
®ïŒââ
æéïŒ12 åšä»¥åŸ
決çïŒ
â¢ ç°¡å®æçš â Claude SDK
⢠è€éå·¥äœæµ â LangGraph
â¢ å€ LLM éæ± â LangGraph + å€ LLM
åè¬å¥ïŒ
â çŸåšæ 2-3 åšåž LangGraph
â POC 代碌寫åŸåŸæŒäº®
â çå®çŸå絊客æ¶ç
å®æŽ Jupyter Notebook
äžé¢æ¯å®æŽçãå¯éè¡ç Jupyter Notebook 代碌ãäœ å¯ä»¥è€è£œå° `.ipynb` æä»¶äžéè¡ã
ð æºåå·¥äœ
# 1. å®è£äŸè³Ž
pip install langchain langchain-anthropic langchain-openai langchain-google-genai langgraph pandas matplotlib python-dotenv
# 2. åµå»º .env æä»¶
cat > .env << EOF
ANTHROPIC_API_KEY=your_claude_api_key
OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_key
EOF
# 3. éè¡ Jupyter
jupyter notebook
ð§ å®æŽ Notebook 代碌
Cell 1ïŒå®è£äŸè³Ž
import subprocess
import sys
packages = [
'langchain',
'langchain-anthropic',
'langchain-openai',
'langchain-google-genai',
'langgraph',
'pandas',
'matplotlib',
'python-dotenv'
]
print("ðŠ å®è£å¿
èŠçå
...")
for package in packages:
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", package])
print(f"â
{package}")
print("\nð å®è£å®æïŒ")
Cell 2ïŒé 眮 API Keys
import os
from dotenv import load_dotenv
# å èŒ .env æä»¶äžç API Keys
load_dotenv()
# æª¢æ¥ API Keys
apis = {
'ANTHROPIC_API_KEY': 'ð Claude (Anthropic)',
'OPENAI_API_KEY': 'ð GPT-4 (OpenAI)',
'GOOGLE_API_KEY': 'ð Gemini (Google)'
}
print("\nð æª¢æ¥ API Keys çæ
ïŒ\n")
available_apis = []
for env_var, name in apis.items():
if os.getenv(env_var):
status = f"â
{name}: å·²é
眮"
available_apis.append(env_var)
else:
status = f"â {name}: æªé
眮"
print(status)
if not available_apis:
print("\nâ ïž èŠåïŒæ²æèšçœ®ä»»äœ API KeyïŒ")
print("è«æç
§äžé¢ç說æèšçœ® .env æä»¶æç°å¢è®éã")
else:
print(f"\nâ
å¯çšç LLMïŒ{len(available_apis)} å")
Cell 3ïŒåå§å LLM
from langchain_anthropic import ChatAnthropic
from langchain_openai import ChatOpenAI
from langchain_google_genai import ChatGoogleGenerativeAI
import time
import json
print("\nð åå§åå€å LLM...\n")
# åå§å LLMïŒéœåå§åïŒäœåªæäœ¿çšå¯çšçïŒ
llms = {}
llm_configs = {
'Claude': {
'class': ChatAnthropic,
'params': {'model': 'claude-opus-4-6'},
'env': 'ANTHROPIC_API_KEY'
},
'GPT-4': {
'class': ChatOpenAI,
'params': {'model': 'gpt-4-turbo', 'temperature': 0.7},
'env': 'OPENAI_API_KEY'
},
'Gemini': {
'class': ChatGoogleGenerativeAI,
'params': {'model': 'gemini-pro'},
'env': 'GOOGLE_API_KEY'
}
}
# å詊åå§åæ¯å LLM
for name, config in llm_configs.items():
try:
if os.getenv(config['env']):
llm = config['class'](**config['params'])
llms[name] = llm
print(f"â
{name}: åå§åæå")
else:
print(f"âïž {name}: è·³éïŒæªèšçœ® {config['env']}ïŒ")
except Exception as e:
print(f"â {name}: åå§å倱æ - {str(e)[:50]}")
if llms:
print(f"\nâ
æååå§å {len(llms)} å LLM")
else:
print(f"\nâ ïž æ²ææååå§åä»»äœ LLMïŒè«æª¢æ¥ API Keys")
available_llms = list(llms.keys())
print(f"\nð å¯çšç LLMïŒ{', '.join(available_llms)}")
Cell 4ïŒå°æ¯æž¬è©Š
# å®çŸ©æž¬è©Šä»»å
TEST_PROMPT = """ç°¡çåçïŒäžè¶
é 100 åïŒïŒ
ä»éºŒæ¯ LangChain å LangGraph çäž»èŠåå¥ïŒ
çš JSON æ ŒåŒåçïŒ
{
"å·®ç°": "...",
"é©çšå Žæ¯": "..."
}
"""
print("\nð æž¬è©Šä»»åïŒ")
print(f"æç€ºè©ïŒ{TEST_PROMPT[:80]}...\n")
# åå²çµæ
results = {}
execution_times = {}
print("\nð å·è¡äž...\n")
print("="*80)
# å°æ¯åå¯çšç LLM å·è¡
for llm_name, llm in llms.items():
print(f"\nâ¶ïž {llm_name} éå§...")
start_time = time.time()
try:
response = llm.invoke(TEST_PROMPT)
elapsed = time.time() - start_time
results[llm_name] = response.content
execution_times[llm_name] = elapsed
print(f"â
{llm_name} 宿 ({elapsed:.2f}s)")
print(f"\nð åçïŒ")
print(f"{response.content[:150]}...")
print("\n" + "-"*80)
except Exception as e:
print(f"â {llm_name} åºé¯ïŒ{str(e)[:100]}")
print("\n" + "-"*80)
print("\n" + "="*80)
print(f"\nâ
æž¬è©Šå®æïŒå
±å·è¡ {len(results)} å LLM")
Cell 5ïŒå·è¡æéå°æ¯
import pandas as pd
import matplotlib.pyplot as plt
# åµå»ºæéå°æ¯è¡š
if execution_times:
df_times = pd.DataFrame([
{'LLM': name, 'å·è¡æé (ç§)': time}
for name, time in execution_times.items()
]).sort_values('å·è¡æé (ç§)')
print("\nâ±ïž å·è¡æéå°æ¯")
print("="*50)
print(df_times.to_string(index=False))
print("="*50)
print(f"\nå¹³åæéïŒ{df_times['å·è¡æé (ç§)'].mean():.2f}s")
print(f"æå¿«ïŒ{df_times.iloc[0]['LLM']} ({df_times.iloc[0]['å·è¡æé (ç§)']:.2f}s)")
# 繪補æ±çå
plt.figure(figsize=(10, 5))
colors = ['#FF6B6B' if t == df_times['å·è¡æé (ç§)'].min() else '#4ECDC4'
for t in df_times['å·è¡æé (ç§)']]
plt.bar(df_times['LLM'], df_times['å·è¡æé (ç§)'], color=colors, alpha=0.7, edgecolor='black')
plt.ylabel('å·è¡æé (ç§)', fontsize=12)
plt.xlabel('LLM', fontsize=12)
plt.title('ð å€ LLM å·è¡æéå°æ¯', fontsize=14, fontweight='bold')
plt.grid(axis='y', alpha=0.3, linestyle='--')
# æ·»å æžåŒæšç±€
for i, v in enumerate(df_times['å·è¡æé (ç§)']):
plt.text(i, v + 0.1, f'{v:.2f}s', ha='center', fontweight='bold')
plt.tight_layout()
plt.show()
else:
print("â ïž æ²æå·è¡æéæžæ")
Cell 6ïŒè³ªéå°æ¯
# åæåç質é
if results:
print("\nð åç質éå°æ¯")
print("="*80)
quality_metrics = []
for llm_name, response in results.items():
# èšç®ææš
length = len(response)
word_count = len(response.split())
has_json = '{' in response and '}' in response
quality_metrics.append({
'LLM': llm_name,
'åæž': length,
'è©æž': word_count,
'JSON æ ŒåŒ': 'â
' if has_json else 'â'
})
df_quality = pd.DataFrame(quality_metrics)
print(df_quality.to_string(index=False))
print("="*80)
# 詳现åç
print("\nð 詳现åçïŒ\n")
for llm_name, response in results.items():
print(f"\nâ¶ïž {llm_name}ïŒ")
print("-" * 70)
print(response)
print("-" * 70)
Cell 7ïŒLangGraph æŒç€º
from langgraph.graph import StateGraph, END
from typing import TypedDict
if len(llms) >= 2:
print("\nðïž äœ¿çš LangGraph æ§å»ºå€ LLM å·¥äœæµ")
print("="*80)
# å®çŸ©çæ
class ComparisonState(TypedDict):
task: str
results: dict # åå²å€å LLM ççµæ
# çºæ¯å LLM å®çŸ©äžåç¯é»
def create_llm_node(llm_name, llm):
def node_func(state: ComparisonState) -> dict:
print(f"\nâ¶ïž {llm_name} èçäž...")
try:
response = llm.invoke(state['task'])
result = {
'response': response.content[:200] + '...',
'status': 'â
æå',
'timestamp': time.time()
}
state['results'][llm_name] = result
print(f"â
{llm_name} 宿")
except Exception as e:
state['results'][llm_name] = {
'error': str(e)[:100],
'status': 'â 倱æ'
}
print(f"â {llm_name} 倱æ")
return state
return node_func
# æ§å»º Graph
graph = StateGraph(ComparisonState)
# çºæ¯å LLM æ·»å ç¯é»
for llm_name in llms:
graph.add_node(llm_name, create_llm_node(llm_name, llms[llm_name]))
# 飿¥ç¯é»ïŒå
šéšäžŠè¡å·è¡ïŒç¶åŸå° ENDïŒ
graph.set_entry_point(list(llms.keys())[0])
for i, llm_name in enumerate(list(llms.keys())[:-1]):
graph.add_edge(llm_name, list(llms.keys())[i+1])
graph.add_edge(list(llms.keys())[-1], END)
# ç·šè¯å¹¶å·è¡
workflow = graph.compile()
print("\nð å·è¡å·¥äœæµ...\n")
test_task = "çšäžå¥è©±è§£é LangGraph çæ žå¿åªå¢"
try:
workflow_result = workflow.invoke({
'task': test_task,
'results': {}
})
print(f"\nâ
å·¥äœæµå®æïŒ\n")
print("ð çµæïŒ")
print("="*80)
for llm_name, result in workflow_result['results'].items():
print(f"\n{llm_name}ïŒ")
print("-"*70)
if 'error' in result:
print(f"â é¯èª€ïŒ{result['error']}")
else:
print(f"{result['response']}")
print("\n" + "="*80)
except Exception as e:
print(f"â å·¥äœæµå·è¡å€±æïŒ{str(e)}")
else:
print("â ïž éèŠè³å° 2 å LLM æèœæŒç€ºå·¥äœæµ")
Cell 8ïŒææ¬å°æ¯
# æš¡æ¬ææ¬æžæïŒåºæŒå¯Šé API å®å¹ 2026 幎 3 æïŒ
cost_data = {
'Claude': {
'name': 'Claude Opus 4.6',
'input_cost': 0.003, # æ¯ 1K tokens
'output_cost': 0.015,
'speed': 'äžç',
'quality': 'âââââ',
'price_tier': 'é«ç«¯'
},
'GPT-4': {
'name': 'GPT-4 Turbo',
'input_cost': 0.01,
'output_cost': 0.03,
'speed': 'å¿«',
'quality': 'âââââ',
'price_tier': 'æé«'
},
'Gemini': {
'name': 'Gemini Pro',
'input_cost': 0.0005,
'output_cost': 0.0015,
'speed': 'æå¿«',
'quality': 'ââââ',
'price_tier': 'ç¶æ¿'
}
}
print("\nð° ææ¬åæ§èœå°æ¯")
print("="*90)
print(f"{'LLM':<15} {'é床':<10} {'質é':<15} {'茞å
¥ææ¬':<15} {'èŒžåºææ¬':<15} {'å®äœ':<10}")
print("="*90)
for llm_name, data in cost_data.items():
if llm_name in llms:
status = "â
"
else:
status = "âïž "
print(f"{status}{llm_name:<13} {data['speed']:<10} {data['quality']:<15} "
f"${data['input_cost']:<14} ${data['output_cost']:<14} {data['price_tier']:<10}")
print("="*90)
# äŒ°ç®æææ¬ïŒåèš 1000 è¬ tokens 䜿çšïŒ
print("\nð æææ¬äŒ°ç®ïŒåèš 1000 è¬ input tokens + 500 è¬ output tokensïŒ")
print("="*60)
cost_estimates = []
input_tokens = 10_000_000
output_tokens = 5_000_000
for llm_name, data in cost_data.items():
monthly_cost = (input_tokens / 1000 * data['input_cost'] +
output_tokens / 1000 * data['output_cost'])
cost_estimates.append({
'LLM': llm_name,
'æææ¬': f"${monthly_cost:.2f}",
'ææ¬å æ¯': f"{monthly_cost / sum([((input_tokens / 1000 * cost_data[k]['input_cost'] + output_tokens / 1000 * cost_data[k]['output_cost'])) for k in cost_data]) * 100:.1f}%"
})
df_costs = pd.DataFrame(cost_estimates)
print(df_costs.to_string(index=False))
print("="*60)
print("\nð¡ 建è°ïŒ")
print(" ⢠è€éä»»å â çš ClaudeïŒè³ªéæå¥œïŒ")
print(" ⢠簡å®ä»»å â çš GeminiïŒææ¬æäœïŒ")
print(" â¢ èŠæ±å¿«é â çš GPT-4ïŒé床æå¿«ïŒ")
print(" â¢ å€ LLM æ¯æ â çš LangGraphïŒé掻åæïŒ")
Cell 9ïŒæ¡æ¶å°æ¯
print("\nð æ¶æ§å°æ¯ïŒLangChain vs LangGraph")
print("\n" + "="*80)
comparison = {
"æ¹é¢": [
"ä»£ç¢Œè¡æžïŒç°¡å®æµçšïŒ",
"ä»£ç¢Œè¡æžïŒè€éæµçšïŒ",
"çæ
管ç",
"䞊è¡å·è¡",
"ææŒæž¬è©Š",
"æ°äººäžæ",
"é©çšå Žæ¯"
],
"LangChain": [
"~40 è¡",
"80+ è¡ïŒè€éïŒ",
"æåïŒstate æ£äºïŒ",
"極å
¶å°é£",
"ââïŒäžçïŒ",
"1-2 倩",
"ç°¡å®æçšãå¿«éåå"
],
"LangGraph": [
"~25 è¡",
"22 è¡ïŒç°¡æœïŒ",
"èªåïŒState TypedDictïŒ",
"âââââ å€©çæ¯æ",
"âââââïŒåªç§ïŒ",
"3-5 倩ïŒé¡å³äœæåå ±ïŒ",
"è€éå·¥äœæµãå€ Agent"
]
}
df_comparison = pd.DataFrame(comparison)
print(df_comparison.to_string(index=False))
print("="*80)
print("\nð¯ äœæéžæïŒ")
print("\nâ
éž LangChain ç¶ïŒ")
print(" ⢠æéç·åŒµïŒ< 2 åšïŒ")
print(" ⢠æçšç°¡å®ïŒ< 3 å AgentïŒ")
print(" ⢠快éåå")
print("\nâ
éž LangGraph ç¶ïŒ")
print(" ⢠è€éå·¥äœæµïŒ3+ AgentïŒ")
print(" ⢠æäžŠè¡é茯")
print(" ⢠éèŠå€ LLM æ¯æ")
print(" â¢ é·æç¶è·åæŽå±")
print(" ⢠åéèŠæš¡ > 3 人")
Cell 10ïŒæçµçžœçµ
print("\n" + "ð¯ "*40)
print("\nð äœ ç寊é©çžœçµïŒ")
print("\n" + "="*80)
if execution_times:
print(f"\nâ
已枬詊 {len(llms)} å LLM")
fastest = min(execution_times, key=execution_times.get)
slowest = max(execution_times, key=execution_times.get)
print(f" ⢠æå¿«ïŒ{fastest} ({execution_times[fastest]:.2f}s)")
print(f" ⢠ææ
¢ïŒ{slowest} ({execution_times[slowest]:.2f}s)")
print(f" ⢠平åïŒ{sum(execution_times.values())/len(execution_times):.2f}s")
print(f"\nâ
æ¡æ¶å°æ¯çµè«ïŒ")
print(f" LangChain: é©åç°¡å®æçšãå¿«éåå")
print(f" LangGraph: é©åè€éå·¥äœæµãå€ Agentãå€ LLM")
print(f"\nâ
å€ LLM åæç奜èïŒ")
print(f" â¢ ææ¬åªåïŒåäžå¥ä»£ç¢ŒïŒæ ¹æä»»åéž LLM")
print(f" â¢ äŸæåå仜ïŒäžå LLM æ
éïŒèªååæ")
print(f" ⢠åžå Žé©æïŒæ° LLM åºçŸïŒå¿«ééæ")
print(f"\nâ
絊å人å
¬åžç建è°ïŒ")
print(f" Year 1: çš Claude SDKïŒå€åé
ç®ïŒçŸéæµåªå
ïŒ")
print(f" Year 2: è©äŒ° LangGraphïŒåžç¿æå
¥ïŒè€éé
ç®ææ¶çïŒ")
print(f" Year 3: æçºå°å®¶ïŒå€ LLM æ¯æïŒç«¶çåªå¢ïŒ")
print("\n" + "="*80)
print(f"\nð äžäžæ¥è¡åïŒ")
print(f" 1. æ ¹æäœ ç POC æŸå°å
·é«ç TAïŒç®æšå®¢æ¶ïŒ")
print(f" 2. é©èåžå Žéæ±ïŒbeta çšæ¶åé¥ïŒ")
print(f" 3. æ±ºå®æ¯åŠæè³ LangGraph åžç¿")
print(f" 4. èæ
®å€ LLM æ¯æïŒåŠæå®¢æ¶æéæ±ïŒ")
print(f"\n" + "ð¯ "*40)
å¿«ééå§æå
ð¯ 5 åéå¿«ééå§
# 1. å®è£äŸè³Ž
pip install jupyter notebook
# 2. åµå»º .env æä»¶
cat > .env << EOF
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx
OPENAI_API_KEY=sk-xxxxxxxxxxxx
GOOGLE_API_KEY=xxxxxxxxxxxx
EOF
# 3. åµå»º Jupyter Notebook
jupyter notebook
# 4. åš Notebook äžç²è²Œäžé¢ç代碌
# 5. äŸæ¬¡å·è¡ Cells
ð API Keys ç²å
ð Notebook å·è¡é åº
1. â Cell 1ïŒå®è£äŸè³Ž 2. â Cell 2ïŒé 眮 API Keys 3. â Cell 3ïŒåå§å LLM 4. â Cell 4-5ïŒå°æ¯æž¬è©Š 5. â Cell 6ïŒè³ªéåæ 6. â Cell 7ïŒLangGraph æŒç€º 7. â Cell 8ïŒææ¬å°æ¯ 8. â Cell 9ïŒæ¡æ¶å°æ¯ 9. â Cell 10ïŒçžœçµ
æçµæ±ºçæ¡æ¶
äžäœäžé«ïŒèé à 顧å à PM
äœ åææ¯äžå身仜ïŒåªå
çŽæ ¹ææ
æ³è®åïŒ
æ
æ³ 1ïŒçŸéæµç·åŒµïŒ< 1 æïŒ
åªå
çŽïŒèé > PM > é¡§å
決çïŒå¿«éè³ºé¢æéèŠ
ââ çš Claude SDKïŒå¿«ïŒ
ââ å€åå°é
ç®
ââ äžåžæ°æ¡æ¶
æ
æ³ 2ïŒç©©å®çŸéæµïŒ3+ æïŒ
åªå
çŽïŒé¡§å > PM > èé
決çïŒçµŠå®¢æ¶å¥œæ¹æ¡ïŒå»ºç«åç
ââ è©äŒ° LangGraphïŒè€éé
ç®ïŒ
ââ æé«æå質é
ââ 鷿客æ¶éä¿
æ
æ³ 3ïŒè€éé
ç® + é ç®å
è¶³
åªå
çŽïŒPM > é¡§å > èé
決çïŒäº€ä»æåæéèŠ
ââ çš LangGraphïŒç®¡çè€é床ïŒ
ââ æåæèšèšæé
ââ éäœé¢šéª
å¿«éæ±ºçç©é£
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â äœ æè©²éžåªåæ¡æ¶ïŒ â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
1. é
ç®è€é床ïŒ
ââ ç°¡å®ïŒ1-2 AgentïŒâ ç Q3
ââ äžçïŒ3-5 AgentïŒâ ç Q3
ââ è€éïŒ5+ Agent æäžŠè¡ïŒâ LangGraph â
2. å€ LLM éæ±ïŒ
ââ äžéèŠ â çšå®æ¹ SDK
ââ éèŠ â å LangGraph
3. æéç·ïŒ
ââ < 2 åš â Claude SDKïŒå¿«ïŒ
ââ 2-4 åš â LangChainïŒå¹³è¡¡ïŒ
ââ > 1 æ â LangGraphïŒå質åªå
ïŒ
4. åéèŠæš¡ïŒ
ââ 1-2 人 â Claude SDKïŒç°¡å®ïŒ
ââ 3-5 人 â LangGraphïŒæšæºåïŒ
ââ 10+ 人 â LangGraphïŒå¯è€çšïŒ
5. é·æèŠåïŒ
ââ 1 åé
ç® â Claude SDKïŒäžåŒåŸåžïŒ
ââ 2-3 å â èæ
® LangGraph
ââ 5+ å â å¿
é LangGraphïŒROI é«ïŒ
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ£
æçµå»ºè°ïŒ
â
çš Claude SDK çæ¢ä»¶ïŒ
â¢ ç°¡å®æçšïŒ< 3 AgentïŒ
⢠æéç·åŒµïŒ< 2 åšïŒ
⢠åéå°ïŒ1-2 人ïŒ
⢠çæé
ç®ïŒ< 1 åé
ç®èŠåïŒ
â
çš LangChain çæ¢ä»¶ïŒ
⢠快éåå
â¢ ç°¡å®æçš
â¢ æ³æ¯æå€ LLMïŒäœå·¥äœæµç°¡å®ïŒ
â¢ åæ¡éæŽ»æ§
â
çš LangGraph çæ¢ä»¶ïŒ
⢠è€éå·¥äœæµïŒ> 3 AgentïŒ
⢠䞊è¡å·è¡æåæ¯é茯
â¢ å€ LLM æ¯æ
â¢ é·æé
ç®èŠåïŒ3+ åïŒ
⢠åé > 3 人
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
æ žå¿çµè«
1. æ¡æ¶éžæäžæ¯æè¡åé¡ïŒæ¯åæ¥åé¡
â æä»è²»å®¢æ¶ïŒæè€éé
ç®ïŒæé·æèŠåïŒ
â éäºéœæ²æïŒå
é©èåžå Ž
2. LangGraph çå¹åŒåšæŒãé·æã
⢠第 1 åé
ç®ïŒLangGraph å¯èœæ
¢
⢠第 3 åé
ç®ïŒLangGraph å¿« 50%
⢠第 5 åé
ç®ïŒLangGraph å¿« 70%
3. å€ LLM äžæ¯çºäºçé¢ïŒèæ¯çºäºèªç±
â¢ äŸæåå仜ïŒå¯çšæ§ïŒ
â¢ ææ¬åªåïŒå¯éžïŒ
⢠åžå Žé©æïŒé·æïŒ
4. POC éæ®µæéèŠçæ¯åžå Žé©èïŒäžæ¯æè¡éžæ
⢠1 åšåžå Žåé¥ > 2 åšå®çŸä»£ç¢Œ
⢠TA 決å®äžå
â¢ æ¡æ¶æ¯åŸè©±
5. å人å
¬åžçåºè·¯æ¯ãåçŽæ·±åãïŒäžæ¯ãæè¡ç§èèã
⢠æåé åçå°å®¶ > å
šèœæè¡äºº
⢠$10k-20k çåçŽé
ç® > $2k-5k çéçšé
ç®
⢠åè³ªæº¢å¹ > æè¡å
鲿§
åŸèš
**çµŠäœ çæåŸè©±**ïŒ
äœ å·²ç¶ææ¡äº Claude Agent SDKïŒé絊äºäœ ç¬¬äžæ¥çåªå¢ãçŸåšçåé¡äžæ¯ãéžåªåæ¡æ¶ãïŒèæ¯ãéžåªååžå Žãã
LangChain/LangGraph æ¯åšäœ 確å®åžå Žå客æ¶åŸïŒçºäºãé·æåªåãçéžæãäžæ¯ãå é²ãïŒèæ¯ãå寊ãã
çŸåšå°±åºå»æŸ TAïŒå¿«éé©èæ³æ³ã3 åæåŸïŒç¶äœ æ 3-5 åæž æ°ç客æ¶éæ±æïŒååéé äŸèæ ®æè¡éžæã飿åçæ±ºçæåºæŒçå¯ŠæžæïŒèäžæ¯åèšã
åæïŒå¯«å¥œäœ çå客ããClaude Agent SDK æ·±åºŠå¯Šèžæåãææçºäœ çåçãæªäŸçãLangGraph å€ LLM æ¶æ§æåãææ¯è£å ã
ç«¶çåäžäŸèªãææ°æè¡ãïŒèäŸèªã解決ç寊åé¡ç深床ãã
**æ°å¯«æé**ïŒ2026-03-17 **çæ¬**ïŒ1.0 **å å«**ïŒå®æŽåæ + Jupyter Notebook + æ±ºçæ¡æ¶
**å æ²¹ïŒð**
çŒäœçèš