保护人工智能系统和LLM栈的重要性:AI模型、LLM实施和安全方法论
2024-4-17 23:31:31 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

本文由安全研究专家Omar Santos于2024年03月24日发表于思科安全博客上,本文将主要讨论保护人工智能系统和LLM栈的重要性,并阐述AI模型、LLM实施和安全方法论。

前言

几个月前,我在思科安全博客上写了一篇关于人工智能模型的安全性、大模型微调(Fine-tuning)技术和检索增强生成(RAG)的文章。在这篇文章中,我将继续跟大家讨论和学习如何更好地保护人工智能系统的安全性,内容将主要围绕当前的“LLM(大语言模型)实现”和“LLM栈”展开论述。

最近我还出版了两本新书,第一本是《网络、网络安全和新兴技术中的人工智能革命》,该书主要介绍了人工智能对网络技术的革命,以及新兴技术的网络安全问题。第二本书是《超越算法:人工智能、安全、隐私和道德》,主要讨论了红队人工智能模型、监控人工智能部署、人工智能供应链安全以及联合学习和同态加密等隐私增强方法的应用。感兴趣的读者可以访问本文文末的链接以查看详情。

接下来,我们一起进入今天的主题,即人工智能实现和LLM栈安全的一些关键因素。

LLM栈指的是什么?

所谓LLM栈,一般指的是围绕大语言模型LLM实现的各种技术和组件栈,这种“栈”实际上是一种“技术栈”,可以包括一些系列旨在利用LLM功能的技术和方法,例如矢量数据库、嵌入模型、API、插件和编程框架(如LangChain)等。

许多组织如今正在通过多种方式去尝试实现RAG技术,这是因为RAG技术能够结合这些模型的生成式能力和来源于各种数据库或知识库的相关检索信息,以显著提高LLM的准确性。关于RAG技术,简而言之,该技术工作原理是首先通过查询带有问题或提示的数据库来检索相关信息,然后将这些信息输入LLM,LLM根据输入提示和检索到的文档生成响应。其生成的结果与LLM单独实现的结果相比,输出更准确、信息更丰富、更符合上下文。

让我们先简单回顾一下结合了RAG技术和其他应用程序的典型LLM栈组件,具体如下图所示:

矢量化数据与安全

矢量化数据和创建嵌入模型是准备数据集以便让RAG和底层工具高效工作的关键步骤,矢量嵌入,也称为矢量化,主要负责将单词和不同类型的数据转换为数值,其中每条数据都被描述为高维空间内的矢量。OpenAI提供了可以通过其API使用的不同嵌入模型,当然你也可以选择使用“Hugging Face”中的开源嵌入模型。下面给出的是如何使用OpenAI的text-embedding-3-small模型将文本“Example from Omar for this blog”转换为“数字”(嵌入)的示例:

"object": "list",

  "data": [

    {

      "object": "embedding",

      "index": 0,

      "embedding": [

        0.051343333,

        0.004879803,

        -0.06099363,

        -0.0071908776,

        0.020674748,

        -0.00012919278,

        0.014209986,

        0.0034705158,

        -0.005566879,

        0.02899774,

        0.03065297,

        -0.034541197,

<output omitted for brevity>

      ]

    }

  ],

  "model": "text-embedding-3-small",

  "usage": {

    "prompt_tokens": 6,

    "total_tokens": 6

  }

}

第一步(该步骤甚至要在开始创建嵌入模型之前执行)就是数据收集和存储,将来自不同数据源的原始数据(例如,数据库、PDF、JSON、日志文件和Splunk的其他信息等)收集并存储到一个称为矢量数据库的集中式数据存储系统中。

需要注意的是,根据数据的类型,我们可能需要对数据进行清理和规范化以消除噪声,例如不相关的信息和重复数据等。

确保嵌入创建过程的安全,会涉及到多方面的技术和方法,从嵌入模型的选择到生成嵌入的处理和存储,现在我们一起看看嵌入创建过程中涉及到的安全问题。

我们应当优先选择使用经过社区彻底审查的知名、商业或开源嵌入模型,或者选择广泛使用并有强大社区支持的模型。与任何软件一样,嵌入模型及其依赖组件可能会随着时间的推移而被曝安全漏洞。而且一些嵌入模型可能会被威胁行为者操纵,甚至模型就是威胁行为者所创建的也有可能,这也是供应链安全为什么如此重要的原因之一。

除此之外,我们还应该验证和净化输入数据。用于创建嵌入的数据可能包含需要保护的敏感或个人信息,因此我们需要确保遵守数据保护法规(如GDPR、CCPA)。尽可能应用数据匿名化或假名化技术,并确保在安全的环境中执行数据处理,对静止和传输中的数据进行加密。

而且身份验证机制也非常重要,未经授权访问嵌入模型及其处理的数据可能会导致数据泄露和其他安全问题。因此,我们应当使用强大的身份验证和访问控制机制来限制对嵌入模型和数据的访问。

嵌入的索引和存储

一旦数据被矢量化,下一步就是要将这些矢量存储在可搜索的数据库或矢量数据库中,例如ChromaDB、pgvector、MongoDB Atlas、FAISS(Facebook AI相似度搜索)或Pinecone,这些系统都允许我们有效地检索相似的矢量。

值得一提的是,有些矢量数据库是不支持加密的,因此请确保你所使用的解决方案支持数据加密。

编程框架和代码库(例如LangChain)

在前面给出的图片中,我们可以看到工具组件引用了类似LangChain和LlamaIndex之类的代码库。LangChain是一个开发框架,主要用于开发LLM支持的应用程序,它支持上下文感知和推理应用程序,并能够为构建、测试和部署应用程序提供代码库、模板和开发人员平台。LangChain由几个部分组成,包括库、模板、用于将链部署为REST API的LangServe,以及用于调试和监视链的LangSmith。它还提供了用于组成链的LangChain表达式语言(LCEL),并为模型I/O、检索和AI代理等模块提供了标准接口和集成。我还专门编写了许多关于LangChain资源和工具的文章,这些资源和工具也可以在本文文末的参考资料中获得。

很多组织会在多种场景下使用LangChain,例如个人助理、问答、聊天机器人、查询表格数据等。它还提供了用于构建应用程序的示例代码,重点是提供了很多应用程序和端到端的示例。

Langchain可以与外部API交互,实时从其他应用程序获取数据或向其他应用程序发送数据,此功能允许LLM访问最新信息、执行预约等操作或从Web服务检索特定数据。该框架可以基于会话或查询上下文动态构建API请求,从而将LLM的功能扩展到静态知识库之外。更重要的是,在与外部API集成时,一定要使用安全的身份验证方法并使用HTTPS等协议加密传输中的数据。而且API密钥和令牌应该安全地存储,并且绝对不能硬编码到应用程序代码中。

人工智能前端应用程序

人工智能前端应用程序是指人工智能系统中面向用户的部分,负责处理机器和人类之间的交互。这些应用程序可以利用人工智能技术为用户提供智能化、响应式和个性化的服务。例如聊天机器人、虚拟助理、个性化推荐系统和许多其他人工智能驱动的应用程序前端,可以直接使用Streamlight、Vercel、Streamship等代码库轻松创建。

对于传统Web应用程序的安全实践来说,预防各种安全漏洞的产生是至关重要的,例如访问控制中断、加密失败、注入漏洞(如跨站点脚本(XSS))、服务器端请求伪造(SSRF)和许多其他漏洞。

LLM缓存

LLM缓存是一种用于提高LLM交互效率和性能的技术,我们可以使用SQLite Cache、Redis和GPTCache等技术来实现LLM缓存,而且LangChain也提供了如何利用这些缓存方法的示例。

LLM缓存背后的基本思想是存储模型输出的先前计算结果,这样一来,如果再次遇到相同或相似的输入,模型可以快速检索存储的输出,而不是从头开始重新计算。这种方式可以显著减少计算开销,使模型更具响应化和成本效益,尤其是对于频繁重复的查询或常见的交互模式场景,这种技术的效果会更明显。

因此,我们需要认真设计缓存策略,以确保它们不会损害模型生成相关响应和更新响应的能力,尤其是在输入上下文或外部世界知识随时间快速变化的情况下。除此之外,有效的缓存失效策略对于防止模型提供过时或不相关的信息来说,是至关重要的,而且还要考虑到知识和语言的动态性质,因此这个方向会成为一个很大的挑战,值得广大研究人员深入研究和分析。

LLM监控和策略执行工具

监控是LLM栈安全性中最重要的元素之一。目前互联网有很多开源和商业LLM监控工具,如MLFlow。还有一些工具可以帮助抵御Prompt注入攻击,例如Rebuff。而思科近期发布的Motific.ai工具还可以独立隔离工作。

人工智能物料清单与供应链安全

人工智能开发中对透明度和可追溯性的需求现在越来越重要了,供应链安全是业内许多人员首要考虑因素,这就是为什么人工智能BOM如此重要的原因。但人工智能BOM究竟是什么?为什么它们如此重要?软件物料清单(SBOM)与人工智能物料清单(AI BOM)有何不同?

SBOM负责提供软件应用程序中所有组件的详细清单,这在软件开发行业发挥着至关重要的作用。其实理解软件的组成因素是很重要的,其中包括库、包和任何第三方代码。另一方面,人工智能BOM专门针对人工智能实现。它们提供了人工智能系统许多元素的全面文档,包括模型规范、模型架构、预期应用程序、训练数据集和其他相关信息。与SBOM相比,AI BOM的范围可能会更加广泛,这种区别突出了人工智能BOM在解决人工智能系统的独特复杂性和要求方面的专业性。

总结

保护LLM栈安全,不仅对于保护数据和维护用户信任至关重要,对于确保这些强大的人工智能模型的操作完整性、可靠性和合乎道德的使用也同样至关重要。随着LLM越来越多地融入社会和行业的各个方面,其安全性也应该值得我们谨慎处理和认真对待,以防止对个人、组织和整个社会产生潜在的负面影响。

参考资料

https://blogs.cisco.com/security/securing-ai-navigating-the-complex-landscape-of-models-fine-tuning-and-rag

https://www.ciscopress.com/store/ai-revolution-in-networking-cybersecurity-and-emerging-9780138293697

https://www.ciscopress.com/store/beyond-the-algorithm-ai-security-privacy-and-ethics-9780138268459

https://www.cs.ox.ac.uk/news/2282-full.html

https://community.cisco.com/t5/security-blogs/generative-ai-retrieval-augmented-generation-rag-and-langchain/ba-p/4933714

https://platform.openai.com/docs/guides/embeddings/embedding-models

https://huggingface.co/models?other=embeddings

https://platform.openai.com/docs/guides/embeddings/embedding-models

https://python.langchain.com/docs/expression_language/

https://becomingahacker.org/langchain-is-everywhere-5415613390f1

https://hackerrepo.org/

https://python.langchain.com/docs/integrations/llms/llm_caching

https://www.panoptica.app/solutions/cloud-native-application-security-solution#genai

参考链接

https://blogs.cisco.com/learning/securing-the-llm-stack


文章来源: https://www.freebuf.com/articles/neopoints/398298.html
如有侵权请联系:admin#unsafe.sh