Skip to content

Commit dcfddd7

Browse files
author
arkin-dev
committed
feat(langgraph-multi-agent): 增加本地化监控方案对比
- 新增LangFuse本地化监控方案(开源、可自托管) - 新增Phoenix监控工具(简单、本地运行) - 完善监控方法对比表格,增加部署方式、数据安全对比 - 明确LangSmith为云端服务,无免费本地化版本 - 提供针对不同场景的监控方案推荐
1 parent a53d20b commit dcfddd7

File tree

1 file changed

+157
-23
lines changed

1 file changed

+157
-23
lines changed

langgraph-multi-agent/langgraph-multi-agent.ipynb

Lines changed: 157 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -390,9 +390,11 @@
390390
"cell_type": "markdown",
391391
"metadata": {},
392392
"source": [
393-
"### 方法4: 使用 LangSmith 平台(生产环境推荐)\n",
393+
"### 方法4: 云端监控平台\n",
394394
"\n",
395-
"LangSmith 是 LangChain 官方的监控和调试平台,提供可视化界面。\n",
395+
"#### 4.1 LangSmith(官方云端平台)\n",
396+
"\n",
397+
"LangSmith 是 LangChain 官方的监控和调试平台,**仅提供云端服务**。\n",
396398
"\n",
397399
"```python\n",
398400
"# 1. 安装 LangSmith\n",
@@ -418,7 +420,101 @@
418420
"**获取 API Key:**\n",
419421
"1. 访问 [https://smith.langchain.com/](https://smith.langchain.com/)\n",
420422
"2. 注册账号\n",
421-
"3. 在设置中创建 API Key\n"
423+
"3. 在设置中创建 API Key\n",
424+
"\n",
425+
"**⚠️ 注意:**\n",
426+
"- ❌ LangSmith **没有免费的本地化版本**\n",
427+
"- 💰 企业版提供自托管选项(需要联系销售)\n",
428+
"- ☁️ 数据会上传到云端\n",
429+
"\n",
430+
"---\n",
431+
"\n",
432+
"#### 4.2 LangFuse(开源本地化替代方案)⭐\n",
433+
"\n",
434+
"**LangFuse** 是一个开源的 LLM 监控平台,可以**完全本地部署**!\n",
435+
"\n",
436+
"**安装和使用:**\n",
437+
"\n",
438+
"```python\n",
439+
"# 1. 使用 Docker 本地部署 LangFuse\n",
440+
"# docker run -d --name langfuse \\\n",
441+
"# -p 3000:3000 \\\n",
442+
"# -e DATABASE_URL=\"postgresql://...\" \\\n",
443+
"# langfuse/langfuse:latest\n",
444+
"\n",
445+
"# 2. 安装 Python SDK\n",
446+
"# pip install langfuse\n",
447+
"\n",
448+
"# 3. 配置\n",
449+
"from langfuse import Langfuse\n",
450+
"\n",
451+
"langfuse = Langfuse(\n",
452+
" public_key=\"your-public-key\",\n",
453+
" secret_key=\"your-secret-key\",\n",
454+
" host=\"http://localhost:3000\" # 本地部署地址\n",
455+
")\n",
456+
"\n",
457+
"# 4. 集成到 LangChain\n",
458+
"from langfuse.callback import CallbackHandler\n",
459+
"\n",
460+
"handler = CallbackHandler(\n",
461+
" public_key=\"your-public-key\",\n",
462+
" secret_key=\"your-secret-key\",\n",
463+
" host=\"http://localhost:3000\"\n",
464+
")\n",
465+
"\n",
466+
"# 在 LLM 调用时使用\n",
467+
"llm = ChatOpenAI(..., callbacks=[handler])\n",
468+
"```\n",
469+
"\n",
470+
"**LangFuse 功能:**\n",
471+
"- ✅ **完全开源**,可自托管\n",
472+
"- 🏠 **本地部署**,数据不出本地\n",
473+
"- 📊 **可视化界面**:类似 LangSmith\n",
474+
"- 💰 **成本追踪**:Token 和费用统计\n",
475+
"- 🔍 **Trace 查看**:详细的执行轨迹\n",
476+
"- 👥 **团队协作**:多用户支持\n",
477+
"- 📈 **性能分析**:延迟、成本分析\n",
478+
"\n",
479+
"**部署方式:**\n",
480+
"1. **Docker Compose**(推荐)\n",
481+
"2. **Kubernetes**\n",
482+
"3. **Vercel/Railway**(云端部署)\n",
483+
"\n",
484+
"**官网:** [https://langfuse.com/](https://langfuse.com/)\n",
485+
"\n",
486+
"---\n",
487+
"\n",
488+
"#### 4.3 Phoenix(Arize AI 开源工具)\n",
489+
"\n",
490+
"**Phoenix** 是另一个强大的开源 LLM 监控工具。\n",
491+
"\n",
492+
"```python\n",
493+
"# 1. 安装\n",
494+
"# pip install arize-phoenix\n",
495+
"\n",
496+
"# 2. 启动本地服务器\n",
497+
"import phoenix as px\n",
498+
"px.launch_app() # 自动打开 http://localhost:6006\n",
499+
"\n",
500+
"# 3. 集成到 LangChain\n",
501+
"from phoenix.trace.langchain import LangChainInstrumentor\n",
502+
"\n",
503+
"LangChainInstrumentor().instrument()\n",
504+
"\n",
505+
"# 4. 正常使用 LangChain,自动追踪\n",
506+
"llm = ChatOpenAI(...)\n",
507+
"result = llm.invoke(\"Hello\")\n",
508+
"```\n",
509+
"\n",
510+
"**Phoenix 特点:**\n",
511+
"- ✅ 完全开源、本地运行\n",
512+
"- 🚀 启动简单,一行代码\n",
513+
"- 📊 实时监控 UI\n",
514+
"- 🔍 详细的 Trace 可视化\n",
515+
"- 📈 性能指标分析\n",
516+
"\n",
517+
"**官网:** [https://phoenix.arize.com/](https://phoenix.arize.com/)\n"
422518
]
423519
},
424520
{
@@ -558,39 +654,77 @@
558654
"cell_type": "markdown",
559655
"metadata": {},
560656
"source": [
561-
"### 📊 监控方法对比\n",
657+
"### 📊 监控方法全面对比\n",
658+
"\n",
659+
"#### 基础监控方法\n",
660+
"\n",
661+
"| 方法 | 部署方式 | 优点 | 缺点 | 适用场景 |\n",
662+
"|------|----------|------|------|----------|\n",
663+
"| **Agent内打印** | 无需部署 | 简单直接、立即可用 | 代码侵入性强 | 快速调试 |\n",
664+
"| **Stream模式** | 无需部署 | 实时、无侵入、清晰 | 只能看状态变化 | 开发调试 |\n",
665+
"| **自定义回调** | 无需部署 | 灵活、可定制 | 需编写回调类 | 复杂监控 |\n",
562666
"\n",
563-
"| 方法 | 优点 | 缺点 | 适用场景 |\n",
564-
"|------|------|------|----------|\n",
565-
"| **Agent 内打印** | 简单直接 | 代码侵入性强 | 快速调试 |\n",
566-
"| **Stream 模式** | 实时、无侵入 | 只能看到状态变化 | 开发调试 |\n",
567-
"| **自定义回调** | 灵活、详细 | 需要编写回调类 | 复杂监控需求 |\n",
568-
"| **LangSmith** | 可视化、功能强大 | 需要注册账号 | 生产环境 |\n",
569-
"| **组合方案** | 全面监控 | 输出较多 | 深度调试 |\n",
667+
"#### 平台监控方案\n",
668+
"\n",
669+
"| 方案 | 部署方式 | 数据存储 | 是否开源 | 成本 | 功能 |\n",
670+
"|------|----------|----------|----------|------|------|\n",
671+
"| **LangSmith** | ☁️ 云端 | 云端(美国) | ❌ 闭源 | 💰 付费 | ⭐⭐⭐⭐⭐ 最强 |\n",
672+
"| **LangFuse** | 🏠 本地/云端 | 可选 | ✅ 开源 | 🆓 免费 | ⭐⭐⭐⭐ 强大 |\n",
673+
"| **Phoenix** | 🏠 本地 | 本地 | ✅ 开源 | 🆓 免费 | ⭐⭐⭐ 实用 |\n",
674+
"\n",
675+
"#### 🔐 数据安全对比\n",
676+
"\n",
677+
"| 方案 | 数据隐私 | 适合场景 | 推荐指数 |\n",
678+
"|------|----------|----------|----------|\n",
679+
"| **LangSmith** | ⚠️ 数据上云 | 可接受云存储的企业 | ⭐⭐⭐ |\n",
680+
"| **LangFuse** | ✅ 可完全本地 | 数据敏感、金融、医疗 | ⭐⭐⭐⭐⭐ |\n",
681+
"| **Phoenix** | ✅ 完全本地 | 本地开发、快速调试 | ⭐⭐⭐⭐ |\n",
682+
"| **自定义方案** | ✅ 完全控制 | 极度敏感数据 | ⭐⭐⭐ |\n",
570683
"\n",
571684
"### 💡 推荐方案\n",
572685
"\n",
573-
"**开发阶段:**\n",
686+
"#### 📍 根据场景选择\n",
687+
"\n",
688+
"**1. 本地开发/调试(推荐 Phoenix):**\n",
574689
"```python\n",
575-
"# 组合使用 print + stream\n",
576-
"for step in app.stream(state):\n",
577-
" print(f\"节点: {list(step.keys())[0]}\")\n",
578-
" print(f\"状态: {step}\")\n",
690+
"# 最简单,一行启动\n",
691+
"import phoenix as px\n",
692+
"px.launch_app() # 自动打开监控界面\n",
693+
"\n",
694+
"from phoenix.trace.langchain import LangChainInstrumentor\n",
695+
"LangChainInstrumentor().instrument()\n",
579696
"```\n",
580697
"\n",
581-
"**生产环境:**\n",
698+
"**2. 数据敏感/内网环境(推荐 LangFuse):**\n",
582699
"```python\n",
583-
"# 启用 LangSmith\n",
700+
"# 本地部署,功能强大\n",
701+
"# docker-compose up -d\n",
702+
"\n",
703+
"from langfuse.callback import CallbackHandler\n",
704+
"handler = CallbackHandler(host=\"http://localhost:3000\")\n",
705+
"llm = ChatOpenAI(..., callbacks=[handler])\n",
706+
"```\n",
707+
"\n",
708+
"**3. 云端企业场景(LangSmith):**\n",
709+
"```python\n",
710+
"# 最强功能,无需部署\n",
584711
"os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
585712
"os.environ[\"LANGCHAIN_API_KEY\"] = \"your-key\"\n",
586713
"```\n",
587714
"\n",
588-
"**深度调试:**\n",
715+
"**4. 快速调试(Stream模式):**\n",
589716
"```python\n",
590-
"# 自定义回调 + 详细日志\n",
591-
"callback = DetailedCallbackHandler()\n",
592-
"llm = ChatOpenAI(..., callbacks=[callback])\n",
593-
"```\n"
717+
"# 无需任何部署\n",
718+
"for step in app.stream(state):\n",
719+
" print(f\"节点: {list(step.keys())[0]}\")\n",
720+
" print(f\"状态: {step}\")\n",
721+
"```\n",
722+
"\n",
723+
"### 🏆 最终推荐\n",
724+
"\n",
725+
"- 🥇 **最佳本地化方案**:**LangFuse**(功能最全、开源、可自托管)\n",
726+
"- 🥈 **最简单本地方案**:**Phoenix**(一行启动、适合开发)\n",
727+
"- 🥉 **企业云端方案**:**LangSmith**(功能最强、官方支持)\n"
594728
]
595729
},
596730
{

0 commit comments

Comments
 (0)