编者按:这篇博文由 Connery 的联合创始人 Michael Liebmann 和 Volodymyr Machula 撰写。Connery 是一个开源框架,用于创建可作为插件的集成,可在多个平台中使用,包括作为 LLM 驱动的代理的工具!
在过去的十年中,Volodymyr 和我创建了各种各样的集成。这包括从传统的系统集成和定制到为 LLM 应用程序、CI/CD 工作流程、Slack 和无代码工具创建插件的一切。
一直以来都是同样的痛点。因此,我们决定做出改变,并将我们的经验包装到一个名为 Connery 的开源项目中,让每个人都能从中受益!
Connery 提供了一个为 LLM 应用程序量身定制的插件基础设施,可以轻松地与第三方服务集成并进行自定义。它管理运行时,与 OpenGPTs 无缝集成,并提供用于连接管理、个性化和安全性的用户界面。
此外,Connery 正在为开源插件生态系统构建工具和开发者体验。目标是让社区能够从创建、共享和定制彼此的插件中获益。
问题:将 LLM 与现实世界应用集成
基于 LLM 的应用程序,如聊天机器人和助手,在推理或生成任务方面正变得越来越有用。然而,使 LLM 应用程序能够直接执行现实世界的任务是一个更大的机遇。虽然这仍然是一个挑战,但毫无疑问,这正在成为一个主要趋势。
通用应用程序,如商业或个人助理(想想类似于托尼·斯塔克的 J.A.R.V.I.S.),可能需要与外部系统进行大量集成。同样,专注于特定领域(如 DevOps、人力资源、金融或购物)的代理,当它们能够执行现实世界的任务时,会变得更加有效。
然而,与传统的应用程序相比,基于 LLM 的应用程序由于潜在的幻觉和不正确的决策,在某种程度上是不可预测的。因此,将 LLM 集成到现实世界场景中需要额外的安全措施和额外的考虑。
此外,构建和运行集成通常很复杂。对于集成到需要专门基础设施的基于 LLM 的应用程序中来说更是如此。
下面,我们列出了一些您作为开发人员在将基于 LLM 的应用程序与现实世界集成时需要考虑的重要挑战。
个性化和安全性
LLM 应用程序的个性化是 2024 年人工智能发展的重要驱动力。这使得 LLM 能够为用户带来更多的个人价值。这也意味着 LLM 应用程序可以直接与用户的个人服务进行交互,例如发送电子邮件、访问日历等。这需要必要的集成和个性化功能
- 用户身份验证、授权以及用于管理连接和个性化的用户界面。
- 连接管理:用户需要一种安全的方式来授权人工智能驱动的应用程序访问他们的服务,例如使用 OAuth 的 Gmail。对于不支持 OAuth 的服务(如 AWS),通过密钥管理安全存储访问密钥至关重要。
- 个性化:用户可以配置和个性化集成。例如,为所有电子邮件指定自定义签名。或者个性化操作的元数据,以便 LLM 更好地理解个人用例。他们还可以提供个人信息,如姓名和电子邮件,以便 LLM 在调用操作时将其用作额外的上下文。
人工智能安全和控制
传统应用程序具有可以预测和测试的明确定义的功能,从而确保一致的运行。相比之下,基于 LLM 的应用程序由于其自然语言能力是不可预测的,从而导致潜在的风险,如误解的命令。为了减轻这种情况,需要额外的措施
- 元数据使 LLM 能够更好地理解可用的操作,从而降低选择和执行操作的错误率。它包括具有明确目的的操作描述、描述可用参数和验证规则的输入模式以及操作结果。
- 人机回路能力,使用户在执行关键工作流程的操作时拥有最终决定权。这也应该允许在运行操作之前编辑建议的输入参数 - 例如,在发送之前审查电子邮件。
- 审计日志,用于一致性、合规性和透明度。
集成的基础设施
LangChain 为构建 LLM 应用程序提供了一个出色的框架。另一方面,将集成添加到这样的 LLM 应用程序中是完全不同的,并且带来了自身的复杂性。
目前,开发人员需要在他们的应用程序中构建自己的自定义集成基础设施,以便将其与现实世界集成。这包括:
- 与第三方服务集成的授权,使用 OAuth、API 密钥等。
- 支持不同的集成类型和模式,如 CRUD 操作、异步操作、事件驱动操作等。
- 支持集成代码及其运行时
当构建带有集成的 LLM 驱动的应用程序时,这些项中的大多数都很麻烦,并且会分散构建者对其主要目标的注意力。
提出的解决方案:开源插件基础设施和生态系统
为了解决上述问题,我们认为为具有以下特征的 LLM 应用程序和 GPT 构建插件基础设施是最佳方法
- 首先,它必须是开源的。
- 其次,它必须具有协作模型。
我们希望这将发展成为一个开放的插件社区,并促进速度和创新,这与许多闭源方法不同。这是我们构建 Connery 的主要驱动力和原因。
接下来,我们将介绍上面图表中每个组件的子组件。
插件生态系统
在生态系统方面,我们有两个部分
- 操作 (Actions) - 将操作视为基本任务,类似于具有输入和输出参数的函数,旨在完成一项特定事情。例如,“发送电子邮件”是“Gmail”插件中的一个操作。
- 插件 (Plugins) 是相关操作的集合。每个插件都由一个具有特定结构的 TypeScript 代码的开源 GitHub 存储库表示。必须在 Runner 上安装插件,然后才能使用其操作。
插件基础设施
- Runner 是 Connery 的核心。它是一个开源引擎,集成了来自 GitHub 的插件。它配备了用户界面和一组用于连接管理、个性化和安全性的功能。每个人都可以设置自己独立的 Runner,使用一组插件和用于客户端的标准化 API 进行唯一配置。
- 客户端 (Clients) 是 Connery 面向用户的方面,充当最终用户触发操作的界面。例如,LangChain 的 OpenGPTs 允许最终用户通过将他们的 GPT 与 Connery 操作连接到现实世界来深度自定义和个性化他们的 GPT。Connery 还为许多其他平台提供客户端。
开发者和用户视角
- 开发者 (Developers) 可以灵活地创建自己的插件或使用来自社区的现有插件。插件可以通过 Connery 客户端(例如 OpenGPTs、LangChain 工具包、API 或其他)轻松集成到 LLM 应用程序(如聊天机器人或助手)中。
- LLM 应用程序的最终用户 (End-users) 首先通过连接到他们的个人帐户(如 Gmail)并提供其他个人信息,在 Runner 上个性化他们的体验。然后,授权 LLM 应用程序使用个性化的 Runner。完成后,用户可以要求 LLM 应用程序代表他们执行操作(如发送电子邮件),仍然控制应用程序的操作,并在需要时拥有最终决定权。
示例:从 OpenGPTs 运行 Connery 操作
LangChain OpenGPTs 的最新更新为不同的认知架构提供了支持。新的“助手”功能提供了一种将工具(如 Connery 操作)集成到自定义 GPT 中的简便方法。让我们来看一个简短的示例
总结网页并通过电子邮件发送
想象一下,您在 Paul Graham 的网站上找到了一篇有见地的文章,并想通过电子邮件与同事分享其简明摘要。这可能涉及来自两个不同插件的两个操作
- 来自 Summarization 插件的总结公共网页 (Summarize public webpage) 操作。此操作接受公共网页 URL,并使用 OpenAI 生成文章的简短摘要。
- 来自 Gmail 插件的发送电子邮件 (Send email) 操作。它将收件人、主题和正文作为输入参数,并将电子邮件发送给收件人。
尝试演示
这里,您将找到 LangChain 托管的 OpenGPTs 演示版本。它带有一个预配置的 Connery Runner 和我们演示所需的所有操作。您可以总结您喜欢的任何文章并将其发送到您的电子邮件,就像以下视频中所示 (请注意,出于演示目的,上下文窗口具有 16K 令牌限制)
幕后发生了什么?
以下是演示中幕后发生的简化过程
- 用户发送请求到 OpenGPT,提交提示。
- OpenGPT 拉取操作:OpenGPT 通过 LangChain 工具包连接到 Connery Runner,并请求所有可用的操作以及它们的元数据,如操作名称、描述、输入名称、描述等。
- Runner 准备操作:Runner 从它们的 GitHub 存储库下载每个插件的源代码,并在本地缓存以供以后使用。下载后,Runner 获取这些插件的所有可用操作,并将它们的信息发送回 OpenGPT。
- OpenGPT 调用操作:OpenGPT 使用操作的元数据来识别合适的操作及其输入参数,基于用户的提示。当操作被识别,并且 OpenGPT 决定执行它时,OpenGPT 向 Runner 发送请求。
- Runner 运行操作:Runner 从缓存加载插件的源代码,找到操作,并使用提供的参数运行它。当结果准备就绪时,Runner 将其返回给 OpenGPT。
- OpenGPT 使用结果:然后 OpenGPT 使用这些结果来完成其任务。它继续该过程,直到用户请求完成。这可能包括调用多个操作,如演示中所示。
使用 Connery 操作设置您自己的 OpenGPT
要配置您自己的 OpenGPT 和操作,请执行以下步骤
- 使用 快速入门指南设置 Connery Runner。
- 安装包含您想在代理中使用的操作的插件。
- Fork OpenGPTs 仓库 并按照 README 中的说明进行配置。
- 在 OpenGPTs 的
.env
文件中指定CONNERY_RUNNER_URL
和CONNERY_RUNNER_API_KEY
环境变量,以将其连接到您的 Connery Runner。
下一步
目前,我们正在构建上述提到的功能。我们很乐意听到您的反馈,以便优先考虑对社区最重要的功能。请在我们的 GitHub 讨论区 中告诉我们您的想法。
除了构建必要的功能外,我们计划在开源 Runner 之上提供托管服务。我们的目标是简化集成过程,并帮助更快地使用操作。
Connery 插件及其操作是独立的 GitHub 存储库。这使得共享和重用非常容易。有了这个,我们设想一个不断增长的去中心化开源插件生态系统,让开发者可以自由地创新和协作开发插件。第一个社区插件正在构建中。
如果您喜欢这个项目或想保持关注,请给 GitHub 仓库点个星标。