开场
我叫 Jeff,来自 Oracle。我和 Oracle 几乎同岁。有人知道 Oracle 是哪年成立的吗?和《星球大战》上映是同一年。
我很早就明白一件事:不管你做的工具有多好,到头来大家想要的还是 Excel 表格。现在还是这样吗?智能体已经把 Excel 干掉了吗?嗯,他们发布了可以逆向工程任何东西的功能,对吧?然后立刻就把 Excel 逆向工程了。所以 Excel 可能还是会继续存在。
什么是 Oracle AI Database?
在展位上,甚至在街上看到我穿着 Oracle 外套的人,问得最多的问题是“Oracle AI Database 到底是什么?”除了问能不能把外套送给他们以外,就是这个问题。现场有多少人用过、研究过,或者见过 Oracle 数据库?现在正在用 Oracle 的有多少?谢谢。
要回答 Oracle AI Database 是什么,今天最直接的办法就是问 Claude。我把自己的智能体训练得挺好,它给的答案还不错。简单说,数据库现在可以参与所有 RAG 流程,因为我们原生支持在数据库里存放向量。如果你的财务、人力资源、ERP、运输、零售、政府、医疗等数据都在数据仓库、数据湖——或者说数据污水沟——以及精心整理的数据库里,要从这些数据中找信息,我们可以把信息向量化,和数据库里的数据放在一起,再通过一个 SQL 接口访问全部内容。这样就不用为了查询而把数据复制到八九个平台上。
刚才看到了吗?像蜘蛛侠一样。也就是说,一个 MCP Server 就能连到数据库里。我今天就是来聊 MCP 的。
我们给数据库增加的不只是向量。除了关系表和列之外,我们 30 年来一直在往数据库里增加数据类型和数据工作负载,也支持图数据。如果你喜欢 Graph RAG,在一个 Oracle 实例里也能做。有人喜欢拿 Oracle 历史悠久这件事开玩笑,但老不代表我们停止创新。我们每个月都在发明、构建和发布新东西,因为客户投了很多钱,也期待得到相应的价值。
为什么智能体需要访问数据库
今天我想聊 MCP,重点讲几个真实用例。大家最常问我:“智能体、大语言模型、MCP 都很好,可数据库跟我们有什么关系?有什么用?”这对我来说很明显:你们所有的数据、信息和知识都在数据库里,而智能体靠数据发挥作用。我们怎样才能安全地把这些信息交给它们,同时不让公司因为泄露个人身份信息之类的事垮掉,最后还得去国会作证?
我也想介绍 Oracle 正在推动的一些进展。MCP 是个全新的协议,但差不多每三个月就会加新功能。Oracle 也在参与这些讨论,尽量跟上新功能的发布。
今天没有问答时间,不过我带了些周边,应该差不多发完了。想要袋子或袜子的可以拿;后面还有数据库毛绒玩具,也可以丢给大家。我还会分享一些路线图信息。
这是场一小时的演讲,但我被告知只有 20 分钟,实际上只剩 18 分钟。看看我能讲多快吧,我已经在台上浪费两分钟了。
我希望大家最后能记住三件事:我们做了什么;自然语言转 SQL 有哪些问题,以及我们在做什么来让它更可信;还有我能分享哪些有助于优化 token 用量的东西。
用例一:把报告做成工具
讲用例。我觉得这是企业最后才会做的用例,但回报也最大。通常,负责数据库周边基础设施的人最先有条件接入新技术。所以我说“要不要试试 MCP Server?”时,通常能动手的会是数据库管理员、网络管理员、系统管理员或 DevOps 工程师。他们会用这些工具让自己的工作轻松些。
但公司里更多的是另一类人:他们要回答高级副总裁、执行副总裁,甚至首席高管的问题,比如“上个月卖了多少件产品?”“这个地区的业绩怎么样?”“打多少折最能让顾客完成购物车结账?”这些问题我假装自己也懂。于是他们打开 BI Publisher 或数据集市,开始做电子表格,整理出答案,再把结果带到会议上。人们会依据这些汇总好的数据透视表和 Excel 表格做非常重要的决策。
这类问题永远问不完。不是人们没有问题可问,而是没有足够的时间和人手来回答。每一秒都有人冒出新想法:“要不试试这个?要不试试那个?”生成式 AI 的好处就在于它能放大人的能力,让我们有时间和资源去追问这些问题。
难点在于数据在数据库里,而负责做这些表格的人不一定懂 SQL,也不一定是数据模型架构师。他们懂业务,但未必看得出某种场景用交叉连接根本不合理。
自然语言转 SQL 为什么有风险
自然语言转 SQL 很厉害,但我觉得它也很危险。你听过“能编译就发版”这句话吗?工程师会笑,我们也假装跟着笑。我写了条 SQL,查出了数据,太好了,肯定答对了?不,你实际问的可能根本不是你以为自己问的问题。大语言模型经常会执行看起来返回了正确数据、实际却不对的查询。它们在这方面越来越强,但还是会出错。我不会只凭一条提示和一个返回结果,就相信 Codex、Claude、Gemini 这类模型来决定我们该投资哪个业务分支。
让模型这么做也很费钱,因为它们会暴力搜索数据库字典,试图找出回答问题所需的数据。所以结果不但不可靠,使用工具的人也不一定知道智能体和 MCP 在替自己做什么,而且整个过程要花很多 token 和时间。
Oracle 的做法之一是:每个企业、团队或部门都有 SharePoint、网络驱动器或其他地方,堆着这些年整理出来的一层又一层报告。人们遇到这些问题时,本来就会查这些报告。我们何不把它们导入数据库和/或 MCP Server,作为智能体可以调用的工具或 API?这样就不必让智能体再让大语言模型临时生成查询,而是告诉它:“这些报告可以用,你想看哪一份?”
这就是 Oracle 做的事。你可以挑选任意数量的报告,不过需要花些时间描述它们。我喜欢加上示例问题,让智能体知道:“如果你问的是这个问题,可以运行这份报告。”我会说明报告的含义和所有输入参数,报告本身也可以参数化;但底层代码基本是固定的。这样模型可能会选错报告,却不会自己生成一条错误 SQL。它出错的环节就少了一处。
说到 MCP 工具,我提供了……
列出报告、执行报告
我提供两个工具:`list reports` 和 `execute reports`。假设我有 500 份报告,我不可能把它们做成 500 个工具,那会把上下文撑爆,智能体会觉得“信息太多,没用”。所以我提问时,可以用一个关键词让它找出看起来匹配的报告,先返回报告列表,再执行其中一份来取回数据。
这是一种自然语言转 SQL 之外的选择。我们的 MCP Server 确实支持把任意临时 SQL 或存储过程代码直接对数据库执行,但也可以关掉这个功能,只允许使用自定义工具和报告。
还有一种模式,是给上下文工程师用的。这些报告可以代表业务如何运作、数据模型如何工作的蓝图。如果 OAuth 2 认证会话里有适当的权限或角色,工具也能把报告背后的 SQL 展示给智能体,让它了解系统里的数据是怎么组织的。这样它生成查询时,一次就写对的机会会大得多。你可以给它一些 Markdown,解释“我们怎样查出上个月卖了多少件产品”。
结果返回后,智能体还能把它整理成易读的格式。现场有人开始玩 MCP Apps 了吗?对,这项功能我记得是 7 月写进规范的,稍后我会讲,大概还有五分钟——看我这个小钟表。
用例二:性能调优
第二个用例面向 DevOps 工程师和支持团队。我们的平台很有名,历史也很久,文档、PDF、GitHub 项目、Stack Overflow 问答和我的博客都在网上。大语言模型训练时已经看过这些内容;如果查询很慢,它们知道该查什么。但我不放心让大语言模型替我删索引,甚至创建索引,或者直接在数据库里做任何事。我希望它给我建议,然后由我决定是否执行。
能不让模型或智能体进入生产环境,我就不会让它进去。这样想很奇怪吗?如果生产系统跑得慢,我怎样让智能体或大语言模型帮忙?大家都有一个和生产环境一模一样的测试环境,对吧?
Oracle 有项叫 Data Guard 的技术,可以建一个只读备用实例,把报表和只读查询转移到那里。性能问题很可能也会在备用实例上重现。你可以让智能体在这个更安全的环境里试探——“攻击”这个词不太合适,不过有时倒也贴切——让它去排查,再尝试不同的性能技巧。
我希望给大语言模型只读权限,但光这样还不够。即使它只能读数据,也可能读到你不想让它看到的内容。我还得限制它进入数据库后能做什么。对我来说,数据库安全最好的落点在哪里?就在数据库本身。如果只把安全限制写在工具里,一个积极过头的工程师换个工具连上数据库,不就直接绕过去了吗?安全放在数据库层,大多数时候就能守得住。
智能体和大语言模型确实很擅长发现并修复性能问题。这大概是我最容易演示的功能,不过今天没时间做演示。我写了一个自定义工具,里面有六种我放心让它代我执行的操作,其中一种是收集统计信息,基本上相当于给数据做画像。
我们的数据库有成本优化器。你提交查询时,它生成执行计划不是靠一些经验法则,而是会看数据的画像,比如某一列有多少个不同值。诸如此类。统计信息越新、越准确,它就越可能生成好的执行计划,让运行时性能表现更好。
所以我不会做 15 个一次性工具,而会做三四个跨类别的工具,每个工具再提供不同选项。智能体看到“性能调优工具”后,会知道它能做六件事,其中一件是生成性能分析报告。我们有个叫 AWR 的功能,我会让它生成报告;另一件事是生成统计信息。
用例三:给智能体补充数据模型文档
这个用例和第一个很接近:探索数据模型并补充文档。哎,我时间不多了。
自然语言转 SQL 确实很厉害,也是 AI 和数据库领域最令人兴奋的方向,因为 SQL 是从数据库取数据最常用的方式。我们需要这些数据,但对很多系统来说,这也是个噩梦。
过去六个月里有人刚入职吗?公司的茶水间里,有没有张贴一幅图,把各种难点都说明白、把行话和内部笑话都列出来,再解释数据模型?比如告诉你:“销售额并不在 sales 表里,而是在一张叫 `XHR_123` 的表里,因为三十年前有位工程师觉得这样很酷。”是啊,真正的答案就是一大页 Confluence 文档。
现在我们有工具可以读取那些 Confluence 页面,生成上下文,并在数据库现有的元数据之上补充数据模型说明。这又是一项上下文工程工作:我们希望把当前数据库环境的信息直接交给大语言模型,而不是让它自己生成查询、逆向拆解甚至折腾数据库来找数据。
你让它找,它最终确实会找到,但会耗很久,还会反复找。除非大家的智能体和大语言模型之间共享团队级的企业记忆,否则这就是巨大的浪费。很奇怪的是,三十年前我们似乎觉得让新员工入职后自己吃苦摸索不算大问题,这问题一直没人解决;现在 AI 出现了,我们可不能让可怜的机器人吃苦,所以得把它们用好数据库所需的信息准备好。这项功能的好处是说明全用通俗英语写、就存在数据库里,人类也能受益。
看我们的工具时,会看到一个叫 `schema information` 的功能。我可以对 Codex、Claude 或其他智能体说:“我有个新环境,你去看看它的结构,找出这个信息,再帮我总结一下。”它会发现有 schema info 工具,就开始用它,最后返回一份压缩过的……
安全:是谁在查询?
……字典,也就是一组 JSON 属性,不必像以前那样不断发查询:“把所有表、所有列、所有注释都列出来;每张表再读五行,看看数据看起来是什么样。”这些功能我们直接做进工具里,优化好之后总能返回相同的数据,还提供多种模式:详细、精简、中等——就像我的裤子一样。工具还能按关键词过滤,只查数据里的特定内容。
我还可以用另一个叫 `retrieve context` 的工具取回这些信息,用来做 AI 向量搜索。我还加了一个新工具叫 `generate annotations`。我可以让它访问你们的 SharePoint,扫描 PDF、PowerPoint、Excel 和 Word 文档,提取文本、整理内容,再放回数据库里。这也让自然语言转 SQL 更容易一次写对查询。
这是我把表的说明补齐之后,数据库里的数据看起来的样子。每次我跑步、骑车或做其他活动,记录都会进入 Strava 账户。我是个技术宅,所以我给这些数据接了 API,再存进自己的数据库。Strava 的数据模型文档还算清楚,不过单位和时间字段会跳来跳去,有些列也不像字面看起来的那样。我把这些情况都标注好后,再问“我下周该做什么训练?”让模型查看我的个人训练记录时,有了这些信息就容易多了。
MCP 这套方式还有个好处:不依赖某个特定的 AI 或大语言模型。只要 MCP Server 和工具都在,它就能配合各种模型使用。
好,接下来可能是我今天讲的最重要的内容:安全。我只剩 40 秒,就以这个收尾。我们得先知道是谁在查看数据库里的信息,才能把数据返回给对方。我能看到的信息,和同事 Tara 能看到的可能很不一样。我用 Claude、Codex、Gemini 或自己搭的 LangChain 框架访问数据库时,并不是让智能体用数据库账号直接登录,而是让你通过组织的单点登录,比如 Azure AD。它会返回一组 scopes,再返回描述你组织角色的一组权限。数据库可以按规则判断:“Jeff 是人力资源经理,所以他可以查看所有人的薪资。”但组织之外的人就不能看。
这样,自然语言问题被转换成 SQL 并在数据库里运行时,数据库会先从结果集中动态剔除无权查看的数据,再把结果交给智能体。我们把这叫作深度数据安全(deep data security)。时间到了,重点内容我都讲了。
接下来会有什么
Oracle 在安全上考虑了很多。我们希望这些东西既容易用,也足够安全。我们正在开发 MCP Apps,让数据库界面可以直接出现在智能体里,预计今年晚些时候推出。
我们也有 Skills,可以通过工具提供。我们支持自动化 RAG 流程:你可以用命令行把文档导入,再通过 MCP 工具把向量和文档片段传回智能体。
想了解更多,最简单的网址是 oracle.com/mcp。我马上要登机飞回北卡罗来纳州的罗利;你可以在 LinkedIn 上找到我——我就是那位 Jeff Smith。我的同事还在 Oracle 展位,那里有更多周边。如果你没拿到毛绒玩具,还可以去领。谢谢大家。