☰
LangChain+LangGraph+MCP+Agent企业级智能体开发实战
2026/9/25 23:32:37 网站建设 项目流程

这次我们来看一个完整的 LangChain + LangGraph + MCP + Agent 智能体企业级开发实战教程。这个教程的重点不是概念讲解,而是如何从零开始搭建可落地的智能体系统,涵盖工具链集成、多智能体编排和工作流设计等核心企业需求。

如果你关心智能体系统的实际部署、硬件资源要求、接口调用和批量任务处理,这篇文章可以直接收藏。我们将从环境准备开始,逐步完成一个支持多工具调用、具备状态管理和工作流引擎的智能体系统搭建,并验证其在企业级场景下的稳定性和扩展性。

1. 核心能力速览

能力项说明
技术栈LangChain + LangGraph + MCP + Agent
硬件需求CPU/GPU 均可,GPU 可加速大模型推理
内存要求基础环境 2-4GB,大模型加载需额外内存
部署方式Python 环境 + 依赖包管理
接口能力支持 REST API、WebSocket、流式响应
批量任务支持任务队列和并行处理
适用场景企业知识库问答、自动化流程、多工具协作

2. 适用场景与使用边界

LangChain + LangGraph + MCP + Agent 这套技术栈特别适合需要复杂决策流程和工具调用的企业级应用。比如智能客服系统需要查询知识库、调用计算工具、连接外部API;或者自动化办公流程需要多个智能体协作完成文档处理、数据分析和报告生成。

但要注意,这套系统不适合简单的单次问答场景。如果只是需要基础的文本生成或问答,直接调用大模型API更经济高效。另外,涉及敏感数据的场景要确保本地部署和权限控制,避免数据泄露风险。

在企业应用中,必须确认所有调用的外部工具和API都有合法授权,特别是涉及版权素材、商业数据和个人隐私时,需要做好数据隔离和访问审计。

3. 环境准备与前置条件

开始前需要准备以下环境:

操作系统要求

  • Windows 10/11、macOS 10.15+ 或 Linux Ubuntu 18.04+
  • 推荐使用 Linux 服务器环境以获得最佳稳定性

Python 环境

# 确认 Python 版本 python --version # 需要 Python 3.8-3.11 pip --version # 需要 pip 20.0+

CUDA 支持(可选)如果有 NVIDIA GPU,可以安装 CUDA 加速:

nvidia-smi # 查看 GPU 状态 # 需要 CUDA 11.7-12.2,具体版本依赖所选的大模型

磁盘空间

  • 基础环境:2-3GB
  • 大模型文件:5-20GB(根据模型大小)
  • 建议预留 30GB 以上空间

4. 安装部署与启动方式

4.1 创建虚拟环境

# 创建项目目录 mkdir langchain-agent-project cd langchain-agent-project # 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows venv\Scripts\activate # Linux/macOS source venv/bin/activate

4.2 安装核心依赖

# 安装 LangChain 和 LangGraph pip install langchain langgraph # 安装 MCP 相关包 pip install mcp langchain-mcp # 安装常用工具包 pip install requests beautifulsoup4 python-dotenv # 安装 Web 框架(可选,用于 API 服务) pip install fastapi uvicorn

4.3 配置环境变量

创建.env文件:

# 大模型 API 配置(选择一种) OPENAI_API_KEY=your_openai_key ANTHROPIC_API_KEY=your_anthropic_key # 或使用本地模型 LOCAL_MODEL_PATH=./models/your_model # 工具配置 SERPAPI_API_KEY=your_serpapi_key WEATHER_API_KEY=your_weather_key

4.4 基础服务启动

创建基础应用脚本app.py:

import os from dotenv import load_dotenv from langchain.agents import AgentExecutor from langgraph.graph import Graph load_dotenv() class BasicAgentSystem: def __init__(self): self.setup_model() self.setup_tools() self.setup_workflow() def setup_model(self): # 模型初始化逻辑 api_key = os.getenv("OPENAI_API_KEY") if api_key: from langchain_openai import ChatOpenAI self.llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) else: from langchain_community.llms import Ollama self.llm = Ollama(model="llama2") def setup_tools(self): # 工具初始化 self.tools = [] # 这里添加具体的工具配置 def setup_workflow(self): # 工作流配置 self.workflow = Graph() def run(self, query): # 执行逻辑 return f"Processed: {query}" if __name__ == "__main__": agent_system = BasicAgentSystem() result = agent_system.run("Hello, World!") print(result)

启动服务:

python app.py

5. 功能测试与效果验证

5.1 基础问答测试

测试智能体的基础理解能力:

def test_basic_qa(): agent = BasicAgentSystem() # 简单问答 response = agent.run("什么是 LangGraph?") print("回答:", response) # 多轮对话 response = agent.run("那它和 LangChain 有什么区别?") print("后续回答:", response)

预期结果:智能体应该能够理解问题并给出相关解释,在多轮对话中保持上下文连贯。

5.2 工具调用测试

测试 MCP 工具集成能力:

def test_tool_integration(): # 模拟计算工具调用 calculator_tool = { "name": "calculator", "description": "执行数学计算", "function": lambda x: eval(x) } agent = BasicAgentSystem() agent.tools.append(calculator_tool) response = agent.run("计算 123 * 456 的结果") print("工具调用结果:", response)

成功标准:智能体应该识别计算需求,正确调用计算工具并返回结果。

5.3 工作流测试

测试 LangGraph 工作流编排:

def test_workflow(): # 创建简单工作流:问答 → 总结 → 输出 workflow = Graph() # 定义节点 def question_node(state): return {"question": state.get("input", "")} def answer_node(state): question = state["question"] return {"answer": f"回答: {question}"} def summary_node(state): answer = state["answer"] return {"summary": f"总结: {answer[:50]}..."} # 构建工作流 workflow.add_node("question", question_node) workflow.add_node("answer", answer_node) workflow.add_node("summary", summary_node) # 设置边连接 workflow.set_entry_point("question") workflow.add_edge("question", "answer") workflow.add_edge("answer", "summary") workflow.set_finish_point("summary") # 执行工作流 app = workflow.compile() result = app.invoke({"input": "测试工作流功能"}) print("工作流结果:", result)

6. 接口 API 与批量任务

6.1 REST API 服务搭建

使用 FastAPI 创建 Web 接口:

from fastapi import FastAPI, HTTPException from pydantic import BaseModel app = FastAPI(title="LangChain Agent API") class QueryRequest(BaseModel): text: str session_id: str = None class QueryResponse(BaseModel): result: str session_id: str @app.post("/query", response_model=QueryResponse) async def process_query(request: QueryRequest): try: agent = BasicAgentSystem() result = agent.run(request.text) return QueryResponse(result=result, session_id=request.session_id or "default") except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.get("/health") async def health_check(): return {"status": "healthy", "version": "1.0.0"}

启动 API 服务:

uvicorn app:app --host 0.0.0.0 --port 8000 --reload

6.2 批量任务处理

对于需要处理大量任务的场景:

import asyncio from concurrent.futures import ThreadPoolExecutor class BatchProcessor: def __init__(self, max_workers=5): self.executor = ThreadPoolExecutor(max_workers=max_workers) def process_batch(self, queries): """处理批量查询""" with self.executor as executor: results = list(executor.map(self.process_single, queries)) return results def process_single(self, query): """处理单个查询""" agent = BasicAgentSystem() return agent.run(query) # 使用示例 batch_processor = BatchProcessor() queries = ["问题1", "问题2", "问题3"] results = batch_processor.process_batch(queries) print("批量处理结果:", results)

6.3 流式响应支持

对于需要实时响应的场景:

from sse_starlette.sse import EventSourceResponse import json @app.get("/stream") async def stream_query(query: str): async def event_generator(): agent = BasicAgentSystem() # 模拟流式输出 words = query.split() for i, word in enumerate(words): yield { "event": "message", "data": json.dumps({"token": word, "progress": f"{(i+1)/len(words)*100:.1f}%"}) } await asyncio.sleep(0.1) yield {"event": "end", "data": "complete"} return EventSourceResponse(event_generator())

7. 资源占用与性能观察

7.1 内存使用监控

import psutil import time def monitor_resources(): process = psutil.Process() def get_stats(): memory_mb = process.memory_info().rss / 1024 / 1024 cpu_percent = process.cpu_percent() return f"内存: {memory_mb:.1f}MB, CPU: {cpu_percent:.1f}%" # 测试期间监控 agent = BasicAgentSystem() start_time = time.time() print("开始监控...") for i in range(5): result = agent.run(f"测试查询 {i}") print(f"查询 {i}: {get_stats()}") time.sleep(1) elapsed = time.time() - start_time print(f"总耗时: {elapsed:.2f}秒")

7.2 性能优化建议

  1. 模型选择:根据任务复杂度选择合适模型,简单任务用小模型
  2. 缓存策略:对重复查询结果进行缓存
  3. 连接池:数据库和API连接使用连接池
  4. 异步处理:I/O密集型操作使用异步模式
  5. 内存管理:及时释放不再使用的大对象

7.3 并发处理测试

import threading def stress_test(): agent = BasicAgentSystem() results = [] lock = threading.Lock() def worker(query_id): try: result = agent.run(f"压力测试查询 {query_id}") with lock: results.append((query_id, result)) except Exception as e: print(f"查询 {query_id} 失败: {e}") # 启动多个线程 threads = [] for i in range(10): t = threading.Thread(target=worker, args=(i,)) threads.append(t) t.start() for t in threads: t.join() print(f"完成 {len(results)}/{10} 个查询")

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
导入 LangChain 失败版本冲突或未安装检查 pip list 和错误信息重新安装指定版本
API 密钥错误环境变量未设置或错误检查 .env 文件和 os.getenv()确认密钥正确性
内存不足模型太大或批量任务过多监控内存使用情况减小批量大小或使用小模型
响应超时网络问题或模型处理慢检查超时设置和网络连接增加超时时间或优化查询
工具调用失败工具配置错误或API限制检查工具配置和API状态验证工具可用性和权限

8.1 依赖版本冲突解决

常见的版本兼容问题:

# 检查当前版本 pip list | grep -E "(langchain|langgraph|mcp)" # 安装兼容版本组合 pip install langchain==0.1.0 langgraph==0.0.40 langchain-mcp==0.1.0 # 或者使用最新稳定版 pip install -U langchain langgraph langchain-mcp

8.2 模型连接问题排查

def test_model_connection(): """测试模型连接状态""" try: from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) response = llm.invoke("测试连接") print("模型连接正常") return True except Exception as e: print(f"模型连接失败: {e}") return False

9. 最佳实践与使用建议

9.1 项目结构规范

project/ ├── src/ # 源代码 │ ├── agents/ # 智能体定义 │ ├── tools/ # 工具实现 │ ├── workflows/ # 工作流配置 │ └── utils/ # 工具函数 ├── tests/ # 测试代码 ├── config/ # 配置文件 ├── models/ # 本地模型文件 ├── logs/ # 日志文件 └── requirements.txt # 依赖列表

9.2 错误处理与日志记录

import logging from functools import wraps # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('agent_system.log'), logging.StreamHandler() ] ) def error_handler(func): @wraps(func) def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: logging.error(f"函数 {func.__name__} 执行失败: {e}") raise return wrapper @error_handler def safe_agent_run(query): agent = BasicAgentSystem() return agent.run(query)

9.3 安全与权限控制

from functools import lru_cache import hashlib class SecurityManager: def __init__(self): self.allowed_domains = ["example.com", "api.example.com"] def validate_input(self, text): """输入验证""" if len(text) > 1000: raise ValueError("输入文本过长") # 添加更多安全检查 return True @lru_cache(maxsize=1000) def get_user_permissions(self, user_id): """获取用户权限(带缓存)""" # 实现权限检查逻辑 return ["basic_query", "tool_usage"]

10. 企业级部署方案

10.1 Docker 容器化部署

创建Dockerfile:

FROM python:3.11-slim WORKDIR /app # 复制依赖文件 COPY requirements.txt . RUN pip install -r requirements.txt # 复制源代码 COPY src/ ./src/ COPY config/ ./config/ # 设置环境变量 ENV PYTHONPATH=/app/src # 启动命令 CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]

构建和运行:

docker build -t langchain-agent . docker run -p 8000:8000 langchain-agent

10.2 Kubernetes 部署配置

创建deployment.yaml:

apiVersion: apps/v1 kind: Deployment metadata: name: langchain-agent spec: replicas: 3 selector: matchLabels: app: langchain-agent template: metadata: labels: app: langchain-agent spec: containers: - name: agent image: langchain-agent:latest ports: - containerPort: 8000 resources: requests: memory: "2Gi" cpu: "500m" limits: memory: "4Gi" cpu: "1000m"

10.3 监控与告警

集成 Prometheus 监控:

from prometheus_client import Counter, Histogram, generate_latest from fastapi import Response # 定义指标 REQUEST_COUNT = Counter('requests_total', 'Total requests') REQUEST_DURATION = Histogram('request_duration_seconds', 'Request duration') @app.middleware("http") async def monitor_requests(request, call_next): start_time = time.time() REQUEST_COUNT.inc() response = await call_next(request) duration = time.time() - start_time REQUEST_DURATION.observe(duration) return response @app.get("/metrics") async def metrics(): return Response(generate_latest(), media_type="text/plain")

这个 LangChain + LangGraph + MCP + Agent 智能体系统搭建完成后,最值得先验证的是工具调用和工作流编排功能。建议从简单的计算工具和问答流程开始测试,逐步增加复杂度和并发量。最容易遇到的问题通常是依赖版本冲突和模型连接超时,按照文中的排查方法基本都能解决。

在实际企业部署时,重点关注权限控制、性能监控和错误处理机制。这套系统一旦稳定运行,可以显著提升自动化处理能力和决策效率。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询