生成式人工智能在运营和开发方面带来了许多机遇,但对于那些试图将生成式人工智能纳入安全解决方案的人来说,它也带来了许多挑战。
其中一个挑战是如何通过 LLM(大型语言模型)获取不允许与任何第三方 AI 服务共享的敏感内容,例如用于保护applications和 API 免受欺诈和滥用的安全策略。
LLM 面临的第二个挑战是他们容易产生幻觉,尤其是当被要求分析或生成与 LLM 不太了解的主题相关的内容时。 对于DEX 等领域特定语言来说,情况通常如此。它是一种纯函数式、静态类型、非图灵完备的语言,虽然定义明确,但并未得到广泛使用。
第一个挑战,数据隐私,乍一听似乎难以克服。 安全公司必须非常重视所有客户数据(包括政策)的隐私和安全。 因此,虽然使用 LLM 来帮助揭示政策见解将使运营实践和客户都受益,但仍需要一种解决方案,可以从敏感数据中收集见解,而无需与第三方 LLM 共享这些数据,从而使 LLM 无法处理这些数据。 第二个挑战(幻觉)是整个行业目前正在努力克服的挑战,特别是与政策、配置和代码相关的答案。
尽管人类将程序视为字符序列,但编译器却有不同的看法。 对于编译器来说,DEX 程序是一种称为 AST(抽象语法树)的数据结构。 这棵树是有向无环图,这意味着所讨论的策略非常适合以图的形式表示。 因此,我们发现的解决方案利用图形数据库(Neo4j)并使用 GPT 代理针对它生成 GraphQL 查询。 这种方法巧妙地解决了第一个挑战,因为我们可以使用 GraphQL 查询包含数据的图形数据库,同时保护其隐私不被第三方 LLM 侵犯。
第二个挑战——幻觉——更难克服,但我们的方法也有效,即使用多种人工智能技术来降低风险。 此外,GraphQL 是一种广泛使用、有据可查的查询语言,大多数 GPT 模型都熟悉它,并且可以使用任意数量的工具轻松地进行语法验证。 这降低了出现幻觉的可能性,并提供了一种在使用前确保正确性的方法。
人工智能幻觉是指生成人工智能产生的输出不是基于实际数据或模式,而是虚构或扭曲的情况。 这些幻觉通常是由于人工智能训练数据的局限性或偏见而发生的,或者当人工智能试图为以前从未遇到过的情况生成输出时发生的。 幻觉可以表现为虚构的或无意义的内容或结论,这些内容或结论可能不符合逻辑或不符合输入的数据。 例如,文本生成人工智能可能会生成看似合理但最终毫无意义或与所提供的上下文无关的句子。
GraphQL 是一种用于 API(application编程接口)的开源查询语言,以及使用为数据定义的类型系统执行这些查询的服务器端运行时。 它由 Meta(Facebook)开发,旨在提供比传统 RESTful API 更高效、更强大、更灵活的替代方案。 GraphQL API 由模式定义,该模式指定可查询或变异的数据类型。 这种强类型可以实现更好的工具、自省和验证。
我们将生成式人工智能安全地融入安全性的方法采用 GPT 代理的形式。 虽然使用有据可查的语言有助于降低出现幻觉的风险,但我们需要找到一种方法来将代理的输出空间限制为一种可以通过编程检查错误同时又不向 OpenAI 发送任何敏感数据的格式。使用 GraphQL 作为输出空间在这里效果很好,因为它具有足够的表现力来回答大多数问题,同时也是一种可以通过编程检查已知模式的抽象。
虽然我们已将这种方法应用于 DEX,但它适用于任何足够互联和关系的数据集,例如:社交网络、网络和基础设施拓扑、供应链和地理空间(地图)数据。
PC-graph 架构由将 DEX 转换为图形表示的组件组成。 然后将生成的图形数据存储在 Neo4j 数据库中。 GPT 代理的输出可以通过 API 提交到 GraphQL Apollo 服务器,该服务器针对图形数据库执行查询。
我们的代理使用 GPT4 以自然语言响应有关用 DEX 编写的政策信息的请求。代理通过理解 pc-graph API 并使用适当的查询或变异进行响应来实现这一点,然后用户可以查看和执行这些查询或变异。
除了 pc-graph API 之外,我们的代理还了解所使用的库和一些有关 DEX 语言的概念。 该信息经过精心选择,在运行时包含在上下文中,以提供最佳结果。
这带来的一个挑战是,代理需要一个大的上下文来保存模式的相关部分,以及补充材料,例如包含库生成的附加类型、查询和变异的 neo4j-graphQL 文档。 当使用 GPT4-8k 时,我们根本没有足够的空间进行足够的上下文学习。 32k 上下文产生可接受的结果,但是,这也会产生额外的成本。 例如,我们必须在每次向 OpenAI 发出请求时发送 GraphQL SDL(模式定义语言)。如果我们可以使用我们的模式微调 GPT4 对话模型,无需将其包含在上下文中,那么这将不是问题。 然而,OpenAI 目前不支持此功能。
我们发现了三种可以改善 GPT4 结果的 AI 方法:
最后一步,我们使用为 GraphQL 查询提供静态语法错误检查的工具来捕获任何可能在初始缓解措施中遗漏的幻觉。
通过最初在同一个提示中生成三个潜在答案,该设计得到了进一步改进。 这不仅减少了给定提示的时间和成本,而且还提高了一致性,因为答案的正确部分更有可能出现。 这样做,我们也有随机变化的空间,以探索不太可能但准确的选择。
通过我们的方法,我们能够在不共享私人数据的情况下从政策中获取见解。 我们的查询结果的质量和一致性也得到了显着改善,幻觉明显减少,特别是在涉及构建包含多个过滤器和/或聚合函数的大型或复杂查询的任务中。
在某种程度上,我们可以鱼与熊掌兼得;当被迫在创造性代理和确定性代理之间做出选择时,我们会同时做这两件事。