张芷铭的个人博客

GoEX (Gorilla Execution Engine)

论文总结和分析

论文标题:“GOEX: PERSPECTIVES AND DESIGNS TOWARDS A RUNTIME FOR AUTONOMOUS LLM APPLICATIONS”

作者与机构

Shishir G. Patil, Tianjun Zhang, Vivian Fang, Noppapon C., Roy Huang, Aaron Hao, Martin Casado (UC Berkeley and Andreessen Horowitz)

论文摘要

这篇论文探讨了大语言模型(LLMs)从传统的信息提供角色进化到主动与工具和实际应用交互的能力,并提出了一个名为Gorilla Execution Engine(GoEx)的运行时系统。论文讨论了人类如何有效地与自动化LLMs合作、监督和委派任务,强调了“事后验证”(post-facto validation)系统的重要性。这种系统集成了直观的撤销功能和损害控制策略,以减少自动化操作的风险。

主要内容

  1. 引言

    • 介绍了LLMs从提供对话系统中的知识逐步演化到能够与实际应用和服务互动。
    • 强调了目前人类在实际执行之前需要验证LLM生成的输出的正确性和适用性。
  2. LLM代理的发展

    • 从聊天机器人到能够执行任务的行动型LLMs,再到微服务和应用中的深度嵌入。
    • 讨论了代理系统、插件和函数调用等技术的进展。
  3. 挑战

    • 不可靠性:LLMs的不可预测性和潜在的幻觉问题。
    • 信号延迟:缺乏及时反馈,导致错误难以快速识别和纠正。
    • 安全性:如何保护用户的敏感数据,并防止LLMs生成和执行潜在有害的代码。
  4. 设计一个支持自动化LLMs的运行时

    • 提出“事后验证”概念,强调在操作执行后验证其结果的可靠性。
    • 引入“撤销”和“损害控制”抽象,以减轻LLMs自动化操作的风险。
  5. GoEx: LLM Runtime

    • 详细描述了GoEx的设计与实现,包括支持RESTful API调用、数据库操作和文件系统操作。
    • 讨论了如何使用Git进行版本控制以支持文件系统操作的撤销功能。

    5.1 RESTful API调用

    处理方式

    1. 验证和授权

      • 使用OAuth2进行基于令牌的身份验证,或使用API密钥进行直接服务访问。
      • GoEx作为中间代理,安全地处理用户的机密信息,并促进各种服务之间的身份验证。
    2. 存储机密

      • 用户的机密信息和密钥存储在本地设备上的“机密智能保险库”(Secret Intelligent Vault, SIV)中。
      • SIV根据服务名称映射相应的密钥和格式,在需要时按需提取。
    3. 生成操作

      • GoEx支持两种生成API调用的方法:聊天完成和函数调用。
      • 在聊天完成模式中,用户授权GoEx使用他们的访问令牌,通过浏览器完成OAuth2流程后,GoEx请求SIV提供所需的机密。
      • 在函数调用模式中,GoEx从用户定义的函数集中选择一个函数并填充参数。
    4. 生成撤销操作

      • GoEx尝试生成每个API调用的撤销操作,并在每次新API调用后验证其有效性。如果无法保证撤销操作,开发人员可以预先定义这些操作。
    5. 损害控制

      • 对于无法撤销的操作(如发送电子邮件),GoEx通过粗粒度的访问控制和字符串匹配来限制潜在的损害范围。

    执行: - 一旦确定了API和所需的凭据,API调用将在Docker容器中执行以实现隔离 。

    5.2 数据库操作

    抽象层

    1. DBManager类

      • 提供当前数据库状态和访问数据库所需的信息。
      • 通过追踪数据库的连接配置,防止LLM直接接触敏感数据。
    2. 操作的提交和撤销

      • 支持操作的永久保存(提交)和撤销(回滚),大多数现代数据库提供ACID(原子性、一致性、隔离性、持久性)保证 。

    策略

    1. 选项1(撤销)

      • 使用逆向数据库操作来执行撤销,通过提示LLM生成逆向操作。
      • 提交操作无需额外操作,撤销操作通过执行逆向调用完成。
    2. 选项2(版本控制)

      • 使用传统的ACID事务保证,直到用户明确提交或回滚事务。
      • 提供比选项1更强的逆向保证,但性能开销更高。

    可逆性测试: - 对于选项1,GoEx执行可逆性测试以验证生成的逆向操作是否有效。这需要在容器化环境中进行,以保持原始数据库状态。 - 由于复制数据库代价高昂,LLM生成简化版本的数据库用于测试 。

    5.3 文件系统操作

    抽象层

    1. FSManager类
      • 跟踪目录树结构和用户希望执行操作的目录路径。
      • 在每次文件系统类型执行时进行递归遍历,并将目录结构存储为格式化字符串。

    策略

    1. 选项1(撤销)

      • 使用逆向文件系统操作来执行撤销,类似于数据库操作。
      • 逆向测试在容器中进行,检查文件名或文件内容的变化。
    2. 选项2(版本控制)

      • 使用Git进行版本控制,限制执行范围在Git仓库内。
      • 对于较大目录,使用Git LFS进行优化,默认阈值为200MB 。

    执行: - 逆向测试在容器中进行,GoEx复制目录内容后执行操作并比较内容,确保测试效率和性能 。

    总结

    GoEx通过提供“撤销”和“损害控制”抽象,解决了LLMs自动化操作中的关键安全问题。其设计和实现展示了如何在安全、灵活的运行时环境中执行由LLMs生成的复杂操作,为开发者提供了一个强大的工具来集成和管理LLM驱动的应用和服务 。

  6. 讨论

    • 探讨了“事后验证”的适用性,提出了设计LLM友好API的建议。
    • 强调了LLM代理的跟踪机制的重要性,以提高系统的可靠性和可审计性。
  7. 相关工作

    • 回顾了现有关于LLMs信任度、攻击与防御等方面的研究。
  8. 结论

    • 提出“事后验证”是实现自动化LLM系统的关键,GoEx通过提供直观的撤销和损害控制抽象,促进了LLM代理在实际应用中的安全部署。

论文分析

  1. 创新性

    • 论文提出了一个新颖的运行时系统GoEx,专注于自动化LLMs的安全执行,特别是通过“事后验证”策略,填补了现有系统在安全性和可逆性方面的空白。
  2. 实用性

    • GoEx利用现成的软件组件,展示了当前资源的准备情况,并为开发者提供了一个生态系统,以支持LLMs的安全应用。
    • 论文还探讨了未来LLMs广泛集成的可能性,为实现自动化和高效工作流程提供了思路。
  3. 局限性

    • “事后验证”策略虽然在很多情况下有效,但在某些需要立即反馈的场景中可能并不适用。
    • 论文依赖于现有的技术和工具,未来需要更多的实证研究来验证其在不同应用环境中的效果。
  4. 未来研究方向

    • 进一步优化GoEx的性能,减少资源开销。
    • 开发更细粒度的访问控制机制,提升LLMs在敏感操作中的安全性。
    • 探索LLMs自我校正和实时反馈的可能性,以提高其在复杂任务中的可靠性。

总的来说,这篇论文为自动化LLM系统的设计和实现提供了重要的理论和实践指导,对推进LLMs在实际应用中的广泛使用具有重要意义。

https://github.com/ShishirPatil/gorilla/tree/main/eval

https://github.com/ShishirPatil/gorilla?tab=readme-ov-file

https://gorilla.cs.berkeley.edu/leaderboard

💬 评论