LangGraph + MCP + Ollama:构建强大代理 AI 的关键(一)

在本文中,我们将通过一个超级快速的教程向你展示如何使用 LangGraph、MCP 和 Ollama 创建多代理聊天机器人,为你的业务或个人用途构建强大的代理聊天机器人。

"在 MCP 出现之前,开发者必须编写代码并通过 API 将 AI 工具连接到外部系统,这意味着每个集成都需要预先编程。" 约翰・拉什(John Rush)说。

尽管 MCP 于去年发布,但最近突然流行起来,这也引发了关于其 "流行期" 能持续多久的讨论。LangChain 还在 X 上发起了一项投票:

结果显示,40.8% 的人认为 MCP 是未来的标准,25.8% 的人认为 MCP 只是昙花一现,其余 33.4% 选择观望。

MCP 仍然很新(于 2024 年 11 月发布),但它已经支持 GitHub、Slack 和 PostgreSQL 等多种服务。由于它是一个开放标准,令人惊讶的是,它可以与任何 LLM(Claude、OpenAI、Gemini 等)一起使用。

那么,让我们通过一个实时聊天机器人的快速演示来解释意思。 我会问聊天机器人两个不同的问题:第一个是 "你能写一篇关于最新 LLM 的报告吗?" 你也可以随意问任何想问的问题。 如果观察聊天机器人如何生成输出,你会看到代理使用其结构化流程(由create_chatbot函数驱动)来处理输入。该函数将系统指令、用户消息和工具执行集成到一个流畅的交互过程中,然后根据查询决定使用哪个工具。 它将调用 Google 搜索工具来搜索最新信息并生成报告。对于第二个问题 "编写一个使用 Seaborn 创建带回归线的散点图的 Python 脚本",聊天机器人会处理请求并将其路由到适当的工具,例如根据查询结构选择python_repldata_visualizationasync_tool_executor会动态处理工具调用,确保同步和异步函数(如生成代码或可视化)都能正确执行。 在整个过程中,聊天机器人的StateGraph会管理对话状态,因此它可以针对后续问题提供准确且上下文感知的响应。get_tools函数确保仅提供可用的功能工具,维持系统稳定性。main函数则保证所有环节顺利运行,实时处理用户输入、调用正确工具并处理输出。

因此,在本文结束时,你将理解 MCP 与函数调用(Function Call)的区别、何时使用函数调用和 MCP,以及如何使用 LangGraph、MCP 和开源工具创建强大的代理聊天机器人。

MCP 与函数调用(Function Call)的区别是什么?

在函数调用中,AI 就像一个严格按照脚本操作的熟练工人 ------ 它可以填写表单、调用预定义工具,但只能使用已获取的工具,且需逐个调用。而在 MCP 中,AI 更像是一个配备工具包的代理:它可以在工具箱中翻找(发现新工具)、组合工具、处理更多任务,并且拥有更强的自主性。

函数调用与模型的提示词紧密耦合,需要开发者管理调用顺序,这使其具有高度可控性,但在一定程度上缺乏灵活性。而MCP 通过开放协议实现松耦合,这使其具有高度灵活性和可扩展性,但需要强大的设计来管理复杂性(并确保安全性)。下一节将深入探讨如何使用 MCP 构建代理,以及如何应对这种灵活性带来的挑战。

何时使用函数调用和 MCP?

选择函数调用还是 MCP 取决于具体用例。

使用函数调用的场景:

当你需要处理少量定义明确的操作或查询时,尤其是当这些操作是单步操作且需要高度结构化的输出时。

它非常适合可预测的任务和轻量级集成 ------ 如果 MCP 带来的额外开销可能显得多余,那么当结构化的窄任务和与应用的集成便捷性至关重要时,选择函数调用。

使用 MCP 的场景:

当你需要更高的灵活性、多功能工具或跨交互演进的上下文时。如果 AI 代理需要作为跨内部系统的通用助手,并能调用多个数据源,MCP 更适合复杂的多步骤工作流,或当 AI 必须维护长期上下文并与各种系统交互时。

需要注意的是,这两种方法并非互斥 ------ 它们可以互补。例如,函数调用可以在 MCP 客户端内部使用,以处理模型的结构化输出。

从概念上讲,函数调用旨在以可控方式将自然语言转换为函数执行,而 MCP 旨在为 AI 提供更广泛的接口,使其能够在环境中探索和操作。

让我们开始编程

现在让我们逐步探索,揭开如何创建 MCP 应用程序的答案。我们将安装支持模型的库,为此需要执行 pip 安装依赖:

复制代码
pip install -r requirements.txt

接下来是常规步骤:导入相关库,其重要性将在后续步骤中体现:

  • langchain_mcp_adapters:将 MCP 工具转换为 LangChain 工具,供 LangGraph 代理使用,并提供客户端实现,允许用户连接到多个 MCP 服务器并加载工具。

  • MCP:MCP 是一种开放协议,用于标准化应用程序向 LLM 提供上下文的方式。

  • googlesearch-python:用于简化 Google 搜索的包。

agent.py

javascript 复制代码
from langchain_core.messages import AIMessage, ToolMessage, HumanMessage
from langgraph.graph import StateGraph, START, END, MessagesState
from nodes import create_chatbot
import asyncio
import os
import dotenv
from langchain_mcp_adapters.client import MultiServerMCPClient

main.py

javascript 复制代码
import streamlit as st
import asyncio
from agent import create_agent
from langchain_core.messages import HumanMessage

nodes.py

javascript 复制代码
from server import get_tools
from langgraph.graph import MessagesState
from langchain_openai import ChatOpenAI
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
from datetime import datetime
import os

server.py(除移除可能无法工作的 search_google 外其余未修改)

javascript 复制代码
from mcp.server.fastmcp import FastMCP
from langchain_experimental.utilities import PythonREPL
import io
import base64
import matplotlib.pyplot as plt
from openai import OpenAI
from pydantic import BaseModel, Field
import os
from dotenv import load_dotenv
import asyncio
from googlesearch import search  

后续将会继续讲解代码细节,欢迎持续关注!

相关推荐
xiaofeichaichai1 小时前
Webpack
前端·webpack·node.js
Thecozzy2 小时前
线上 Bug 排查与修复实录
架构
鹏大师运维2 小时前
为什么信创电脑装软件总提示“软件包架构不匹配”?
linux·运维·架构·国产化·麒麟·deb·统信uos
问心无愧05132 小时前
ctf show web入门111
android·前端·笔记
唐某人丶2 小时前
模型越来越强,我们还需要 Agent 工程吗?—— 从价值重估到 Harness 实践
前端·agent·ai编程
智码看视界2 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
JS菌2 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
excel4 小时前
HLS TS 文件损坏的元凶:Git 提交与拉取
前端
Aphasia3114 小时前
https连接传输流程
前端·面试