LazyLLM 是一个用于构建多智能体大语言模型应用的低代码开发工具。它帮助开发者以极低成本创建复杂的 AI 应用,并支持持续迭代优化。LazyLLM 提供了便捷的应用构建工作流,并为应用开发流程的各个阶段提供了众多标准流程和工具。
基于 LazyLLM 的 AI 应用开发流程遵循原型构建 -> 数据反馈 -> 迭代优化,这意味着你可以使用 LazyLLM 快速构建一个原型应用,然后利用任务特定数据来分析不良案例,随后在应用的关键阶段迭代算法和微调模型,以逐步提升整体应用性能。
LazyLLM 致力于敏捷与高效的统一。开发者可以高效地迭代算法,然后将迭代后的算法应用于工业生产,支持多用户、容错和高并发。
用户文档: https://docs.lazyllm.ai/
扫描下方二维码加入微信群聊(左)或观看视频了解更多(右)
便捷的 AI 应用组装流程:即使你不熟悉大模型,也能像搭乐高一样,利用我们内置的数据流和功能模块轻松组装出多智能体的 AI 应用。
一键部署复杂应用:我们提供了一键部署所有模块的能力。具体来说,在 POC(概念验证)阶段,LazyLLM 通过轻量级的网关机制简化了多智能体应用的部署过程,解决了需要依次启动每个子模块服务(如 LLM、Embedding 等)并配置 URL 的问题,使整个过程更加顺畅高效。在应用发布阶段,LazyLLM 提供了一键打包镜像的能力,便于利用 Kubernetes 的网关、负载均衡和容错能力。
跨平台兼容性:一键切换 IaaS 平台而无需修改代码,兼容裸金属服务器、开发机、Slurm 集群、公有云等。这使得开发的应用可以无缝迁移到其他 IaaS 平台,大大减少了代码修改的工作量。
统一不同技术选择的用户体验:我们为不同服务商的在线模型和本地部署的模型提供了统一的用户体验,允许开发者自由切换和升级模型进行实验。此外,我们还为主流的推理框架、微调框架、关系型数据库、向量数据库和文档数据库统一了用户体验。
高效的模型微调:支持在应用内部微调模型,以持续提升应用性能。根据微调场景自动选择最佳的微调框架和模型切分策略。这不仅简化了模型迭代的维护工作,也让算法研究人员能更专注于算法和数据迭代,而无需处理繁琐的工程任务。
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()
如果你使用 pip 安装了 lazyllm 并确保 Python 环境的 bin 目录在你的 $PATH 中,你可以通过执行 lazyllm run chatbot 快速启动一个聊天机器人。如果你想使用本地模型,需要使用 --model 参数指定模型名称。例如,你可以使用 lazyllm run chatbot --model=internlm2-chat-7b 启动一个基于本地模型的聊天机器人。
这是一个具有多模态和意图识别功能的高级机器人示例。
from lazyllm import TrainableModule, WebModule, deploy, pipeline
from lazyllm.tools import IntentClassifier
painter_prompt = '现在你是一位绘画提示词大师,能够将用户输入的任何中文内容转化为英文绘画提示词。在这个任务中,你需要将任何输入内容转化为英文绘画提示词,并且可以丰富和扩展提示词内容。'
musician_prompt = '现在你是一位音乐创作提示词大师,能够将用户输入的任何中文内容转化为英文音乐创作提示词。在这个任务中,你需要将任何输入内容转化为英文音乐创作提示词,并且可以丰富和扩展提示词内容。'
base = TrainableModule('internlm2-chat-7b')
with IntentClassifier(base) as ic:
ic.case['Chat', base]
ic.case['Speech Recognition', TrainableModule('SenseVoiceSmall')]
ic.case['Image QA', TrainableModule('InternVL3_5-1B').deploy_method(deploy.LMDeploy)]
ic.case['Drawing', pipeline(base.share().prompt(painter_prompt), TrainableModule('stable-diffusion-3-medium'))]
ic.case['Generate Music', pipeline(base.share().prompt(musician_prompt), TrainableModule('musicgen-small'))]
ic.case['Text to Speech', TrainableModule('ChatTTS')]
WebModule(ic, history=[base], audio=True, port=8847).start().wait()
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(), manager=False)
documents.create_node_group(name="sentences", transform=SentenceSplitter, chunk_size=1024, chunk_overlap=100)
with pipeline() as ppl:
with parallel().sum as ppl.prl:
prl.retriever1 = Retriever(documents, group_name="sentences", similarity="cosine", topk=3)
prl.retriever2 = Retriever(documents, "CoarseChunk", "bm25_chinese", 0.003, topk=3)
ppl.reranker = Reranker("ModuleReranker", model="bge-reranker-large", topk=1) | bind(query=ppl.input)
ppl.formatter = (lambda nodes, query: dict(context_str="".join([node.get_content() for node in nodes]), query=query)) | bind(query=ppl.input)
ppl.llm = lazyllm.OnlineChatModule(stream=False).prompt(lazyllm.ChatPrompter(prompt, extra_keys=["context_str"]))
lazyllm.WebModule(ppl, port=23466).start().wait()
这是一个本地部署示例:
documents = Document(dataset_path='/file/to/yourpath', embed=lazyllm.TrainableModule('bge-large-zh-v1.5'))
documents.create_node_group(name="sentences", transform=SentenceSplitter, chunk_size=1024, chunk_overlap=100)
with pipeline() as ppl:
with parallel().sum as ppl.prl:
prl.retriever1 = Retriever(documents, group_name="sentences", similarity="cosine", topk=3)
prl.retriever2 = Retriever(documents, "CoarseChunk", "bm25_chinese", 0.003, topk=3)
ppl.reranker = Reranker("ModuleReranker", model="bge-reranker-large", topk=1) | bind(query=ppl.input)
ppl.formatter = (lambda nodes, query: dict(context_str="".join([node.get_content() for node in nodes]), query=query)) | bind(query=ppl.input)
ppl.llm = lazyllm.TrainableModule("internlm2-chat-7b").prompt(lazyllm.ChatPrompter(prompt, extra_keys=["context_str"]))
lazyllm.WebModule(ppl, port=23456).start().wait()
https://github.com/LazyAGI/LazyLLM/assets/12124621/77267adc-6e40-47b8-96a8-895df165b0ce
如果你使用 pip 安装了 lazyllm 并确保 Python 环境的 bin 目录在你的 $PATH 中,你可以通过执行 lazyllm run rag --documents=/file/to/yourpath 快速启动一个检索增强机器人。如果你想使用本地模型,需要使用 --model 参数指定模型名称。例如,你可以使用 lazyllm run rag --documents=/file/to/yourpath --model=internlm2-chat-7b 启动一个基于本地模型的检索增强机器人。
更多示例,请参考我们的官方文档 使用示例
* 绘画大师
* 多模态聊天机器人
* 知识库
* 搜索智能体
* API 交互智能体
* 工具调用智能体
如果只安装 lazyllm 和必要的依赖,可以使用:
pip3 install lazyllm
如果要安装 lazyllm 和所有依赖,可以使用:
pip3 install lazyllm
lazyllm install full
git clone git@github.com:LazyAGI/LazyLLM.git
cd LazyLLM
pip install -r requirements.txt
在 Windows 或 macOS 上安装,请参考我们的教程
LazyLLM 的设计理念源于对大模型当前在生产环境中局限性的深刻理解。我们认识到,现阶段大模型尚无法端到端地完全解决所有实际问题。因此,基于 LazyLLM 的 AI 应用开发流程强调“快速构建原型、利用场景特定数据分析不良案例、进行算法实验、在关键环节微调模型以提升整体应用性能”。LazyLLM 处理了此过程中涉及的繁琐工程工作,提供了便捷的接口,让用户可以专注于提升算法效果和打造出色的 AI 应用。
LazyLLM 的目标是让算法研究人员和开发者从复杂的工程实现中解放出来,专注于他们最擅长的事情:算法和数据,以及解决实际问题。无论你是初学者还是经验丰富的专家,我们都希望 LazyLLM 能为你提供一些帮助。对于新手开发者,LazyLLM 彻底简化了 AI 应用开发流程。他们不再需要担心如何在不同 IaaS 平台上调度任务、理解 API 服务构建的细节、在微调时选择框架或切分模型,或者掌握任何网页开发知识。借助预构建的组件和简单的集成操作,新手开发者可以轻松创建具有生产价值的工具。对于资深专家,LazyLLM 提供了高度的灵活性。每个模块都支持定制和扩展,使用户能够无缝集成自己的算法和最先进的生产工具,以构建更强大的应用。
为了防止你被依赖的辅助工具的实现细节所困扰,LazyLLM 努力确保相似模块的用户体验一致。例如,我们建立了一套 Prompt 规则,为在线模型(如 ChatGPT、SenseNova、Kimi、ChatGLM 等)和本地模型提供了统一的使用方法。这种一致性使你可以轻松灵活地在应用中的本地模型和在线模型之间切换。
与市场上大多数框架不同,LazyLLM 在每个阶段都精心挑选并整合了我们认为最具优势的 2-3 个工具。这不仅简化了用户的决策过程,还确保用户能够以最低成本构建最高效的应用。我们不追求工具或模型的数量,而是注重质量和实际效果,致力于提供最优解决方案。LazyLLM 旨在为 AI 应用开发提供一条快速、高效、低门槛的路径,释放开发者的创造力,并推动 AI 技术在实际生产中的采用和普及。
最后,LazyLLM 是一个以用户为中心的工具。如果你有任何想法或反馈,请随时给我们留言。我们将尽力解决你的问题,确保 LazyLLM 为你提供所需的便利。

组件是 LazyLLM 中最小的执行单元;它可以是一个函数或一个 bash 命令。组件具有三种典型能力:
1. 使用启动器进行跨平台执行,实现无缝用户体验:
- EmptyLauncher:在本地运行,支持开发机、裸金属等。
- RemoteLauncher:在计算节点上调度执行,支持 Slurm、SenseCore 等。
2. 实现了用于分组和快速定位方法的注册机制。支持函数和 bash 命令的注册。以下是一个示例:
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 | 可以将函数、模块、流等包装成一个 Module | 支持通过 ActionModule 对其子模块进行训练/微调 | 支持通过 ActionModule 对其子模块进行部署 | ✅ | ✅ |
| UrlModule | 将任何 URL 包装成一个 Module 以访问外部服务 | ❌ | ❌ | ✅ | ✅ |
| ServerModule | 将任何函数、流或 Module 包装成 API 服务 | ❌ |