【Langchain】超详细构建Langchain架构下的MCP与Agent智能结合体

在这里插入图片描述

在实现causalchat功能的时候,遇到了需要反复调用不同的工具的场景,如果只有一个mcp服务,那么也许不需要agent智能体的构建,但是如果一旦加入rag等复杂功能的实现,谁先谁后就不能在代码中进行硬编码了,为此我们将实现一个agent架构
相关文章:
【MCP】小白详解从0开始构建MCP服务端全流程
【RAG+向量数据库】小白从0构建一个rag和向量数据库demo

1. MCP工具的参数封装

前提:对于Langchain中的agent模式,需要一个严格的接口定义,而在 LangChain 中,这个标准接口就是 BaseTool 类。
对于所有工具,agent都需要有以下几个参数

  • 它必须是一个 BaseTool 对象:这是最基本的要求。
  • 必须有 name 和 description:Agent 通过这些信息来“思考”和决定用哪个工具。
  • 必须有 args_schema:这是一个 Pydantic 模型,它精确地告诉 Agent 这个工具需要哪些参数,以及这些参数的类型。这是 Agent 能-够正确生成调用参数的基础。
  • 必须有 _arun 方法:这是 Agent 按下工具“启动按钮”的地方。当 Agent 决定使用某个工具时,它就会调用这个工具的 _arun 方法。

有了这个前提,我们再去看我们之前的mcp工具,就会发现几个问题
首先,对于我们之前调用的mcptool,tool包括以下几个参数

mcp_tools = [{
   
   
            "type": "function",
            "function": {
   
   
                "name": tool.name,
                "description": tool.description,
                "parameters": tool.inputSchema,
            }

也就是包括名字,描述,参数输入格式
但是在agent中,这样的json格式已经不能被识别了,也就是我们需要构建一个格式化的接口

首先我们按照以前的教程构建一个mcp服务,这个服务包括以下参数,这里的tool是从mcp服务器返回的原始数据,原始数据如下,假设我们这个mcp只需要输入username和filename(这个是在mcp服务中构建的,详细请参阅上述文章)

{
   
   
  "type": "function",
  "function": {
   
   
    "name": "xx",
    "description": "xx",
    "inputScheme": {
   
   
        "username": {
   
   
          "type": "string"
        },
        "filename": {
   
   
          "type": "string"
        }
      },
      "required": ["username"]
    }
}

我们将原始数据进行处理为以下这个更加简洁的结构

mcp_tools = [{
   
   
            "type": "function",
            "function": {
   
   
                "name": tool.name,
                "description": tool.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值