Releases: LazyAGI/LazyLLM
Releases · LazyAGI/LazyLLM
v0.7.1
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模块经全面重构以提升可维护性与清晰度。 - 扩展存储支持 - 新增与Elasticsearch和OceanBase的集成,作为存储后端提供更多可扩展的RAG(检索增强生成)部署选项。
- 新增在线模型提供商 - 集成支持SiliconFlow和MiniMax,用户可通过统一的
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索引的稠密/稀疏向量。需安装
pyobvector和sqlalchemy。
新增在线模型选型
- 硅基流动(SiliconFlow)集成 ([#793]):为
OnlineChatModule、OnlineEmbeddingModule和OnlineMultiModalModule新增数据源(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]):引入
PromptTemplate和FewShotPromptTemplate类,支持变量替换与验证的结构化提示生成,替代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用于部署知识图谱构建与查询服务。引入GraphDocument、GraphRetriever和GraphRagServerModule类。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_KEY或LAZYLLM_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用于以reduce或distinct模式聚合多个JSON对象。 - 代码分割器 ([#867]):引入
CodeSplitter及专用分割器(XMLSplitter、JSONSplitter、YAMLSplitter、HTMLSplitter、GeneralCodeSplitter),支持结构化/半结构化数据并具备自动格式检测功能。 - 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 可靠性:
- 其他修复:
- 修复了当
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]):通过延迟加载大型依赖项(
deepdiff、fastapi)及推迟第三方导入,显著缩短lazyllm和lazyllm.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.py、slurm.py、sco.py、k8s.py),提升代码组织性与可维护性。 - 文档切片模块重构 ([#811]):将文档切片模块重组为独立模块
lazyllm.tools.rag.transform,引入基础类(_TextSplitterBase、_TokenTextSplitter)及专用分割器(CharacterSplitter、RecursiveSplitter、SentenceSplitter、MarkdownSplitter),新增自定义分词器与分割规则支持(详情见 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]):优化
Module、ServerModule及Flow的错误信息,移除冗余内部堆栈帧并明确标注函数定义行号,显著提升调试效率。 - 流程自动赋值 ([#895]):改进嵌套作用域内的流程自动赋值机制,允许内部流程组件无需显式语法即可自动赋值给外部流程,减少冗余代码。
- 智能测试执行 ([#840]):新增
run_on_change和ignore_cache_on_changepytest标记,仅在依赖文件变更时运行测试,或在特定文件变更时忽略缓存,优化持续集成工作流。 - 日志系统增强 ([#915]):通过环境变量
LAZYLLM_EXPECTED_LOG_MODULES(默认值:'lazyllm')实现基于模块的日志过滤,并将启动器日志整合至独立的'launcher'模块,输出更清晰。 - 部署错误上下文 ([#917]):增强部署错误报告功能,保留近期日志(可通过
LAZYLLM_DEFAULT_RECENT_K配置,CI 环境默认值为 20),并在部署失败时将日志纳入异常消息。 - 代码检查系统增强 ([#753]):通过
flake8-bugbear和flake8-quotes实现了更严格的代码检查,并借助 优化检查流程——新命令make lint-only-diff仅针对PR中变更的文件进行检查。 - Agent文档完善 ([#805]):为四种核心Agent类型新增全面文档与实战示例:API交互Agent、自适应工具调用Agent、带历史记录的对话式RAG智能体以及多模态输出Agent。
- 在线聊天模块负载均衡 ([#895]):在
OnlineChatModule中支持多API密...
v0.7.0
v0.6.3
add deploy cli and docs for mineru (#817) Co-authored-by: wangzhihong <[email protected]>
v0.6.2
fix empty launcher bug (#782) Co-authored-by: dengyuang <[email protected]>
v0.6.1
v0.6.0
v0.5.3
v0.5.2.post1
fix bug: reader cannot set metadata to DocNode (#540)