LLM 应用参考架构:ArchGuard Co-mate 实践示例

这篇具有很好参考价值的文章主要介绍了LLM 应用参考架构:ArchGuard Co-mate 实践示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着,对于 LLM 应用于架构领域探索的进一步深入,以及 ArchGuard Co-mate 开发进入深入区,我们发现越来越多的通用模式。

在先前的文章里,我们总结了一系列的设计原则,在这篇文章里,我们将介绍 ArchGuard Co-mate 与参考架构的实践。

开始之前,可以先看看 ArchGuard Co-mate 的演示视频:

LLM 应用参考架构

结合我们在一些 LLM PoC 项目的经验,以及网上的公开资料,我重新汇制了一个 LLM 应用的参考架构图:

LLM 应用参考架构:ArchGuard Co-mate 实践示例

LLM 参考架构

由 ChatGPT 解释如下:

  • UI 层:用户界面层,提供给用户与语言模型交互的界面,可以是网页、移动应用、命令行界面等。

  • 会话处理层:处理用户与语言模型之间的交互会话,包括对用户输入的解析、对话管理、上下文维护等功能。

  • 数据审计层:负责对用户数据进行审计和保护,防止数据泄露、滥用或被攻击。这个层次也可以包括对模型的安全性和可信度进行评估。

  • 操作编排层:这个层级可以管理和协调多个语言模型、工具、智能体的运行,比如多个模型之间的调用、结果的融合等。它可以作为一个简单的流程引擎,将多个模型组合成复杂的工作流程。

  • LLM 增强层:这个层级可以对语言模型进行额外的优化和增强,比如加速推理速度、提供相关上下文、提高模型的准确性、支持特定的任务等。这个层级也可以包括对模型解释性和可解释性的增强。

  • LLM 层:最底层是语言模型本身,它是整个架构的核心。它可以是一个基于深度学习的模型,比如 LSTM、Transformer 等,也可以是一个基于传统 NLP 技术的模型。在这个层级,模型会接收输入并输出相应的文本结果。

在 ArchGuard Co-mate 中,每一个层对应了不同的设计理念/设计原则,如:

  • UI:用户意图导向设计

  • 会话处理层:语言接口

  • 操作编排层:语言接口 + 上下文工程

  • LLM 增强层:语言接口

  • LLM 层:原子能力映射

  • 数据审计层:(由于 ArchGuard 的场景限制,我们并没有设计这一层。

围绕于不同层级需要考虑不同的技术实践。

LLM 应用参考架构示例:ArchGuard Co-mate

ArchGuard Co-mate 是一个 LLM + 架构设计与治理的探索性项目,旨在探索 LLM 作为架构师助手的可能性,并围绕 LLM 来探索架构的未来,诸如于本地语义分析、动态上下文收集 API、架构规范检查等。

详细代码见:https://github.com/archguard/co-mate

UI 层:用户意图导向设计

由于 Co-mate 并不是一个通用能力的系统,所以我们希望限制用户使用 ChatGPT 的能力。除此,在 UI 层上,我们尝试去引导客户来了解系统的能力。

诸如于,为了构建目标系统的上下文,我们需要先 clone 代码、进行基本的代码分析,所以我们需要引导用户:

LLM 应用参考架构:ArchGuard Co-mate 实践示例

Co-mate 引导用户

随后,根据用户的输入分析,以分析适合的系统功能是什么,返回给用户来确认。我们将其称为:请求-生成 UI-确认模式

LLM 应用参考架构:ArchGuard Co-mate 实践示例

Comate Action

而为了提供及时的返回给用户,我们设计的 DSL 改为流式 DSL,即可以实时解析这个 DSL,并及时响应给用户,以显性的告诉用户:系统正在处理您的请求。

会话处理层:本地小模型

在 Co-mate 中,我们在本地引入了 SentenceTransformer 来处理用户的输入,优先在本地分析、匹配用户的输入,并处理。当匹配到结果后直接调用本地的函数,当匹配不到结果时调用远端的处理函数来处理。

在原理上主要是参考了 GitHub Copilot、 Bloop 的实现,通过本地的小模型来处理用户的输入,然后再通过远端的大模型来处理用户的输入。

在这里,需要用到两个核心组件:

  • Onnx Runtime,是一个跨平台推理和训练机器学习加速器。

  • HuggingFace Tokenizers,提供当今最常用的分词器的实现,重点关注性能和多功能性。

从某种程度上来说,它们也算是 LLM 增强层的一部分,只是我尝试用来在处理会话请求,以直接调用系统的功能,并返回给用户。诸如于:

mapOf(
    ComateCommand.Intro to basicIntroCommand.map { semantic.embed(it) },
    ComateCommand.LayeredStyle to archStyleCommand.map { semantic.embed(it) },
    ComateCommand.ApiGovernance to apiGovernanceCommand.map { semantic.embed(it) },
    ComateCommand.ApiGen to apiGenCommand.map { semantic.embed(it) },
    ComateCommand.FoundationGovernance to foundationGovernanceCommand.map { semantic.embed(it) },
)

针对所有潜在的、相似的命令在本地进行一次简单的检索。

数据审计层:(暂时没有)

由于懒,以及其它原因,我们暂时没有添加这个功能。

操作编排层:函数即操作

而为了将上述的用户指令转换为对应的系统指令,我们需要结合系统提供的函数功能,交由 LLM 来分析潜在的调用函数是哪一个。

于是,我们参考了 LangChain 的实现,构建了一个轻量级的 API,用来分析用户的输入。当用户输入上述的 Introduce the system … 指令时,我们将通过反射生成函数信息、并生成如下的 prompt,交由 LLM 分析:

Answer the following questions as best you can. You have access to the following tools:
introduce_system: introduce_system is a function to introduce a system.
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [introduce_system]
Action Input: the input to the action (parse from the user input, don't add other additional information)
// end in here. the tool will handle the rest
Begin!
Question: Introduce the following system: https://github.com/archguard/ddd-monolithic-code-sample

是的,这就是一个手动版的 LangChain 实现。而每一个 “函数” 在实现上其实是一个类 —— 为了能通过反射来创建出这个函数,并实现对应的接口调用。然后,将类名转换为 snake_case 方式,如下代码所示:

val defaultConstructor = clazz.declaredConstructors[0]
val dyFunction = defaultConstructor.newInstance(context) as DyFunction
clazz.name.toSnakeCase() to dyFunction

随后,返回对应的函数和输入信息给用户,由用户决定是否调用这个函数。

另外一方面,在 ArchGuard Co-mate 里,我们通过 DSL 来编排功能,而这个 DSL 是由 Kotlin 编写的,并且可以由 ChatGPT 生成的。所以,我们构建了一个基于 DSL 的编排运行时:

// 初始化运行时
val repl = KotlinInterpreter()
val mvcDslSpec = repl.evalCast<FoundationSpec>(InterpreterRequest(code = mvcFoundation))
// 从选择的输入中获取 action
val action = ComateToolingAction.from(action.lowercase())
// 添加默认的 DSL 规范,如 MVC 分层规范
if (action == ComateToolingAction.FOUNDATION_SPEC_GOVERNANCE) {
    comateContext.spec = mvcDslSpec
}

当用户没有提供一个架构规范相关的函数时,我们将会生成一个 foundation spec,诸如于默认的 MVC 分层架构的规范。随后,从系统中构建更多的上下文,再交由 LLM 去分析。

LLM 增强层:借助 LLM 构建精准、简洁的上下文

从意图上来说,LLM 增强层所做的是,根据用户的输入匹配相关的信息,以构建完整的上下文。对于知识型系统来说,通常会借助矢量数据库来实现。而在一些上下文确定的系统来说,也可以借助本地小模型在本地进行计算。

诸如于 GitHub Copilot 会在本地,根据打开的 tab,来计算相关的代码文件,而不需要提前的 index。毕竟,全局的代码 index 会出现一个问题,与当前用户关注的文件上下文出现不匹配性。所以,用户打开的 tab,就是用户潜在的上下文,以些进行分析结果会比较准确。

另外一个场景是 Bloop 会提前对代码的信息(如类名、函数名)进行 index,以在用户输入问题时,寻找与问题匹配的代码,再交由 LLM 进行分析。

而在 Co-mate 中,我们是在本地预存一些潜在的用户输入指令,以降低对服务端的请求。

在另外一个层面上,我们还可以借助 LLM 来进行对应的上下文简化,特别是当我们的上下文超长时,就可以以类似的方式来进行精简。诸如于,在 Co-mate 中我们会借助 GPT 来拆解用户的文档,变为 DSL 的方式。

LLM 层:流式代理接口

在 LLM 层,除了关注于历史数据之外,我们还需要关注于响应反处理,并提供诸如于流式接口的代理等等。

小结

最后由 Notion AI 帮我们做一个小结:

本文介绍了一个 LLM 应用参考架构:ArchGuard Co-mate 实践示例。架构包括 UI 层、会话处理层、操作编排层、LLM 增强层和 LLM 层。文章详细介绍了每个层级的设计理念和技术实践,并提供了示例代码。其中,会话处理层使用本地小模型处理用户输入,操作编排层使用反射生成函数信息,LLM 增强层借助 LLM 构建精准、简洁的上下文,LLM 层提供流式代理接口等等。文章来源地址https://www.toymoban.com/news/detail-504318.html

到了这里,关于LLM 应用参考架构:ArchGuard Co-mate 实践示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为mate60麒麟9000s的架构体系

     

    2024年02月09日
    浏览(41)
  • 大模型LLM在 Text2SQL 上的应用实践

    一、前言 目前,大模型的一个热门应用方向Text2SQL,它可以帮助用户快速生成想要查询的SQL语句,再结合可视化技术可以降低使用数据的门槛,更便捷的支持决策。本文将从以下四个方面介绍LLM在Text2SQL应用上的基础实践。 · Text2SQL概述 · LangChain基础知识 · 基于SQLDatabaseCha

    2024年01月16日
    浏览(42)
  • OpenAI LLM 应用最佳实践:提示词工程、Fine-Tune、RAG

    一、背景 本文介绍了 2023 年 11 月 OpenAI DevDay 中的一个演讲,演讲者为 John Allard 和 Colin Jarvis。演讲中,作者对 LLM 应用落地过程中遇到的问题和相关改进方案进行了总结。虽然其中用到的都是已知的技术,但是进行了很好的总结和串联,并探索了一条改进 LLM 应用的切实可行

    2024年03月11日
    浏览(39)
  • 【架构实战】如何通过 langchain 把LLM大模型能力集成到企业应用中?

    本文为您提供关于如何通过 langchain 把 LLM 大模型能力集成到企业应用中的详细实践指南。在本文中,我将简要介绍 LLM 模型及其能力,并提供一种基于 langchain 的解决方案,以便企业可以将 LLM 模型集成到其应用程序中。 LLM(Language Model)是一种基于深度学习的语言模型,它可

    2024年02月07日
    浏览(45)
  • Time-LLM:为时间序列预测重新编程LLM 探索Time-LLM的架构,并在Python中将其应用于预测项目

    参考资料:Time-LLM/ Reprogram an LLM for Time Series Forecasting.md 研究人员尝试将自然语言处理(NLP)技术应用于时间序列领域并非首次。 例如,Transformer架构在NLP领域是一个重要的里程碑,但其在时间序列预测方面的表现一直平平,直到PatchTST的提出。 正如您所知,大型语言模型(

    2024年04月25日
    浏览(52)
  • 【AI 大模型】a16z:LLM 应用程序的新兴架构:Emerging Architectures for LLM Applications

    目录 LLM 应用程序的新兴架构:Emerging Architectures for LLM Applications The stack 技术堆栈 

    2024年02月09日
    浏览(28)
  • 大模型 LLM RAG在 Text2SQL 上的应用实践

    1. 前言 在上篇文章中「LLM Agent在Text2SQL应用上的实践」介绍了基于AI Agent来优化LLM的Text2SQL转换效果的实践,除此之外我们还可以使用RAG(Retrieval-Augmented Generation)来优化大模型应用的效果。 本文将从以下4个方面探讨通过RAG来优化LLM的Text2SQL转换效果。 1. RAG概述 2. 基于LangC

    2024年02月02日
    浏览(38)
  • AI大模型开发架构设计(2)——AI绘画技术架构&应用实践

    1 AI绘画整体流程 第一步:输入 Prompt 提示词: /mj 提示词 第二步:文生图(Text-to-Image)构图 第三步:图片渲染 第四步:图片展示 2 AI绘画技术架构 文生图核心算法原理 把人类创造的内容用一个高维的数学向量进行表示 如果内容到向量的“翻译” 足够合理 且能 代表内容的特

    2024年01月25日
    浏览(49)
  • 整洁架构在前端的设计思想与应用实践

    对于每个软件系统,我们都可以通过行为和架构两个维度来体现它的实际价值。 行为是指系统实现的功能特性,一般是比较紧急的,需要按时上线。架构就是指系统架构,是重要的,但是并不总是特别紧急。因此导致我们常常忽视系统的架构价值,使得系统越来越难于理解、

    2024年02月08日
    浏览(44)
  • 缓存解析:从架构设计到Redis应用及最佳实践

    在现代软件架构中,缓存是优化数据检索、提高应用性能的关键组件。缓存的存储位置多种多样,每个位置针对特定的优化目标和需求。理解这些层级对于设计高效的系统至关重要。 浏览器缓存 :这是最接近用户端的缓存层。浏览器缓存存储了用户经常访问的静态资源,如

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包