Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Prompt

UserPrompt

23年 OpenAI 刚发布 ChatGPT 的时候,AI看起来还是一个聊天框,我们通过聊天框发送的消息,然后AI模型生成一个回复,我们发的信息就叫用户提示词(UserPrompt)

SystemPrompt

但是现实生活中,问每个人同一句话都可能得到不同的回复。比如我说:我饿了;爷爷奶奶可能会说:要不要煮点东西给你吃;朋友会说:别饿;女朋友会说:滚一边去,我也饿。但是AI没有这样的人设,所以只能给出一个通用的回复:饿了就吃饭。

于是我们就希望给AI也加上一个人设,最直接的方法就是把人设信息和用户要说的话打包成一条 UserPrompt 发过去,比如你说:你是我朋友,我饿了;然后AI就会回答:别饿。

但问题是,你扮演我的朋友这句话不是我们真正想说的内容,每次都要提及显得麻烦,于是我们将人设信息单独拎了出来,放在另一个Prompt里面,这就是系统提示词(SystemPrompt),像角色、性格、背景知识、语气等等这些不是直接由用户说出来的内容都可以放在 SystemPrompt 里。

每次用户发送 UserPrompt 的时候,系统会自动把 SystemPrompt 也一起发给AI模型,这样整个对话就显得更加自然了。

Agent

上面说了这么多,说到底,AI还是一个聊天机器人,你问一个问题,他也只能给你一个回复,告诉你怎么做,实际动手的还是自己,如何让AI来帮我们完成,第一个做出尝试的是 AutoGPT。

如果想要 AutoGPT 帮我们管理电脑中的文件,那我们得先写好一些文件的管理函数,比如说暂定 List_files 用来列出目录,Read_files 用来读取文件。然后把这些函数以及它们功能描述、使用方法注册到 AutoGPT 里,AutoGPT 会根据这些信息生成一个 SystemPrompt,告诉AI模型用户给了哪些工具,分别都是干什么的,以及AI如果想要使用它们该返回什么样的格式,最后把 SystemPrompt 连通用户的请求,如果AI足够的聪明,就会按照要求的格式返回一个调用某个函数的消息,AutoGPT 解析后就可以调用对应的函数,然后 AutoGPT 把调用的结果返回给AI,AI再决定下一步该做什么,直到任务完成为止。

我们把 AutoGPT 这种负责在*模型、工具和最终用户直接传话的程序叫做 AI Agent,这些提供给AI调用的函数或者服务就叫 Agent Tool*。

但是这种架构任然有点小问题,这套架构能够运行的前提是AI足够的聪明,虽然我们在 SystemPrompt 里面写清楚了AI该用什么格式返回,但还是可能因为AI返回格式不对的内容,为了处理这种情况,很多AI Agent会在发现返回结果格式不对时自动进行重试,但这种反复的重试不仅大大减少效率,并且加大浪费。

Function Calling

后来各大厂商推出一个叫做 Function Calling 的新功能,这个新功能的核心思想就是统一格式、规范描述

比如我们上面通过 SystemPrompt告诉AI有哪些工具以及返回的格式,但是这些描述是用自然语言编写的,只要AI看得懂就行,Function Calling 则对这些描述进行标准化,比如每个 Tool 都用一个 JSON 对象来定义工具名,工具名写在name字段、功能说明写在desc字段、所需参数写在params里面等等,然后这些 JSON 对象从 SystemPrompt 里面被剥离出来,单独放在一个字段里面,最后 Function Calling 也规定了使用工具时应该返回的格式,所以 SystemPrompt 里面的格式定义也可以删掉了。

这样所有的工具描述放在同一个地方,所有的工具描述也依照相同的格式,如果AI依旧生成了错误的回复,因为回复的格式是固定的,所有AI服务端自己就能检测到,并且进行重试,这样不仅降低了用户端的开发难度,还节省了用户端重试带来的Token开销。

但 Function Calling也有相对应的问题,就是没有统一的标准,每家企业的API定义都不一样,还有很多大模型都不支持 Function Calling。

MCP

AI Agent 跟 Agent Tools进行通信,最简单的是写在同一个程序里,直接函数调用,但是有些 Tools 非常通用,比如浏览网页,可能多个 Agent 都需要,但每个 Agent 都拷贝一份相同代码太麻烦了,于是大家把 Tool 变成服务统一托管,让所有的 Agent 都来调用,这就是 MCP

MCP 是一个通信协议,专门用来规范 Agent 和 Tool 服务之间是如何交换的,运行 Tool 的服务叫做 MCP Server调用的 Agent 叫做 MCP ClientMCP规定了MCP Server如何和 MCP Client 通信以及 MCP Server 要提供哪些接口,比如用来查询 MCP Server 中有哪些 Tool,以及功能、描述需要的参数、格式等接口,除了普通的 Tool 这种函数调用形式,MCP Server 也可以直接提供数据,提供类似文件读写的服务叫做 Resource,或者为 Agent 提供提示词的模板叫做 Prompt 。

MCP Server 既可以和 Agent 在同一台机器上,通过标准输入输出进行通信,也可以部署在网络上,通过HTTP进行通信MCP只负责帮 Agent 管理工具、资源和提示词

评论