最近随着Agent的火爆,MCP这东西是彻底火了。所以,认真的看一下吧。从历史到它的技术袜, 再加个具体的Demo。
Model Context Protocol(MCP) 是来源于OpenAI的兄弟公司Anthropic的(第一波出走的OpenAI的创始人办的),他们的模型能力其实一直在OpenAI之后,但是总会有几个方面一直领先OpenAI的。
a new standard for connecting AI assistants to the systems where data lives, including content repositories, business tools, and development environments. Its aim is to help frontier models produce better, more relevant responses.
MCP应该是他们思考后针对现在的Agent这个世界,甚至是针对未来的AGI世界提出的AI间的语言。
首先MCP的功能只有两个,事实上也只需要两个:
用来把你的数据共享给MCP的服务器(模型)。
用来连接你的程序(模型)到MCP的服务器。
这张图就画的很清楚了,你可以实现图上的任意一个方块不是?
现在我想解决几个问题:
Demo程序分析一下官方的代码吧。
LLM大语言模型再使用这个MCP的具体细节,是多次调用,还是怎么样?
这个MCP现在是个标准,那标准有什么?
先看代码吧:
jrhz.infoClient代码(Java):
再看完整版前,你可以先注意几点
它本身实际上是基于json的一个http类的请求。应该是基于RESTful这种风格的思想延续。
这类参数都是基于JSON格式传递的。
LLM是怎么用这个MCP的?
这是一件很有意思的事,就是LLM如何用的细节,大部分人其实是不怎么关心的。但是我还是很想知道从一个Prompt到执行MCP的调用,再到最后输出的全部过程的。
基本流程:
ChatAgent 初始化时,会将传入的工具(tools)和外部工具(external_tools)转换为标准格式,并做为LLM的上下文的一部分,传给LLM
LLM 根据上下文决定是否需要调用工具
工具调用结果被添加到上下文中,使 LLM 能够在后续响应中使用这些结果
支持多轮工具调用,直到 LLM 生成不需要工具的最终响应
区分内部工具(由 ChatAgent 自己处理)和外部工具(由调用者处理)
根据不同的工具实现,这个流程可能会有一些差异,不过大方向并不会有区别。
下面是从camel/owl总结出的一个代码
MCP的Spec有什么?
MCP的Spec其实非常简单的。
Request、Results、Errors、Notifications的包裹形式的定义。