LazyLLM: 一个用于构建多代理LLM应用的低代码开发工具。
什么是LazyLLM?
LazyLLM是一个用于构建多代理LLM(大型语言模型)应用的低代码开发工具。它帮助开发者以极低的成本创建复杂的AI应用,并实现持续迭代优化。LazyLLM为应用构建提供了便捷的工作流程,并为应用开发过程的各个阶段提供了众多标准流程和工具。
基于LazyLLM的AI应用开发过程遵循原型构建 -> 数据反馈 -> 迭代优化的工作流程。这意味着你可以使用LazyLLM快速构建一个原型应用,然后利用特定任务的数据分析不良案例,接着在应用的关键阶段迭代算法并微调模型,以逐步提升整体性能。
教程:https://docs.lazyllm.ai/
近期计划: v0.2 PRD
扫描下方二维码加入微信群聊
特性
便捷的AI应用组装过程:即使你不熟悉大型模型,也可以使用我们内置的数据流和功能模块,像搭积木一样轻松组装多代理的AI应用。
复杂应用的一键部署:我们提供了一键部署所有模块的能力。尤其是在POC(概念验证)阶段,LazyLLM通过轻量级网关机制简化了多代理应用的部署过程,解决了依次启动各个子模块服务(如LLM、Embedding等)并配置URL的问题,使整个过程更加顺畅和高效。在应用发布阶段,LazyLLM提供了一键打包镜像的功能,便于利用Kubernetes的网关、负载均衡和容错能力。
跨平台兼容性:一键切换IaaS平台无需修改代码,兼容裸金属服务器、开发机器、Slurm集群、公共云等。这使得开发的应用可以无缝迁移到其他IaaS平台,大大减少了代码修改的工作量。
支持网格搜索参数优化:根据用户配置自动尝试不同的基础模型、检索策略和微调参数,以评估和优化应用。这使得超参数调优变得高效,无需对应用代码进行大量的侵入式修改,帮助用户快速找到最佳配置。
高效的模型微调:支持应用内的模型微调,以持续提高应用性能。根据微调场景自动选择最佳的微调框架和模型切分策略。这不仅简化了模型迭代的维护工作,还允许算法研究人员更多地专注于算法和数据迭代,而不需要处理繁琐的工程任务。
LazyLLM可以构建什么
LazyLLM可用于构建常见的人工智能应用。以下是一些示例。
聊天机器人
这是一个简单的聊天机器人示例。
# 设置环境变量:LAZYLLM_OPENAI_API_KEY=xx
# 或者你可以创建一个配置文件(~/.lazyllm/config.json)并添加openai_api_key=xx
import lazyllm
chat = lazyllm.OnlineChatModule()
lazyllm.WebModule(chat).start().wait()
如果你想使用本地部署的模型,请确保你已安装至少一个推理框架(lightllm或vllm),然后使用以下代码
import lazyllm
# 如果有网络连接,模型将自动下载。
chat = lazyllm.TrainableModule('internlm2-chat-7b')
lazyllm.WebModule(chat, port=23466).start().wait()
这是一个带有多模态和意图识别的高级机器人示例。
点击查看提示词和导入
from lazyllm import TrainableModule, WebModule, deploy, pipeline, switch, _0
chatflow_intent_list = ["聊天", "语音识别", "图片问答", "绘画", "生成音乐", "文本转语音"]
agent_prompt = f"""
你现在是一个意图分类引擎,负责根据对话信息分析用户输入的文本并确定一个唯一的意图类别。\n只回复意图的名称,不输出任何其他字段,也不要翻译。"intent_list" 是所有意图名称的列表。\n
如果输入中包含附件,请优先根据附件文件扩展名确定意图:如果是.jpg、.png等图片扩展名,则输出:图片问答;如果是.mp3、.wav等音频扩展名,则输出:语音识别。
## intent_list:\n{chatflow_intent_list}\n\n## 示例\n用户: 你好\n助手: 聊天
"""
painter_prompt = '你现在是绘画提示词大师,能够将用户输入的任何中文内容转换为英文绘画提示词。在这个任务中,你需要将任何输入内容转换为英文绘画提示词,并且可以丰富和扩展提示词的内容。'
musician_prompt = '你现在是音乐创作提示词大师,能够将用户输入的任何中文内容转换为英文音乐创作提示词。在这个任务中,你需要将任何输入内容转换为英文音乐创作提示词,并且可以丰富和扩展提示词的内容。'
base = TrainableModule('internlm2-chat-7b').prompt(agent_prompt)
chat = base.share().prompt()
with pipeline() as ppl:
ppl.cls = base
ppl.cls_normalizer = lambda x: x if x in chatflow_intent_list else chatflow_intent_list[0]
with switch(judge_on_full_input=False).bind(_0, ppl.input) as ppl.sw:
ppl.sw.case[chatflow_intent_list[0], chat]
ppl.sw.case[chatflow_intent_list[1], TrainableModule('SenseVoiceSmall')]
ppl.sw.case[chatflow_intent_list[2], TrainableModule('internvl-chat-2b-v1-5').deploy_method(deploy.LMDeploy)]
ppl.sw.case[chatflow_intent_list[3], pipeline(base.share().prompt(painter_prompt), TrainableModule('stable-diffusion-3-medium'))]
ppl.sw.case[chatflow_intent_list[4], pipeline(base.share().prompt(musician_prompt), TrainableModule('musicgen-small'))]
ppl.sw.case[chatflow_intent_list[5], TrainableModule('ChatTTS')]
WebModule(ppl, history=[chat], audio=True, port=8847).start().wait()
RAG
点击查看提示词和导入
import os
import lazyllm
from lazyllm import pipeline, parallel, bind, SentenceSplitter, Document, Retriever, Reranker
prompt = '你将扮演一个AI问答助手的角色并完成对话任务。在这个任务中,你需要根据给定的上下文和问题提供答案。'
这是一个在线部署示例:
documents = Document(dataset_path="your data path", embed=lazyllm.OnlineEmbeddingModule(), create_ui=False
LazyLLM 的设计理念源于对当前大模型在生产环境中局限性的深刻理解。我们认识到,在现阶段,大模型尚不能完全解决所有实际问题。因此,基于 LazyLLM 的 AI 应用开发过程强调“快速原型开发、使用特定场景数据进行坏例分析、算法实验以及针对关键方面进行模型微调以提高整体应用性能”。LazyLLM 处理了这一过程中繁琐的工程工作,提供了便捷的接口,让用户能够专注于提升算法效果并创建出色的 AI 应用。
LazyLLM 的目标是让算法研究人员和开发人员摆脱复杂的工程实现,使他们能够专注于自己最擅长的领域:算法和数据,并解决实际问题。无论你是初学者还是经验丰富的专家,我希望 LazyLLM 能为你提供一些帮助。对于新手开发者,LazyLLM 彻底简化了 AI 应用开发过程。他们不再需要担心如何在不同的 IaaS 平台上调度任务,理解 API 服务构建的细节,选择框架或在微调时拆分模型,或掌握任何 Web 开发知识。通过预构建组件和简单的集成操作,新手开发者可以轻松创建具有生产价值的工具。对于经验丰富的专家,LazyLLM 提供了高度的灵活性。每个模块都支持定制和扩展,使用户能够无缝集成自己的算法和最先进的生产工具,构建更强大的应用。
为了防止你被依赖辅助工具的实现细节拖累,LazyLLM 力求在类似模块间确保一致的用户体验。例如,我们建立了一套提示规则,为在线模型(如 ChatGPT、SenseNova、Kimi、ChatGLM 等)和本地模型提供统一的使用方法。这种一致性使你能够在应用中轻松灵活地在本地和在线模型之间切换。
与市场上大多数框架不同,LazyLLM 在每个阶段仔细选择并集成了我们认为最有优势的 2-3 种工具。这不仅简化了用户的决策过程,还确保用户能以最低的成本构建最具生产力的应用。我们不追求工具或模型的数量,而是注重质量和实际效果,致力于提供最佳解决方案。LazyLLM 旨在为 AI 应用开发提供一条快速、高效且低门槛的路径,释放开发者的创造力,并推动 AI 技术在现实生产中的应用和普及。
最后,LazyLLM 是一个以用户为中心的工具。如果你有任何想法或反馈,请随时给我们留言。我们将尽力解决你的问题,确保 LazyLLM 为你提供所需的便利。
## 架构
![架构](https://yellow-cdn.veclightyear.com/2b54e442/da550172-f3ba-4b9e-a2ef-80a667eb7b7e.png)
## 基本概念
### 组件
组件是 LazyLLM 中最小的执行单元,可以是一个函数或一个 bash 命令。组件具有三个典型功能:
1. 通过启动器实现跨平台执行,确保无缝的用户体验:
- EmptyLauncher:本地运行,支持开发机器、裸机等。
- RemoteLauncher:调度计算节点上的执行,支持 Slurm、SenseCore 等。
2. 实现了注册机制,用于分组和快速定位方法。支持函数和 bash 命令的注册。下面是一个示例:
```python
import lazyllm
lazyllm.component_register.new_group('demo')
@lazyllm.component_register('demo')
def test(input):
return f'input is {input}'
@lazyllm.component_register.cmd('demo')
def test_cmd(input):
return f'echo input is {input}'
# >>> lazyllm.demo.test()(1)
# 'input is 1'
# >>> lazyllm.demo.test_cmd(launcher=launchers.slurm)(2)
# Command: srun -p pat_rd -N 1 --job-name=xf488db3 -n1 bash -c 'echo input is 2'
模块
模块是 LazyLLM 中的顶级组件,具有训练、部署、推理和评估四个关键功能。每个模块可以选择实现这些功能中的某些或全部,并且每个功能可以由一个或多个组件组成。如下表所示,我们内置了一些基本模块供大家使用。
功能 | 训练/微调 | 部署 | 推理 | 评估 | |
---|---|---|---|---|---|
ActionModule | 可以将函数、模块、流程等封装成一个模块 | 支持通过 ActionModule 对其子模块进行训练/微调 | 支持通过 ActionModule 部署其子模块 | ✅ | ✅ |
UrlModule | 将任何 URL 封装成一个模块以访问外部服务 | ❌ | ❌ | ✅ | ✅ |
ServerModule | 将任何函数、流程或模块封装成一个 API 服务 | ❌ | ✅ | ✅ | ✅ |
TrainableModule | 可训练模块,所有支持的模型都是可训练模块 | ✅ | ✅ | ✅ | ✅ |
WebModule | 启动一个多轮对话界面服务 | ❌ | ✅ | ❌ | ✅ |
OnlineChatModule | 集成在线模型的微调和推理服务 | ✅ | ✅ | ✅ | ✅ |
OnlineEmbeddingModule | 集成在线 Embedding 模型的推理服务 | ❌ | ✅ | ✅ | ✅ |
流程
LazyLLM 中的流程定义了数据流,描述了数据如何从一个可调用对象传递到另一个可调用对象。你可以使用流程直观、高效地组织和管理数据流。基于各种预定义的流程,我们可以轻松地使用模块、组件、流程或任何可调用对象构建和管理复杂的应用程序。目前 LazyLLM 中实现的流程包括 Pipeline、Parallel、Diverter、Warp、IFS、Loop 等,几乎可以覆盖所有应用场景。使用流程构建应用程序有以下优势:
- 你可以轻松组合、添加和替换各种模块和组件;流程的设计使得添加新功能变得简单,并促进不同模块甚至项目之间的协作。
- 通过标准化的接口和数据流机制,流程减少了开发人员在处理数据传输和转换时面临的重复工作。开发人员可以更多地专注于核心业务逻辑,从而提高整体开发效率。
- 一些流程支持异步处理和并行执行,在处理大规模数据或复杂任务时显著提升响应速度和系统性能。
路线图
我们计划在七月底前支持以下功能:
RAG
- 重构 RAG 模块以去除对 llamaindex 的依赖
- 支持在线解析器
应用的一键部署
- 支持一键生成 Docker,一键启动应用,支持高并发和容错
模型服务
- 继续支持预训练和 RLHF
- 支持模型推理过程中的多重推理服务,并实现负载均衡
- 支持文本生成图像和图文问答模型,包括 VQA 和 SD
- 支持语音模型,包括 TTS 和 STT
工具
- 支持 Function-Call & Agent
- 集成常用搜索引擎
- 支持常用格式化工具
- 提供常见场景的提示模板
用户体验优化
- 优化数据在流程中的流动,支持灵活的数据流