Skip to content

Releases: LazyAGI/LazyLLM

v0.7.1

23 Dec 09:09
8a47887

Choose a tag to compare

LazyLLM v0.6.1 - v0.7.1

简要介绍

LazyLLM v0.7.1 相较于 v0.6.1 实现了重大飞跃,在智能体能力、RAG 基础设施及模型部署灵活性方面均有显著增强。本次发布通过支持新型存储供应商(Elasticsearch、OceanBase)扩展了生态系统,并整合了更多在线模型提供商(SiliconFlow、MiniMax)。全新引入的综合缓存系统有效提升了性能表现。 Agent模块、文档解析服务及启动系统均进行了重大重构,显著提升了代码可维护性与清晰度。通过大量性能优化,本版本在保持向后兼容性的同时,实现了更优的稳定性和用户体验。

亮点

本次发布引入多项重大增强,拓展了LazyLLM的功能并提升开发者体验:

  • 重大变更:Agent模块重构 - lazyllm.tools.agent 模块经全面重构以提升可维护性与清晰度。
  • 扩展存储支持 - 新增与ElasticsearchOceanBase的集成,作为存储后端提供更多可扩展的RAG(检索增强生成)部署选项。
  • 新增在线模型提供商 - 集成支持SiliconFlowMiniMax,用户可通过统一的lazyllm.OnlineChatModule接口直接访问更广泛的第三方大语言模型API。
  • 统一缓存系统 - 引入全面缓存框架,通过减少系统冗余计算和API调用优化性能。
  • 增强文档处理能力 - 对文档解析服务(lazyllm.tools.rag.parsing_service)进行重大改进,提升处理RAG管道中各类文件格式的可靠性与灵活性。

新功能

本次发布在存储服务选型、在线模型提供商、缓存、提示工程、GraphRAG部署、记忆框架(Memory)及文档处理等模块引入了大量新功能。

存储集成

  • Elasticsearch存储 ([#729]):专为RAG设计的可扩展分布式文档存储,实现LazyLLMStoreBase接口并支持完整CRUD及搜索操作。需配合elasticsearch<7.17.12使用。
  • OceanBase存储 ([#828]):新增向量存储,支持带HNSW、IVF和FLAT索引的稠密/稀疏向量。需安装pyobvectorsqlalchemy

新增在线模型选型

  • 硅基流动(SiliconFlow)集成 ([#793]):为OnlineChatModuleOnlineEmbeddingModuleOnlineMultiModalModule新增数据源(source='siliconflow'),支持聊天、嵌入、重新排序、文本转图像及文本转语音功能。
    import lazyllm
    chat = lazyllm.OnlineChatModule(source='siliconflow', model='Qwen/QwQ-32B')
    tts = lazyllm.OnlineMultiModalModule(source='siliconflow', function='tts')
  • MiniMax 集成 ([#841]): 为聊天、文本转图像和语音合成新增源(source='minimax')。文本转图像功能支持 response_format='url''base64' 格式。
    import lazyllm
    chat = lazyllm.OnlineChatModule(source='minimax')
    image_gen = lazyllm.OnlineMultiModalModule(source='minimax', function='text2image')

缓存系统

  • 统一模块缓存 ([#744]):支持内存、文件、SQLite 和 Redis 后端的综合模块缓存系统。通过环境变量 LAZYLLM_CACHE_STRATEGY.use_cache() 方法进行配置。
    import lazyllm
    m = lazyllm.TrainableModule('internlm2-chat-7b').use_cache()
    chat = lazyllm.OnlineChatModule().use_cache()
  • 测试优化 ([#766]):通过基于提示词和文件内容的智能缓存键生成机制,增强CI/CD工作流的缓存性能,支持通过LAZYLLM_CACHE_MODE配置。

提示工程

  • 提示模板 ([#775]):引入 PromptTemplateFewShotPromptTemplate 类,支持变量替换与验证的结构化提示生成,替代 LLMParser 中的硬编码字符串。
    from lazyllm.prompt_templates import PromptTemplate
    template = PromptTemplate.from_template('你好 {name},你今年 {age} 岁')
    result = template.format(name='Alice', age=25)

GraphRAG 部署

  • GraphRAG 服务 ([#821]):新增 CLI 命令 lazyllm deploy graphrag 用于部署知识图谱构建与查询服务。引入 GraphDocumentGraphRetrieverGraphRagServerModule 类。
    from lazyllm.tools import Document, GraphDocument
    doc = Document(dataset_path='your_dataset')
    graph_doc = GraphDocument(doc)
    graph_doc.start_graph_index()

记忆组件与全局变量

  • 记忆组件 ([#831]):通过统一的Memory类集成MemU和Mem0实现持久化记忆。根据LAZYLLM_MEMU_API_KEYLAZYLLM_MEM0_API_KEY自动选择提供商。
    from lazyllm.tools.memory import Memory
    m = Memory()
    m.add('用户输入', output='代理响应', user_id='user_123')
  • 增强的全局系统 ([#796]):新增通过 Redis 实现跨服务数据传输的 RedisGlobals(当设置 LAZYLLM_REDIS_URL 时自动启用),支持线程安全的 locals 用于流程数据隔离,并为 ServerModule 添加安全密钥验证。

文档处理与字段提取

  • 结构化数据提取器 ([#862]):新增SchemaExtractor用于基于Pydantic模型的结构化文档解析,并提供SqlCall.create_from_document()支持基于提取模式的SQL查询。
    from lazyllm.tools.rag import SchemaExtractor
    extractor = SchemaExtractor(db_config={"db_type": "sqlite"})
    result = extractor(data="Apple reported $100 million profit.")
  • JSON提取工具 ([#865]):新增JsonExtractor用于从文本中提取结构化JSON,以及JsonConcentrator用于以reducedistinct模式聚合多个JSON对象。
  • 代码分割器 ([#867]):引入CodeSplitter及专用分割器(XMLSplitterJSONSplitterYAMLSplitterHTMLSplitterGeneralCodeSplitter),支持结构化/半结构化数据并具备自动格式检测功能。
  • PaddleOCR PDF解析器 ([#899]):新增PaddleOCRPDFReader用于PDF解析,支持OCR识别与版式分析,兼容官方API密钥及本地服务。

智能体示例与部署优化

  • 新增智能体示例 ([#807], [#843]):为博查搜索Agent、语音助手、SQL查询Agent、环境交互Agent及多智能体去中心化发言者选择功能新增文档与示例(详情见 https://docs.lazyllm.ai/zh-cn/v0.7.1/Cookbook/sales_assistant/ )。
  • Ray 部署 ([#774]):为 ServerModule 添加基于 Ray 的分布式部署方案,支持配置副本数量,通过 LAZYLLM_USE_RAY=ON 启用。
  • 部署参数控制 ([#809]):新增skip_check参数及LAZYLLM_DEPLOY_SKIP_CHECK_KW环境变量,支持向vLLM等部署框架传递任意关键字参数。
  • 模型源配置 ([#852]):在 TrainableModule 中新增 source 参数,用于显式指定模型来源(例如 'hf''modelscope')。
  • 模型映射复用 ([#913]):在TrainableModule中新增use_model_map参数,用于控制从配置映射中复用预部署模型。
  • MinerU 命令行工具 ([#817]):新增 lazyllm deploy mineru 命令行指令,实现 MinerU PDF 解析服务的一键部署(详情见 https://docs.lazyllm.ai/zh-cn/v0.7.1/Cookbook/rag/#-4mineru)。

其他增强功能

  • 自动模型类型识别 ([#818]):OnlineChatModule 现可通过全面映射机制,根据模块名称自动识别模型类别(如LLM、VLM等)。
  • 模块版本属性 ([#787]):在lazyllm模块中新增__version__属性,支持程序化版本检测。
  • 增强文档读取器 ([#789]):支持为默认文件读取器注册后处理转换规则,并使SimpleDirectoryReader可复用于不同文件输入。
  • EasyR1微调 ([#866]):引入EasyR1Finetune类实现强化学习微调,并新增DISABLE_RUN_ON_CHANGE环境变量控制测试执行。
  • SCC API-V2 支持 ([#795]):更新启动器系统以支持 SCC API-V2,提升分布式计算环境中的任务管理能力。
  • Milvus 默认参数 ([#781]):新增 Milvus 数据库的自动注入功能,可自动注入最优默认索引参数。

错误修复

修复了大量缺陷,涉及嵌入批处理、向量检索、Milvus查询、启动器配置、API密钥验证、VLM文件处理、模型映射及CI工作流等模块。

  • 嵌入式批量处理 ([#725]):修复OnlineEmbeddingModuleBase中的关键缺陷——_parse_response()始终采用索引0,导致批量输入向量丢失。现已正确处理单字符串与列表输入,分别返回List[float]List[List[float]]
  • 默认嵌入向量检索 ([#740]):修复使用默认嵌入模型(非字典格式)处理URL文档及余弦相似度时的失败问题。 为Retriever类新增序列化支持(__getstate__/__setstate__),以满足ServerModule使用需求。
  • Milvus查询限制 ([#770]):针对UID数量超出Milvus 1000项限制时文档重解析导致的查询失败,通过分页批量查询机制修复了新版pymilvus中的问题。
  • 空启动器配置 ([#782], [#784]):通过在启动器__init__方法中添加**kwargs以支持额外参数,并修正CUDA_VISIBLE_DEVICES环境变量语法以确保正确选择GPU,修复了使用空启动器时的错误。
  • API密钥验证缺失 ([#790]):为DeepSeek、Doubao和Kimi在线模型供应商补全了缺失的_validate_api_key()方法,实现跨供应商统一的身份验证机制。
  • SQLite 列名引号处理 ([#806]):修复 MapStore 的 SQLite 后端中 group 列名被错误引用为字符串字面量('group')而非列标识符("group")的 SQL 语法错误。
  • Milvus嵌入键预处理 ([#808]):在Milvus存储配置中新增嵌入键自动预处理功能,可处理缺失键值、提供合理默认值并验证配置,有效减少手动配置错误。
  • WebModule中的VLM文件提取 ([#815]):修复了使用WebModule时图像文件无法正确提取并传递给视觉语言模型(VLMs)的缺陷。优化了在线重排序器的文件提取逻辑与参数处理机制。
  • SiliconFlow重排序器与模型映射 ([#837]):修复了因_encapsulated_data()方法签名错误导致的SiliconFlow重排序器调用异常,并解决了model参数为None时出现的模型映射警告。
  • 模型类型自动检测 ([#844]):通过改进规范化和基于标记的匹配机制,增强模型类型自动检测逻辑,修复了大小写敏感问题及模型名称匹配不完整的问题。
  • SiliconFlow TTS默认参数 ([#849]):修复了SiliconFlow TTS缺失默认voice参数的问题,并修正了 测试参数加载错误。为保持一致性,增加了超时值并将类重命名为SiliconFlowTTSModule
  • GLM代理API兼容性 ([#858]):通过移除tool_calls项中的'index'字段,修复代理测试中使用GLM模型时出现的400参数错误,确保API兼容性。
  • OceanBase存储全文检索逻辑 ([#876]):修复OceanBase存储search方法的逻辑错误,该方法原先错误地通过检查query_embedding而非query参数,导致有效查询触发NotImplementedError异常。
  • 检索器智能嵌入索引 ([#884]):修复在Retriever中指定index='smart_embedding_index'时出现的错误,现自动将其转换为'default'并触发弃用警告。
  • SenseNova认证配置 ([#916]):修复了密钥认证下错误允许多密钥模式的缺陷。现对该不兼容配置明确抛出KeyError异常。
  • CI 工作流与测试套件修复:实施多项改进以提升 CI 可靠性:
    • 修复了变更文件检测与pytest缓存冲突的问题([#851])。
    • 修复了新PR创建时CI任务自动取消的问题([#871])。
    • 通过更新 huggingface-hub 依赖项,修复因缺少 transformers 导致的测试套件失败问题 ([#880])。
    • 修复因冗余依赖导致磁盘空间耗尽引发的文档部署失败问题 ([#896])。
    • 修复标签触发的工作流错误跳过克隆阶段的问题 ([#907])。
    • 修复了因上游任务成功条件检查缺失导致测试任务无法执行的严重缺陷([#908])。
  • 其他修复
    • 修复了当 LAZYLLM_LANGUAGE='CHINESE' 时中文文档出现的 AttributeError,该错误源于错误的导入路径 ([#861])。
    • 修复 tiktoken 缓存目录创建失败问题,并完善错误处理与回退机制 ([#870])。
    • 修复了带相对路径的 Document 无法扫描文件并返回空列表的错误 ([#875])。
    • 修复文档中对已弃用的 ProgrammingSplitter 类的引用,更新为 GeneralCodeSplitter ([#878])。
    • 通过将错误处理从抛出异常改为静默失败,修复中文文档生成失败问题 ([#883])。
    • 修复多模态模块中 API 密钥处理不一致问题,并改进 Qwen 文本转图像模型的错误报告机制 ([#902])。
    • 修复多个HuggingFace模型下载问题,包括映射URL错误、认证错误信息缺失及中断下载无法续传([#903])。
    • 修复通过 TrainableModule 访问基于 URL 的模型时错误重置部署状态的缺陷 ([#816])。
    • 修复 S3 上传错误('IncompleteBody'、'SlowDownWrite'),采用健壮重试机制和指数级后退策略([#834])。
    • 通过添加__deepcopy__方法,修复了ServerModule与高版本gradio的兼容性问题([#855])。
    • 修复了Gitee同步工作流中组织名称显示错误的问题([#762])。

优化改进

本次发布包含多项性能优化、架构重构及用户体验改进,覆盖启动器、RAG、智能体、测试和日志系统。

性能优化

  • 导入时间加速 ([#746], [#829]):通过延迟加载大型依赖项(deepdifffastapi)及推迟第三方导入,显著缩短lazyllmlazyllm.TrainableModule的导入时间,提升启动性能。
  • RAG批量嵌入处理 ([#752]):针对在线模型优化批量嵌入处理,当嵌入函数支持时通过节点分组批量处理减少API调用,提升吞吐量。
  • BM25缓存机制 ([#776]):新增LRU缓存,避免对相同文档集重复初始化BM25相似度实例,降低重复查询的计算开销。
  • 测试执行速度 ([#853]):通过启用并行执行(4个进程)并将启动器从'sco'切换为'empty'以减少开销,加速CI中的基础测试。
  • Milvus索引兼容性 ([#743]):针对Milvus-lite版本,将不支持的索引类型自动转换为AUTOINDEX,增强Milvus存储可靠性并提升跨版本兼容性。
  • Mineru PDF处理 ([#792]):将mineru组件更新至2.5.4版,引入性能优化、改进内容过滤功能,并增强对代码块和列表的支持。

架构重构

  • 启动器模块化 ([#901]):将单体启动器模块重构为模块化结构,为每个IaaS平台分别创建独立文件(base.pyslurm.pysco.pyk8s.py),提升代码组织性与可维护性。
  • 文档切片模块重构 ([#811]):将文档切片模块重组为独立模块 lazyllm.tools.rag.transform,引入基础类(_TextSplitterBase_TokenTextSplitter)及专用分割器(CharacterSplitterRecursiveSplitterSentenceSplitterMarkdownSplitter),新增自定义分词器与分割规则支持(详情见 https://docs.lazyllm.ai/zh-cn/v0.7.1/Cookbook/rag/#-2)。
  • 文档处理器可扩展性 ([#813]):将DocumentProcessor从单进程设计重构为可扩展的服务器+工作进程架构,支持外部数据库(SqlManager)、持久化任务队列、健康检查及优雅关闭功能。
  • 自动微调统一化 ([#814]):重构自动微调功能,支持对大型语言模型、视觉语言模型、嵌入模型及重排序模型进行统一微调,并实现模型类型自动检测,彻底摆脱对AutoConfig的依赖。
  • Agent模块整合 ([#801]):重构Agent模块,合并不同Agent类型间的冗余逻辑并统一工具输出处理,提升可维护性。
  • Mineru服务器架构 ([#893]):将mineru服务器模块重构为规范的Python包,实现更清晰的组织结构,同时保持向后兼容性。

可用性与开发者体验

  • 增强错误堆栈跟踪 ([#895], [#897]):优化ModuleServerModuleFlow的错误信息,移除冗余内部堆栈帧并明确标注函数定义行号,显著提升调试效率。
  • 流程自动赋值 ([#895]):改进嵌套作用域内的流程自动赋值机制,允许内部流程组件无需显式语法即可自动赋值给外部流程,减少冗余代码。
  • 智能测试执行 ([#840]):新增 run_on_changeignore_cache_on_change pytest标记,仅在依赖文件变更时运行测试,或在特定文件变更时忽略缓存,优化持续集成工作流。
  • 日志系统增强 ([#915]):通过环境变量LAZYLLM_EXPECTED_LOG_MODULES(默认值:'lazyllm')实现基于模块的日志过滤,并将启动器日志整合至独立的'launcher'模块,输出更清晰。
  • 部署错误上下文 ([#917]):增强部署错误报告功能,保留近期日志(可通过 LAZYLLM_DEFAULT_RECENT_K 配置,CI 环境默认值为 20),并在部署失败时将日志纳入异常消息。
  • 代码检查系统增强 ([#753]):通过flake8-bugbearflake8-quotes实现了更严格的代码检查,并借助 优化检查流程——新命令make lint-only-diff仅针对PR中变更的文件进行检查。
  • Agent文档完善 ([#805]):为四种核心Agent类型新增全面文档与实战示例:API交互Agent、自适应工具调用Agent、带历史记录的对话式RAG智能体以及多模态输出Agent。
  • 在线聊天模块负载均衡 ([#895]):在OnlineChatModule中支持多API密...
Read more

v0.7.0

18 Dec 04:21
023f070

Choose a tag to compare

fix chinese doc bug (#883)

v0.6.3

01 Nov 00:53
9cb1458

Choose a tag to compare

add deploy cli and docs for mineru (#817)

Co-authored-by: wangzhihong <[email protected]>

v0.6.2

26 Sep 10:18
1b5674c

Choose a tag to compare

fix empty launcher bug (#782)

Co-authored-by: dengyuang <[email protected]>

v0.6.1

29 Aug 11:29
6ad5f13

Choose a tag to compare

vllm support openai api (#731)

v0.6.0

18 Aug 05:34
cf685fe

Choose a tag to compare

add dev plan to readme.md (#712)

v0.5.3

11 Jul 13:09
e7b6ffa

Choose a tag to compare

Bulid the mkdocs of Tutorial successfully (#563)

v0.5.2.post1

18 Jun 12:13
40bcf6f

Choose a tag to compare

fix bug: reader cannot set metadata to DocNode (#540)

v0.5.2

14 Jun 14:05
a5de656

Choose a tag to compare

skip test_OCR tests (#536)

v0.5.1

29 May 15:35
baae64f

Choose a tag to compare

The result data obtained from embedding is 1024-dimensional, and in c…