概要
在人工智能领域,智能体作为AI与用户沟通的桥梁,通过接收和发送包含特定信息的提示词,即用户提示词-user prompt和系统提示词-system prompt,来模拟人类对话。系统提示词设定智能体的角色和行为,用户提示词则传达用户的需求。功能编码-AI tools是允许智能体调用预定义函数以执行具体任务的方法,增强了智能体的实用性。MCP(Model Communication Protocol)作为一种专为AI设计的通信协议,使得智能体能够与各种工具和服务交互,实现更复杂的功能,并支持工具的标准化管理,包括查询可用工具、参数和功能描述等。这些技术综合起来,展示了从用户询问到AI生成响应的完整流程,强调了它们在AI自动化协作中的重要性。
接下来我们通过一些场景,来学习prompt,agent、mcp以及function calling的基础概念。
场景1
现实中对话
现实生活中,当我们和不同人聊天真实,即便是完全相同的话,对方也会根据自己的经验给出不同的答案。比如我说我肚子疼,我妈可能会问病了吧?,我爸可能说吃多了吧?,我女朋友可能直接就来一句滚吧。 但是AI并没有这样的人设,所以他就只能给出一个通用的四平八稳的回答,如果感觉不适请就医。
图片
于是我们就希望给AI也加上人设,最直接的方法就是把人设信息和用户要说的话打包成一条user prompt发过去。比如你扮演我的女朋友,我说我肚子疼,然后AI就可能回复滚一边去,老娘也疼,这样就对味儿了。
图片
但问题是你扮演我温柔的女朋友这句话并不是我们真正想说的内容,显得有一点出戏。于是人们干脆把人设信息单独的拎了出来,放到另外一个里面,这就是system prompt系统提示词。
场景1总结
在AI模型与用户交互的过程中,什么是user prompt?
user prompt就是用户提示词,是我们通过聊天框发送给AI模型的消息,通常是我们提出的问题或想说的话。
为什么AI给出的答案往往显得无趣且缺乏个性?
因为AI没有人的设定,只能给出通用的回复。为了赋予AI个性,人们开始将人设信息与用户输入的内容结合,形成更自然的对话。
什么是system prompt,它在对话中起到什么作用?
System prompt是用来描述AI的角色、性格、背景、信息、语气等非用户直接说出来的内容,它与user prompt一起发送给AI模型,以使对话更加自然。
在网页端的聊天机器人中,system prompt如何设定和使用?
网页端的system prompt通常是系统预设的,但用户可以通过网站提供的设置功能自定义偏好,这些偏好会被整合进system prompt中。
场景2
即使人设设定的再完美,说到底AI还是个聊天机器人。你问一个问题它最多给你答案或者告诉你怎么做,但实际动手的还是你自己。那么能不能让AI自己去完成任务呢?
第一个做出尝试的是一个开源项目叫做auto GPT,它是本地运行的一个小程序。如果你想让auto GPT帮你管理电脑里的文件,那你得先写好一些文件的管理函数
图片
比如说list files用来列目录,read files用来读文件等等。然后你把这些函数以及它们的功能描述、使用方法注册到auto GPT中
图片
Auto GPT会根据这些信息生成一个system prompt,告诉AI模型用户给了你哪些工具,他们都是干什么的,以及AI如果想要使用它们应该返回什么样的格式。
最后把这个system prompt连同用户的请求,比如说帮我找一找原神的安装目录,一起发给AI模型。
图片
如果AI模型足够的聪明,就会按照要求的格式返回一个调用某个函数的消息。Auto GPT进行解析之后就可以调用对应的函数了。然后再把结果丢回给AI,AI再根据函数调用的结果决定下一步应该做什么操作。这个过程就这样反复,直到任务完成为止。
图片
人们把auto GPT这种负责在模型工具和最终用户之间传话的程序就叫做AI agent。而这些提供给AI调用的函数或者服务就叫做agent tools
图片
不过这个架构有一个小问题,虽然我们在system prompt里面写清楚了AI应该用什么格式返回,但AI模型说到底它是一个概率模型,还是有可能返回格式不对的内容。为了处理这些不听话的情况,很多AI agent会在发现AI返回的格式不对时,自动进行重重试,一次不行我们就来第二次。但这种反复的重试总归让人觉得不太靠谱,于是大模型厂商开始出手了,纷纷推出了一个叫做function calling的新功能,这个功能的核心思想就是统一格式,规范描述
Function calling则对这些描述进行了标准化,比如每个tool都用一个Json对象来定义,工具名写在name字段,功能说明写在description字段,所需要的参数写在parameters里面等等。然后这些对象也从system prompt中被剥离了出来,单独放到了一个字段里面。
图片
最后Function calling也规定了AI使用工具时应该返回的格式,所以system prompt中的格式定义也可以删掉了。
图片
这样一来,所有的工具描述都放在相同的地方,所有工具描述也都依照相同的格式,AI使用工具时的回复也都依照相同的格式,于是人们就能更加有针对性的训练AI模型,让它理解这种调用的场景。甚至在这种情况下,如果AI依然生成了错误的回复,因为回复的格式是固定的,AI服务器端自己就可以检测到并且进行重试,用户根本感觉不到。这样一来,不仅降低了用户端的开发难度,也节省了用户端重试带来的token开销。
图片
场景2总结
auto GPT是如何实现让AI完成任务的?
auto GPT通过让用户注册一些函数及其功能描述,生成一个包含这些工具信息的system prompt,然后根据用户请求调用AI模型,AI模型按要求格式返回操作结果,auto GPT解析后执行相应函数。
什么是AI agent以及其与function calling的关系?
AI agent是负责在模型工具和最终用户之间传话的程序,而function calling是一种规范AI回复格式的新功能,旨在解决AI返回结果可能不准确的问题,并通过统一格式降低用户端开发难度和token开销。
场景3
以上我们讲的都是AI agent和AI模型之间的通信方式。接下来我们再看另一边,AI agent是怎么跟AI tools来进行通信的。
最简单的做法是把AI agent和agent tools写在同一个程序里面,直接函数调用搞定,这也是现在大多数agent的做法。
图片
但是后来人们逐渐发现有些AI tools的功能其实挺通用的。比如说一个浏览网页的工具,可能多个agent都需要,但我总不能在每个agent里面都拷贝一份相同的代码吧,太麻烦了,也不优雅。于是大家想到了一个办法,把tools变成服务统一的托管,让所有的agent都来调用,这就是MCP。
图片
MCP是一个通信协议,专门用来规范agent和tools服务之间是怎么交互的。运行tools的服务叫做MCP server,调用它的agent叫做MCP client。MCP规定了MCP server如何和MCP client通信,以及MCP server要提供哪些接口。
图片
MCP server也可以直接提供数据,提供类似文件读写的服务叫做resource,或者为agent提供提示词的模板叫做prompt。MCP server既可以和agent跑在同一台机器上,通过标准输入输出进行通信,也可以被部署在网络上,通过HTTP进行通信
图片
图片
场景3总结
AI agent与AI tools之间如何通信?
最初是直接函数调用,后来发展为将常用工具作为服务统一托管在网络上的MCP server,使得所有agent可以通过MCP协议进行交互。
MCP(Message Passing to Function)是什么?
MCP是一个通信协议,用于规范AI agent与AI tools之间的交互,它规定了MCP server(服务提供者)与MCP client(服务调用者)之间的接口和交互方式。
全文总结
最后我们梳理一下全场景的整个流程。我说:女朋友肚子疼,怎么办?于是问AI agent或者说MCP client,我女朋友肚子疼应该怎么办?Agent会把问题包装在user prompt中,然后agent通过MCP协议从MCP server里面获取所有tool的信息。AI agent会把这些tool的信息或者转化成system prompt,或者转化成function calling的格式,然后和用户请求user prompt一起打包发送给AI模型。 AI模型发现有一个叫做web browse的网页浏览工具,于是通过普通回复或者function calling格式产生一个调用这个tool的请求,希望去网上搜索答案。Agent收到了这个请求之后,通过MCP协议去调用MCP server里的web browse工具。web browse访问指定的网站之后,将内容返还给agent,agent再转发给AI模型。AI模型再根据网页内容和自己的头脑风暴,生成最终的答案,多喝热水,最后由agent把结果展示给用户之后
图片
文章来自:51CTO
