MCP介绍,原理说明,完整使用示例demo
MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在标准化大型语言模型(LLM)与外部数据源和工具之间的集成方式,使AI应用程序能够高效、安全地访问和利用外部资源。
原理说明
- 架构概述
- 客户端-服务器模式:
- MCP客户端:嵌入在AI应用程序中,负责与MCP服务器通信,请求和接收上下文信息。
- MCP服务器:提供数据源和工具的访问接口,接收客户端的请求,处理后返回相应的上下文信息。
- 组件:
- 宿主(Host):运行MCP客户端的AI应用程序,如IDE、聊天机器人等。
- 工具(Tools):MCP服务器提供的功能单元,代表可访问的数据源或工具,如数据库查询、文件读取、API调用等。
- 提示(Prompts):指导MCP服务器如何响应客户端请求的指令。
- 客户端-服务器模式:
- 工作流程
- 连接建立:MCP客户端与一个或多个MCP服务器建立连接。
- 请求发起:客户端通过MCP协议向服务器发送请求,指定需要调用的工具和参数。
- 数据处理:服务器接收到请求后,执行相应的工具操作,获取所需的数据或执行指定的任务。
- 响应返回:服务器将处理结果以标准化的格式返回给客户端。
- 结果利用:客户端将接收到的上下文信息提供给LLM,用于生成更准确、全面的响应。
完整使用示例Demo
以下是一个简单的示例,演示如何使用MCP构建一个能够查询数据库并生成响应的AI应用程序。
-
环境准备
- 安装Python和相关依赖库:
pip install mcp pip install mysql-connector-python
- 安装Python和相关依赖库:
-
创建MCP服务器
mcp_server.py
:from mcp.server import FastMCP import mysql.connectormcp = FastMCP("DatabaseServer")@mcp.tool() def query_database(query: str) -> str:"""执行数据库查询并返回结果"""db_config = {"host": "localhost","user": "username","password": "password","database": "my_database"}conn = mysql.connector.connect(**db_config)cursor = conn.cursor()cursor.execute(query)results = cursor.fetchall()conn.close()return str(results)if __name__ == "__main__":mcp.run()
-
创建MCP客户端
mcp_client.py
:from mcp.client import MCPClient from openai import OpenAI# 创建MCP客户端 client = MCPClient("ws://localhost:8000")# 连接到MCP服务器 client.connect()# 创建OpenAI客户端 openai = OpenAI()def get_answer(prompt: str) -> str:"""使用MCP查询数据库并生成答案"""# 向MCP服务器发送数据库查询请求query = "SELECT * FROM articles WHERE title LIKE '%{}%'".format(prompt)result = client.call_tool("query_database", query)# 使用查询结果生成答案answer = openai.Completion.create(model="gpt-3.5-turbo",prompt="根据以下信息回答问题:\n\n{} \n\n问题:{}".format(result, prompt)).choices[0].textreturn answerif __name__ == "__main__":user_prompt = input("请输入您的问题:")answer = get_answer(user_prompt)print(answer)
-
运行示例
- 启动MCP服务器:
python mcp_server.py
- 启动MCP客户端:
python mcp_client.py
- 启动MCP服务器:
-
使用示例
- 在MCP客户端中输入问题,例如:“最近有哪些关于人工智能的文章?”
- 客户端将通过MCP服务器查询数据库,获取相关文章信息,然后利用OpenAI模型生成答案并返回。
通过这个示例,可以看到MCP如何作为桥梁,连接LLM与外部数据源,实现更智能、信息丰富的应用。