对话AI集成工具

一个集成Workato的MCP服务器与LangChain的对话AI聊天机器人,支持自然语言交互访问Workato数据和工具。

  • by yeowkang
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 yeowkang/mcp-langchain-chatbot

使用说明

MCP LangChain聊天机器人

一个对话式AI聊天机器人,将Workato的模型上下文协议(MCP)服务器与LangChain集成在一起,实现了与Workato数据和工具的自然语言交互。

项目概述

该项目创建了一个智能聊天机器人,可以与Workato的MCP服务器交互,查询客户数据、检索配方详细信息、访问帐户信息并执行数据分析。聊天机器人使用LangChain进行代理编排,使用OpenAI的GPT模型进行自然语言理解。

文件结构和描述

main.py

目的: 主要入口点和应用程序编排器

责任:

  • 启动时验证配置
  • 初始化MCP客户端连接
  • 加载可用的MCP工具
  • 创建和管理聊天代理
  • 处理主对话循环(用户输入/输出)
  • 通过用户友好的消息提供错误处理
  • 显示欢迎消息并处理优雅关机

主要功能:

  • main():编排整个应用程序流
  • print_welcome():显示启动信息
  • handle_error():提供上下文错误消息

config.py

目的: 集中式配置管理

责任:

  • 从加载环境变量 .env 文件使用 python-dotenv
  • 定义所有应用程序设置(API密钥、服务器URL、LLM参数)
  • 包含指导代理行为的系统提示
  • 验证是否存在所需的配置值

关键配置:

  • API密钥(OpenAI、Workato MCP)
  • MCP服务器URL
  • LLM型号设置(型号名称、温度)
  • 代理行为设置(详细程度、最大迭代次数)
  • AI代理的系统提示

主要功能:

  • validate_config():确保设置了所有必需的环境变量

mcp_client.py

目的: 用于与Workato MCP服务器通信的HTTP客户端

责任:

  • 与MCP服务器建立经过身份验证的连接
  • 从MCP服务器发现可用工具
  • 使用正确的请求格式执行工具调用
  • 处理MCP协议特定的响应解析
  • 管理身份验证标头和请求超时

关键类别:

  • MCPClient:处理所有MCP服务器交互

关键方法:

  • discover_tools():从MCP服务器检索可用工具列表
  • call_tool():使用给定的参数执行特定的工具

tools.py

目的: MCP工具和LangChain工具之间的桥梁

责任:

  • 将MCP工具定义转换为LangChain Tool 物体
  • 将MCP工具调用封装在与LangChain兼容的函数中
  • 加载并注册代理的所有可用MCP工具
  • 提供工具发现和加载功能

主要功能:

  • create_langchain_tool_from_mcp():将单个MCP工具转换为LangChain格式
  • load_mcp_tools():发现并加载所有MCP工具作为LangChain工具

为什么存在: LangChain代理需要特定格式的工具,因此此模块将MCP工具定义转换为LangChain期望的格式。


agent.py

目的: 管理对话式AI代理

责任:

  • 使用OpenAI的聊天模型创建和配置LangChain代理
  • 管理对话历史和消息存储
  • 处理代理的决策过程(工具选择和执行)
  • 处理用户消息并生成代理响应
  • 将代理与可用的MCP工具集成

关键类别:

  • ChatAgent:封装代理和对话管理

关键方法:

  • _create_conversation():使用工具和系统提示设置LangChain代理
  • chat():处理用户输入并返回代理响应

主要特点:

  • 维护多个回合的对话历史记录
  • 使用LangChain的 create_agent 用于现代代理创建的API
  • 与OpenAI的ChatOpenAI模型集成

requirements.txt

目的: Python包依赖关系

依赖关系:

  • langchain:用于代理编排的核心LangChain框架
  • langchain-openai:LangChain的OpenAI集成
  • langchain-community:社区贡献的LangChain组件(聊天消息历史记录)
  • python-dotenv:环境变量管理
  • requests:用于MCP服务器通信的HTTP客户端

文件如何相互关联

应用流

┌─────────────┐
│  main.py    │  ← Entry point: Orchestrates everything
└──────┬──────┘
       │
       ├──→ config.py ────────────┐
       │   (validates config)      │
       │                           │
       ├──→ mcp_client.py ────────┤
       │   (creates client)        │
       │                           │
       ├──→ tools.py ──────────────┤
       │   (loads MCP tools)       │  All modules use
       │                           │  config.py for settings
       ├──→ agent.py ──────────────┤
       │   (creates agent)         │
       │                           │
       └──→ (conversation loop)    │
                                   │
┌──────────────────────────────────┘
│
│  Dependencies:
│  - tools.py uses mcp_client.py
│  - agent.py uses tools.py
│  - main.py uses all modules
│  - All modules use config.py

详细关系

  1. main.py → config.py

    • 呼叫 validate_config() 确保环境设置得当
    • 导入配置常量(不直接使用,但可用)
  2. main.py → mcp_client.py

    • 创建一个 MCPClient 连接到Workato MCP服务器的实例
  3. main.py → tools.py

    • 呼叫 load_mcp_tools() 使用MCP客户端获取LangChain工具
  4. main.py → agent.py

    • 创建一个 ChatAgent 带有加载工具的实例
    • 呼叫 chat() 会话循环中的方法
  5. tools.py → mcp_client.py

    • 用途 MCPClient 发现工具(discover_tools())
    • 用途 MCPClient 执行工具调用(通过包装器函数)
  6. agent.py → config.py

    • 导入LLM设置(型号、温度)
    • 导入代理配置(详细,最大迭代次数)
    • 导入系统提示
  7. mcp_client.py → config.py

    • 导入MCP服务器URL和API密钥以进行身份验证

数据流示例

当用户提出问题时:

  1. main.py 接收用户输入
  2. main.py 电话 chat_agent.chat(user_input)
  3. agent.py 通过LangChain代理处理消息
  4. agent.py 决定使用哪种工具(如果有的话)
  5. tools.py 调用包装器函数
  6. mcp_client.py 向MCP服务器发出HTTP请求
  7. mcp_client.py 返回结果
  8. tools.py 将结果返回给代理
  9. agent.py 格式化响应并返回 main.py
  10. main.py 向用户显示响应

配置依赖关系

所有模块都依赖于 config.py 用于:

  • API密钥和身份验证
  • 服务器URL
  • LLM参数
  • 代理行为设置

这种集中化使得在不涉及业务逻辑的情况下修改设置变得容易。

用法

  1. 在中设置环境变量 .env:

    • OPENAI_API_KEY
    • WORKATO_MCP_API_KEY
    • MCP_SERVER_URL
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 运行应用程序:

    python main.py
    
  4. 与终端中的聊天机器人交互。类型 quit 退出。

架构模式

该项目遵循 分层架构:

  • 表示层: main.py (用户交互)
  • 业务逻辑层: agent.py (对话管理)
  • 集成层: tools.py, mcp_client.py (外部服务集成)
  • 配置层: config.py (设置管理)

每一层都有明确的责任和依赖关系流向一个方向,使代码库可维护和可测试。