[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-alegonz--baikal":3,"tool-alegonz--baikal":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":76,"owner_location":77,"owner_email":76,"owner_twitter":76,"owner_website":76,"owner_url":78,"languages":79,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":96,"env_os":97,"env_gpu":98,"env_ram":98,"env_deps":99,"category_tags":104,"github_topics":106,"view_count":10,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":111,"updated_at":112,"faqs":113,"releases":134},2739,"alegonz\u002Fbaikal","baikal","A graph-based functional API for building complex scikit-learn pipelines.","Baikal 是一个基于图结构的功能性 API，专为构建复杂的 scikit-learn 机器学习流水线而设计。它深受 Keras 和 TensorFlow 启发，旨在突破传统 scikit-learn 流水线只能处理线性流程的限制。\n\n在使用 scikit-learn 原生工具时，开发者常面临两大痛点：一是难以构建包含并行分支的非线性模型；二是分类器或回归器通常只能作为流水线的终点，无法将其预测结果（如概率或标签）作为特征传递给后续步骤。Baikal 完美解决了这些问题，让用户能够轻松实现多输入多输出、嵌套流水线以及将中间预测值融入后续计算等复杂架构。\n\n该工具特别适合需要灵活实验架构的机器学习工程师、数据科学家及研究人员。其核心技术亮点在于采用类似深度学习的“函数式”编程风格，通过简洁的代码即可定义复杂的有向无环图（DAG），同时完全兼容 scikit-learn 生态。此外，Baikal 还支持自定义步骤、冻结无需训练的环节、查询中间输出以便调试，并能自动绘制流水线结构图。作为一个纯 Python 编写的开源项目，Baikal 让构建高级机器学习流程变得像搭积木一样直观高效，且无","Baikal 是一个基于图结构的功能性 API，专为构建复杂的 scikit-learn 机器学习流水线而设计。它深受 Keras 和 TensorFlow 启发，旨在突破传统 scikit-learn 流水线只能处理线性流程的限制。\n\n在使用 scikit-learn 原生工具时，开发者常面临两大痛点：一是难以构建包含并行分支的非线性模型；二是分类器或回归器通常只能作为流水线的终点，无法将其预测结果（如概率或标签）作为特征传递给后续步骤。Baikal 完美解决了这些问题，让用户能够轻松实现多输入多输出、嵌套流水线以及将中间预测值融入后续计算等复杂架构。\n\n该工具特别适合需要灵活实验架构的机器学习工程师、数据科学家及研究人员。其核心技术亮点在于采用类似深度学习的“函数式”编程风格，通过简洁的代码即可定义复杂的有向无环图（DAG），同时完全兼容 scikit-learn 生态。此外，Baikal 还支持自定义步骤、冻结无需训练的环节、查询中间输出以便调试，并能自动绘制流水线结构图。作为一个纯 Python 编写的开源项目，Baikal 让构建高级机器学习流程变得像搭积木一样直观高效，且无需编写冗余的样板代码。","![baikal](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Falegonz_baikal_readme_93ff9d1bbb0e.png)\n\n# A graph-based functional API for building complex scikit-learn pipelines\n\n[![docs](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-read%20now-blue.svg)](https:\u002F\u002Fbaikal.readthedocs.io)\n[![build status](https:\u002F\u002Fcircleci.com\u002Fgh\u002Falegonz\u002Fbaikal\u002Ftree\u002Fmaster.svg?style=svg&circle-token=fb67eeed2067c361989d2091b9d4d03e6899010b)](https:\u002F\u002Fcircleci.com\u002Fgh\u002Falegonz\u002Fbaikal\u002Ftree\u002Fmaster)\n[![coverage](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falegonz\u002Fbaikal\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg?token=SSoeQETNh6)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falegonz\u002Fbaikal)\n[![Language grade: Python](https:\u002F\u002Fimg.shields.io\u002Flgtm\u002Fgrade\u002Fpython\u002Fg\u002Falegonz\u002Fbaikal.svg?logo=lgtm&logoWidth=18)](https:\u002F\u002Flgtm.com\u002Fprojects\u002Fg\u002Falegonz\u002Fbaikal\u002Fcontext:python)\n[![code style](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-black-000000.svg)](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack)\n[![latest release](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fbaikal.svg)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fbaikal)\n[![Anaconda-Server Badge](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fbaikal\u002Fbadges\u002Fversion.svg)](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fbaikal)\n[![license](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fbaikal.svg)](https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fblob\u002Fmaster\u002FLICENSE)\n\n**baikal** is written in pure Python. It supports Python 3.5 and above.\n\nNote: **baikal** is still a young project and there might be backward incompatible changes. \nThe next development steps and backwards-incompatible changes are announced and discussed \nin [this issue](https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fissues\u002F16). Please subscribe to it if \nyou use **baikal**.\n\n### What is baikal?\n\n**baikal is a graph-based, functional API for building complex machine learning pipelines \nof objects that implement the** [scikit-learn API](https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fdevelopers\u002Fcontributing.html#different-objects). \nIt is mostly inspired on the excellent [Keras](https:\u002F\u002Fkeras.io) API for Deep Learning, \nand borrows a few concepts from the [TensorFlow](https:\u002F\u002Fwww.tensorflow.org) framework \nand the (perhaps lesser known) [graphkit](https:\u002F\u002Fgithub.com\u002Fyahoo\u002Fgraphkit) package.\n\n**baikal** aims to provide an API that allows to build complex, non-linear machine learning \npipelines that look like this: \n\n![multiple_input_nonlinear_pipeline_example_diagram](illustrations\u002Fmultiple_input_nonlinear_pipeline_example_diagram.png \"An example of a multiple-input, nonlinear pipeline\")\n\n\nwith code that looks like this:\n\n```python\nx1 = Input()\nx2 = Input()\ny_t = Input()\n\ny1 = ExtraTreesClassifier()(x1, y_t)\ny2 = RandomForestClassifier()(x2, y_t)\nz = PowerTransformer()(x2)\nz = PCA()(z)\ny3 = LogisticRegression()(z, y_t)\n\nensemble_features = Stack()([y1, y2, y3])\ny = SVC()(ensemble_features, y_t)\n\nmodel = Model([x1, x2], y, y_t)\n```\n\n### What can I do with it?\n\nWith **baikal** you can\n\n- build non-linear pipelines effortlessly\n- handle multiple inputs and outputs\n- add steps that operate on targets as part of the pipeline\n- nest pipelines\n- use prediction probabilities (or any other kind of output) as inputs to other steps in the pipeline\n- query intermediate outputs, easing debugging\n- freeze steps that do not require fitting\n- define and add custom steps easily\n- plot pipelines\n\nAll with boilerplate-free, readable code.\n\n### Why baikal?\t\n\nThe pipeline above (to the best of the author's knowledge) cannot be easily built using \n[scikit-learn's composite estimators API](https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fcompose.html#pipelines-and-composite-estimators) \nas you encounter some limitations:\t\n\n1. It is aimed at linear pipelines\t\n    - You could add some step parallelism with the [ColumnTransformer](https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fcompose.html#columntransformer-for-heterogeneous-data) \n      API, but this is limited to transformer objects.\t\n2. Classifiers\u002FRegressors can only be used at the end of the pipeline.\t\n    - This means we cannot use the predicted labels (or their probabilities) as features \n      to other classifiers\u002Fregressors.\t\n    - You could leverage mlxtend's [StackingClassifier](http:\u002F\u002Frasbt.github.io\u002Fmlxtend\u002Fuser_guide\u002Fclassifier\u002FStackingClassifier\u002F#stackingclassifier) \n      and come up with some clever combination of the above composite estimators \n      (`Pipeline`s, `ColumnTransformer`s, and `StackingClassifier`s, etc), but you might \n      end up with code that feels hard-to-follow and verbose.\t\n3. Cannot handle multiple input\u002Fmultiple output models.\t\n\nPerhaps you could instead define a big, composite estimator class that integrates each of \nthe pipeline steps through composition. This, however, most likely will require \t\n* writing big `__init__` methods to control each of the internal steps' knobs;\t\n* being careful with `get_params` and `set_params` if you want to use, say, `GridSearchCV`;\t\n* and adding some boilerplate code if you want to access the outputs of intermediate \n  steps for debugging.\t\n\nBy using **baikal** as shown in the example above, code can be more readable, less verbose \nand closer to our mental representation of the pipeline. **baikal** also provides an API \nto fit, predict with, and query the entire pipeline with single commands. \n","![baikal](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Falegonz_baikal_readme_93ff9d1bbb0e.png)\n\n# 一个基于图的函数式 API，用于构建复杂的 scikit-learn 管道\n\n[![文档](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-read%20now-blue.svg)](https:\u002F\u002Fbaikal.readthedocs.io)\n[![构建状态](https:\u002F\u002Fcircleci.com\u002Fgh\u002Falegonz\u002Fbaikal\u002Ftree\u002Fmaster.svg?style=svg&circle-token=fb67eeed2067c361989d2091b9d4d03e6899010b)](https:\u002F\u002Fcircleci.com\u002Fgh\u002Falegonz\u002Fbaikal\u002Ftree\u002Fmaster)\n[![覆盖率](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falegonz\u002Fbaikal\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg?token=SSoeQETNh6)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falegonz\u002Fbaikal)\n[![Python 语言等级](https:\u002F\u002Fimg.shields.io\u002Flgtm\u002Fgrade\u002Fpython\u002Fg\u002Falegonz\u002Fbaikal.svg?logo=lgtm&logoWidth=18)](https:\u002F\u002Flgtm.com\u002Fprojects\u002Fg\u002Falegonz\u002Fbaikal\u002Fcontext:python)\n[![代码风格](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-black-000000.svg)](https:\u002F\u002Fgithub.com\u002Fpsf\u002Fblack)\n[![最新版本](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fbaikal.svg)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fbaikal)\n[![Anaconda 服务器徽章](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fbaikal\u002Fbadges\u002Fversion.svg)](https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fbaikal)\n[![许可证](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fl\u002Fbaikal.svg)](https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fblob\u002Fmaster\u002FLICENSE)\n\n**baikal** 完全用纯 Python 编写。它支持 Python 3.5 及以上版本。\n\n注意：**baikal** 仍是一个年轻的项目，可能会出现不向后兼容的更改。接下来的开发步骤和不向后兼容的变更将在 [此议题](https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fissues\u002F16) 中公布并讨论。如果您正在使用 **baikal**，请订阅该议题。\n\n### 什么是 baikal？\n\n**baikal 是一个基于图的、函数式的 API，用于构建实现** [scikit-learn API](https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fdevelopers\u002Fcontributing.html#different-objects) 的复杂机器学习管道。它主要受到优秀的 [Keras](https:\u002F\u002Fkeras.io) 深度学习 API 的启发，并借鉴了 [TensorFlow](https:\u002F\u002Fwww.tensorflow.org) 框架以及（可能不太为人所知）的 [graphkit](https:\u002F\u002Fgithub.com\u002Fyahoo\u002Fgraphkit) 包中的一些概念。\n\n**baikal** 的目标是提供一个 API，允许构建复杂的非线性机器学习管道，其结构如下所示：\n\n![multiple_input_nonlinear_pipeline_example_diagram](illustrations\u002Fmultiple_input_nonlinear_pipeline_example_diagram.png \"多输入、非线性管道示例\")\n\n\n对应的代码如下：\n\n```python\nx1 = Input()\nx2 = Input()\ny_t = Input()\n\ny1 = ExtraTreesClassifier()(x1, y_t)\ny2 = RandomForestClassifier()(x2, y_t)\nz = PowerTransformer()(x2)\nz = PCA()(z)\ny3 = LogisticRegression()(z, y_t)\n\nensemble_features = Stack()([y1, y2, y3])\ny = SVC()(ensemble_features, y_t)\n\nmodel = Model([x1, x2], y, y_t)\n```\n\n### 我可以用它做什么？\n\n借助 **baikal**，您可以\n\n- 轻松构建非线性管道\n- 处理多个输入和输出\n- 在管道中添加直接作用于目标变量的步骤\n- 嵌套管道\n- 将预测概率（或任何其他类型的输出）作为管道中其他步骤的输入\n- 查询中间输出，便于调试\n- 冻结无需拟合的步骤\n- 轻松定义和添加自定义步骤\n- 绘制管道图\n\n所有这些操作都可以通过无样板、易读的代码完成。\n\n### 为什么选择 baikal？\n\n上述管道（据作者所知）无法轻易使用 [scikit-learn 的复合估计器 API](https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fcompose.html#pipelines-and-composite-estimators) 构建，因为会遇到一些限制：\n\n1. 它主要针对线性管道设计  \n    - 您可以使用 [ColumnTransformer](https:\u002F\u002Fscikit-learn.org\u002Fstable\u002Fmodules\u002Fcompose.html#columntransformer-for-heterogeneous-data) API 来实现一定程度的并行化，但这种方法仅限于转换器对象。\n2. 分类器\u002F回归器只能放在管道的末端  \n    - 这意味着我们无法将预测标签（或其概率）作为特征传递给其他分类器或回归器。\n    - 您可以利用 mlxtend 的 [StackingClassifier](http:\u002F\u002Frasbt.github.io\u002Fmlxtend\u002Fuser_guide\u002Fclassifier\u002FStackingClassifier\u002F#stackingclassifier) 并巧妙组合上述复合估计器（如 `Pipeline`、`ColumnTransformer` 和 `StackingClassifier` 等），但这可能会导致代码难以理解且冗长。\n3. 无法处理多输入\u002F多输出模型。\n\n当然，您也可以定义一个大型的复合估计器类，通过组合的方式集成管道中的每个步骤。然而，这样做很可能需要：\n* 编写庞大的 `__init__` 方法来控制每个内部步骤的参数；\n* 如果要使用 `GridSearchCV` 等工具，必须小心处理 `get_params` 和 `set_params` 方法；\n* 如果想访问中间步骤的输出以进行调试，则还需要添加一些样板代码。\n\n而使用上面示例中展示的 **baikal**，代码会更加易读、简洁，并且更接近我们对管道的心理认知。此外，**baikal** 还提供了一个 API，只需一条命令即可对整个管道进行拟合、预测和查询。","# Baikal 快速上手指南\n\nBaikal 是一个基于图的功能性 API，用于构建复杂的 scikit-learn 机器学习流水线。它受 Keras API 启发，允许你轻松构建非线性、多输入\u002F多输出的机器学习模型，代码简洁且易于阅读。\n\n## 环境准备\n\n*   **操作系统**：支持 Linux, macOS, Windows\n*   **Python 版本**：Python 3.5 及以上\n*   **核心依赖**：\n    *   `scikit-learn` (必须)\n    *   `numpy`, `scipy`, `matplotlib` (通常随 scikit-learn 安装或作为间接依赖)\n\n> **注意**：Baikal 目前仍处于早期开发阶段，API 可能存在不向后兼容的变更。建议在使用前关注其官方 GitHub 仓库的动态。\n\n## 安装步骤\n\n你可以使用 `pip` 或 `conda` 进行安装。国内开发者推荐使用清华源或阿里源以加速下载。\n\n### 方式一：使用 pip 安装（推荐）\n\n```bash\n# 使用清华大学镜像源安装\npip install baikal -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n### 方式二：使用 conda 安装\n\n```bash\n# 使用 conda-forge 频道安装\nconda install -c conda-forge baikal\n```\n\n## 基本使用\n\nBaikal 的核心概念是通过定义输入节点（`Input`）和连接各种 scikit-learn  estimator（如分类器、回归器、转换器）来构建计算图，最后实例化为 `Model`。\n\n以下是一个最简单的示例，展示如何构建一个包含多个输入和非线性连接的流水线：\n\n```python\nfrom baikal import Input, Model\nfrom sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.svm import SVC\nfrom sklearn.preprocessing import PowerTransformer\nfrom sklearn.decomposition import PCA\nfrom baikal.steps import Stack\n\n# 1. 定义输入节点\n# x1, x2 为特征输入，y_t 为目标变量输入\nx1 = Input()\nx2 = Input()\ny_t = Input()\n\n# 2. 构建流水线步骤\n# 并行处理两个不同的特征输入\ny1 = ExtraTreesClassifier()(x1, y_t)\ny2 = RandomForestClassifier()(x2, y_t)\n\n# 对 x2 进行非线性变换和降维\nz = PowerTransformer()(x2)\nz = PCA()(z)\ny3 = LogisticRegression()(z, y_t)\n\n# 3. 集成步骤：将多个模型的输出堆叠在一起\nensemble_features = Stack()([y1, y2, y3])\n\n# 4. 最终预测层\ny = SVC()(ensemble_features, y_t)\n\n# 5. 实例化模型\n# 指定输入列表和最终输出\nmodel = Model([x1, x2], y, y_t)\n\n# 6. 使用模型 (假设 X1_data, X2_data, y_target 是你的 numpy 数组)\n# model.fit([X1_data, X2_data], y_target)\n# predictions = model.predict([X1_data, X2_data])\n```\n\n### 代码说明：\n*   **Input()**: 创建数据入口点，类似于 Keras 中的 Input 层。\n*   **Estimator()**: 直接调用 scikit-learn 的类（如 `ExtraTreesClassifier()`），传入上游节点作为参数，即可将其连接到图中。\n*   **Stack()**: Baikal 提供的特殊步骤，用于将多个分支的输出合并为一个特征矩阵，常用于堆叠泛化（Stacking）。\n*   **Model(inputs, outputs, targets)**: 将整个图封装为一个可训练、可预测的模型对象。第一个参数是特征输入列表，第二个是最终输出节点，第三个是目标变量节点。\n\n通过这种方式，你可以自由地组合任何遵循 scikit-learn 接口的对象，构建出传统 `Pipeline` 无法实现的复杂拓扑结构。","某金融风控团队需要构建一个融合多源数据（如交易记录与用户行为日志）的复杂反欺诈模型，且希望将多个基分类器的预测概率作为新特征输入到最终模型中。\n\n### 没有 baikal 时\n- 只能构建线性流水线，难以处理多输入并行处理后再合并的非线性拓扑结构。\n- 中间分类器的预测结果无法直接作为特征传递给后续步骤，必须手动拆分代码并临时存储数据。\n- 若需对目标变量进行预处理或变换，无法将其自然融入标准 Pipeline 流程中。\n- 调试困难，无法直接查询或可视化管道中间层的输出状态。\n- 代码充斥着大量胶水逻辑和临时变量，导致整体可读性差且维护成本高。\n\n### 使用 baikal 后\n- 利用函数式 API 轻松定义多输入、非线性的图状架构，完美匹配复杂业务逻辑。\n- 直接将 `ExtraTreesClassifier` 等模型的输出连接到 `Stack` 层或下游模型，实现端到端的特征复用。\n- 支持将目标变量（Target）作为独立节点传入管道，允许在流程中对标签进行动态变换。\n- 内置调试能力，可随时提取任意中间节点的输出值，快速定位模型瓶颈。\n- 代码结构清晰简洁，无需编写冗余的样板代码，逻辑流向一目了然。\n\nbaikal 通过引入图计算思维，打破了传统 scikit-learn 线性管道的束缚，让构建高度定制化的复杂机器学习工作流变得像搭积木一样简单直观。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Falegonz_baikal_113f88f0.png","alegonz","Alejandro González","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Falegonz_b9b1e9a6.png",null,"Tokyo, Japan","https:\u002F\u002Fgithub.com\u002Falegonz",[80,84,88],{"name":81,"color":82,"percentage":83},"Python","#3572A5",99,{"name":85,"color":86,"percentage":87},"Makefile","#427819",0.8,{"name":89,"color":90,"percentage":91},"Shell","#89e051",0.2,591,30,"2026-01-10T19:10:12","BSD-3-Clause",1,"","未说明",{"notes":100,"python":101,"dependencies":102},"该工具是用纯 Python 编写的，旨在构建复杂的 scikit-learn 流水线。目前仍处于早期开发阶段，可能存在不向后兼容的更改。支持通过 pip 或 conda-forge 安装。","3.5+",[103],"scikit-learn",[16,105,14],"其他",[103,107,108,109,110],"machine-learning","data-science","python","graph-based","2026-03-27T02:49:30.150509","2026-04-11T16:55:08.676963",[114,119,124,129],{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},12689,"如何安装 Baikal 的 Anaconda\u002FConda 包？","Baikal 现已在 conda-forge 频道提供。您可以使用以下命令进行安装：\n`conda install -c conda-forge baikal`\n或者访问页面：https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fbaikal\n如果您需要在 README 中添加版本徽章，可以使用此 URL：https:\u002F\u002Fanaconda.org\u002Fconda-forge\u002Fbaikal\u002Fbadges\u002Fversion.svg","https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fissues\u002F47",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},12690,"在使用 XGBoost 时遇到 'AttributeError: type object Step has no attribute get_params' 错误怎么办？","这是因为 XGBoost 的 `get_params` 实现与 Baikal 的 Step 类不兼容。解决方法是创建一个继承自 `XGBClassifier` 的修复类，重写 `get_params` 方法以显式获取参数。\n示例代码如下：\n```python\nclass XGBClassifierFix(XGBClassifier):\n    def get_params(self, deep=True):\n        params = {}\n        for cls in [XGBClassifier, XGBModel]:\n            assert cls in self.__class__.mro()\n            params.update({p: getattr(self, p) for p in cls._get_param_names()})\n        # 如果有 kwargs 字典，相应地更新 params\n        return params\n```\n核心思路是调用 `_get_param_names` 从 `__init__` 签名中提取参数名，绕过原始实现的限制。","https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fissues\u002F36",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},12691,"为什么使用 make_step 包装 sklearn_pandas 的 DataFrameMapper 时在 pickle 序列化时会失败？","这是因为 `DataFrameMapper` 类实现了自定义的 `__getstate__` 和 `__setstate__` 方法，而原生的 sklearn 类通常不会覆盖这些方法（默认只 pickle 实例的 `__dict__`）。\n要解决此问题，您需要在自定义的 Step 类中正确重写 `__setstate__` 方法，并确保调用父类的实现。例如：\n```python\ndef __setstate__(self, state):\n    super().__setstate__(state)\n    # 恢复其他特定属性...\n```\n这确保了在反序列化时不会丢失 Step 特有的属性。详细文档参考：https:\u002F\u002Fbaikal.readthedocs.io\u002Fen\u002Fstable\u002Fknown_issues.html","https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fissues\u002F42",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},12692,"如何在 Baikal 中处理多标签分类（MultiLabel）并结合堆叠分类器（Stacked Classifier）使用 predict_proba？","在多标签分类中，每个样本有多个类别的概率输出。为了正确处理 `predict_proba` 并避免过拟合（特别是在使用交叉验证预测时），建议使用 `Lambda` 步骤来重塑输出数组。\n可以通过定义一个自定义的 `fit_predict` 函数并将其传递给 `make_step` 的 `attr_dict` 参数来实现。同时，使用 `Lambda` 步骤将输出的概率列表转换为形状为 `(n_samples, n_classes)` 的数组。\n示例逻辑如下：\n1. 定义 `fit_predict` 函数执行 `fit` 并返回 `cross_val_predict(..., method=\"predict_proba\")`。\n2. 使用 `make_step(..., attr_dict={\"fit_predict\": fit_predict})` 创建步骤。\n3. 添加一个 `Lambda` 步骤处理输出：`Lambda(lambda prpr: np.array([prpr[i][:, 1:].flatten() for i in range(n_classes)]).T)`（具体索引逻辑需根据实际输出调整）。\n这种方法比在内部隐藏逻辑更清晰且易于调试。","https:\u002F\u002Fgithub.com\u002Falegonz\u002Fbaikal\u002Fissues\u002F49",[135],{"id":136,"version":137,"summary_zh":138,"released_at":139},63334,"v0.1.0","**baikal** 首次发布 :tada:","2019-06-01T02:18:17"]