如何构建基于大模型的App( 二 )

  • LLM是无状态的 , 没有代理功能 。
  • 相反 , 我们需要使用自己的专有数据和知识构建护城河,需要减少不必要的调用,并在可能的情况下使用更便宜的模型,还需要迭代地编排和自动化底层LLM,以改进任务规划和推理能力 。
    那么,面对基于大模型的App, 是否存在通用性或具有指导性的参考架构呢?
    3. 大模型App 的系统架构思考基于LLM 的应用开发框架(例如LangChain)提供了围绕大模型构建应用程序的结构化方法 。但是 , 这里从抽象层尝试给出大模型App 的系统架构 。
    如何构建基于大模型的App

    文章插图
    3.1 应用编排器编排器简单地位于应用程序栈的下方,并将其他模块连接在一起 。其中 , 构建多租户组件非常重要 。这将确保:
    • 为每个用户进行个性化设置
    • 隐私保护,确保只为正确的用户检索记忆,上下文等 。
    而且 , 以下的每个模块都需要考虑多个多租户实例的设计 。
    3.2 任务计划器一个不错的方法是获得用户的请求/目标 , 并使用模型将其分解为子任务 。每个子任务可以根据应用程序进一步分解为较小的任务/目标 。这是一个持续的过程 , 随着用户完成目标,LLM可以用于扩展当前任务和子任务,或者修剪不再必要的任务 。许多框架和开源项目都提供此类功能,一个典型的示例可能是AutoGPT 。
    一般地,可以按以下方式进行处理:
    • 获取用户目标并将其发送到具有良好推理功能的LLM
    • 提示LLM将其分解为子任务并返回为JSON列表
    • 将子任务保存到数据库中
    • 应用程序可以根据子任务更新用户界面
    • 根据需要迭代为较小的子任务
    3.3 上下文数据向量存储一般地,我们可能不应该在目标应用程序中使用预训练的LLM知识,而是为每个提示提供任何必要的上下文信息,并指定LLM仅基于提示中包含的信息进行响应 。这将确保响应与目标应用程序和用例相关 。通过使用向量嵌入和向量数据库,可以根据语义检索每个提示的子集的上下文数据,从而实现更高的效率 , 提升性能并降低成本 。
    该方法如下所示:
    • 每当有新的上下文信息时,将其分成若干部分,并使用LLM生成向量嵌入 。然后将嵌入存储在向量数据库中,还将在每个嵌入中存储附加信息(例如URL、图像、源文本等) 。
    • 在向LLM发送请求之前,始终将请求作为查询发送到向量存储中 。获取前N个相关结果并将它们添加到请求提示中,指定LLM应仅使用提示中的信息 , 然后提交提示词 。
    • 收到响应后,将其与发送的上下文数据进行比较,确保没有幻觉并且它与目标应用程序的数据相关 。
    • 进行迭代,其中响应用于生成对向量数据库的新查询 , 然后使用结果作为下一个LLM的提示词 。
    • 还可以要求LLM生成一个查询到向量存储,以获取所需的附加信息 。
    【如何构建基于大模型的App】需要要注意的,从向量数据库接收到的记录除了文本之外还包含其他数据,可能是图像、URL、视频URL等,目标应用程序可以使用此信息增强用户界面的响应 。
    3.4  记忆型数据的向量存储记忆型数据的向量存储类似于上下文数据的向量存储,但是,它由先前使用应用程序生成的LLM提示和响应的键值对进行填充 。目标是允许LLM参考以前的交互,以个性化用户需求并引导走向正确的方向 。
    记忆数据也可以使用时间戳、位置等进行标记,以允许过滤或对相关记忆数据的修剪 。
    一般用例: