掘金 人工智能 前天 11:34
LangGraph + MCP + Ollama:构建强大代理 AI 的关键(一)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文提供了一个快速教程,教你如何利用LangGraph、MCP和Ollama构建多代理聊天机器人,适用于业务或个人用途。文章对比了MCP与函数调用的区别,强调了MCP的灵活性和可扩展性。教程通过一个实时聊天机器人的演示,展示了代理如何处理输入、调用工具和管理对话状态。文章还介绍了何时选择函数调用或MCP,并提供了创建MCP应用程序的步骤,包括安装必要的库和导入相关模块。最后,文章展望了后续的代码细节讲解。

🤖 MCP(Message Communication Protocol)是一种开放协议,用于标准化应用程序向LLM提供上下文的方式。它允许AI代理在工具箱中翻找、组合工具,处理更多任务,并具有更强的自主性,与函数调用相比,MCP提供了更高的灵活性和可扩展性。

💡 函数调用适用于处理少量定义明确的操作或查询,尤其是单步操作且需要高度结构化输出的情况。MCP则更适合需要更高灵活性、多功能工具或跨交互演进的上下文的应用,例如作为跨内部系统的通用助手,并能调用多个数据源。

🛠️ 教程演示了一个实时聊天机器人,展示了代理如何通过create_chatbot函数处理用户输入,该函数将系统指令、用户消息和工具执行集成到流畅的交互过程中。它会根据查询决定使用哪个工具,例如Google搜索或python_repl。

📚 构建MCP应用程序的步骤包括安装依赖库,如langchain_mcp_adapters、MCP、googlesearch-python等。文章还介绍了agent.py、main.py、nodes.py和server.py等关键文件的作用,为读者提供了代码实现的框架。

在本文中,我们将通过一个超级快速的教程向你展示如何使用 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

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

agent.py

from langchain_core.messages import AIMessage, ToolMessage, HumanMessagefrom langgraph.graph import StateGraph, START, END, MessagesStatefrom nodes import create_chatbotimport asyncioimport osimport dotenvfrom langchain_mcp_adapters.client import MultiServerMCPClient

main.py

import streamlit as stimport asynciofrom agent import create_agentfrom langchain_core.messages import HumanMessage

nodes.py

from server import get_toolsfrom langgraph.graph import MessagesStatefrom langchain_openai import ChatOpenAIfrom langchain_ollama import ChatOllamafrom langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplatefrom datetime import datetimeimport os

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

from mcp.server.fastmcp import FastMCPfrom langchain_experimental.utilities import PythonREPLimport ioimport base64import matplotlib.pyplot as pltfrom openai import OpenAIfrom pydantic import BaseModel, Fieldimport osfrom dotenv import load_dotenvimport asynciofrom googlesearch import search  

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangGraph MCP Ollama 聊天机器人
相关文章