[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-hora-search--hora":3,"similar-hora-search--hora":91},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":8,"readme_en":9,"readme_zh":10,"quickstart_zh":11,"use_case_zh":12,"hero_image_url":13,"owner_login":14,"owner_name":15,"owner_avatar_url":16,"owner_bio":17,"owner_company":18,"owner_location":18,"owner_email":19,"owner_twitter":18,"owner_website":20,"owner_url":21,"languages":22,"stars":27,"forks":28,"last_commit_at":29,"license":30,"difficulty_score":31,"env_os":32,"env_gpu":33,"env_ram":33,"env_deps":34,"category_tags":37,"github_topics":41,"view_count":60,"oss_zip_url":18,"oss_zip_packed_at":18,"status":61,"created_at":62,"updated_at":63,"faqs":64,"releases":90},925,"hora-search\u002Fhora","hora","🚀  efficient approximate nearest neighbor search algorithm collections library written in Rust 🦀 . ","Hora 是一个用 Rust 编写的高性能近似最近邻搜索算法库，专门用于解决\"在海量数据中快速找到相似项\"这一经典问题。无论是人脸识别、推荐系统，还是语义搜索，Hora 都能在毫秒级时间内从数百万甚至上亿条向量记录中找出最相似的结果。\n\n传统精确搜索在数据规模膨胀时会变得极其缓慢，而 Hora 采用的近似算法（如 HNSW、PQIVF 等）通过牺牲极小的精度换取数量级的速度提升，让实时相似性搜索成为可能。它内置 SIMD 加速和多线程优化，性能可媲美 C++ 实现，同时借助 Rust 的内存安全特性避免了常见的崩溃和内存泄漏问题。\n\nHora 特别适合机器学习工程师、推荐系统开发者和搜索引擎架构师使用。它提供 Python、JavaScript、Java 等多种语言绑定，也支持 WebAssembly 部署到浏览器，甚至能运行在移动端。无需依赖 BLAS 等重量级库，安装简洁，API 设计优雅直观。\n\n如果你正在构建需要\"以图搜图\"\"以文搜文\"或向量数据库的应用，Hora 是一个值得尝试的开源方案。","\u003Cdiv align=\"center\">\n  \u003Cimg src=\"asset\u002Flogo.svg\" width=\"70%\"\u002F>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>  English | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_FR.md\"> Français \u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_JP.md\"> 日本語 \u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_KR.md\">한국어\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_RU.md\">Русский\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_CN.md\">中文\u003C\u002Fa> \u003C\u002Fh3>\n\u003C\u002Fdiv>\n\n# Hora\n\n**[[Homepage](http:\u002F\u002Fhorasearch.com\u002F)]** **[[Document](https:\u002F\u002Fhorasearch.com\u002Fdoc)]** **[[Examples](https:\u002F\u002Fhorasearch.com\u002Fdoc\u002Fexample.html)]**\n\n**_Hora Search Everywhere!_**\n\nHora is an **approximate nearest neighbor search algorithm** ([wiki](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNearest_neighbor_search)) library. We implement all code in `Rust🦀` for reliability, high level abstraction and high speeds comparable to `C++`.\n\nHora, **`「ほら」`** in Japanese, sounds like `[hōlə]`, and means `Wow`, `You see!` or `Look at that!`. The name is inspired by a famous Japanese song **`「小さな恋のうた」`**.\n\n# Demos\n\n**👩 Face-Match [[online demo](https:\u002F\u002Fhorasearch.com\u002F#Demos)], have a try!**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_61f39bb983ca.gif\" width=\"100%\"\u002F>\n\u003C\u002Fdiv>\n\n**🍷 Dream wine comments search [[online demo](https:\u002F\u002Fhorasearch.com\u002F#Demos)], have a try!**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_981b595d92dd.gif\" width=\"100%\"\u002F>\n\u003C\u002Fdiv>\n\n# Features\n\n- **Performant** ⚡️\n\n  - **SIMD-Accelerated ([packed_simd](https:\u002F\u002Fgithub.com\u002Frust-lang\u002Fpacked_simd))**\n  - **Stable algorithm implementation**\n  - **Multiple threads design**\n\n- **Supports Multiple Languages** ☄️\n\n  - `Python`\n  - `Javascript`\n  - `Java`\n  - `Go` (WIP)\n  - `Ruby` (WIP)\n  - `Swift` (WIP)\n  - `R` (WIP)\n  - `Julia` (WIP)\n  - **Can also be used as a service**\n\n- **Supports Multiple Indexes** 🚀\n\n  - `Hierarchical Navigable Small World Graph Index (HNSWIndex)` ([details](https:\u002F\u002Farxiv.org\u002Fabs\u002F1603.09320))\n  - `Satellite System Graph (SSGIndex)` ([details](https:\u002F\u002Farxiv.org\u002Fabs\u002F1907.06146))\n  - `Product Quantization Inverted File(PQIVFIndex)` ([details](https:\u002F\u002Flear.inrialpes.fr\u002Fpubs\u002F2011\u002FJDS11\u002Fjegou_searching_with_quantization.pdf))\n  - `Random Projection Tree(RPTIndex)` (LSH, WIP)\n  - `BruteForce (BruteForceIndex)` (naive implementation with SIMD)\n\n- **Portable** 💼\n\n  - Supports `WebAssembly`\n  - Supports `Windows`, `Linux` and `OS X`\n  - Supports `IOS` and `Android` (WIP)\n  - Supports `no_std` (WIP, partial)\n  - **No** heavy dependencies, such as `BLAS`\n\n- **Reliability** 🔒\n\n  - `Rust` compiler secures all code\n  - Memory managed by `Rust` for all language libraries such as `Python's`\n  - Broad testing coverage\n\n- **Supports Multiple Distances** 🧮\n\n  - `Dot Product Distance`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_d60e206d1ca8.png)\n  - `Euclidean Distance`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_55c5cb2c9434.png)\n  - `Manhattan Distance`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_dd96b5abd12f.png)\n  - `Cosine Similarity`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_d804eab122e2.png)\n\n- **Productive** ⭐\n  - Well documented\n  - Elegant, simple and easy to learn API\n\n# Installation\n\n**`Rust`**\n\nin `Cargo.toml`\n\n```toml\n[dependencies]\nhora = \"0.1.1\"\n```\n\n**`Python`**\n\n```Bash\n$ pip install horapy\n```\n\n**`Javascript (WebAssembly)`**\n\n```Bash\n$ npm i horajs\n```\n\n**`Building from source`**\n\n```bash\n$ git clone https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\n$ cargo build\n```\n\n# Benchmarks\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_a01bb0338e46.png\"\u002F>\n\nby `aws t2.medium (CPU: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz)` [more information](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fann-benchmarks)\n\n# Examples\n\n**`Rust` example** [[more info](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Ftree\u002Fmain\u002Fexamples)]\n\n```Rust\nuse hora::core::ann_index::ANNIndex;\nuse rand::{thread_rng, Rng};\nuse rand_distr::{Distribution, Normal};\n\npub fn demo() {\n    let n = 1000;\n    let dimension = 64;\n\n    \u002F\u002F make sample points\n    let mut samples = Vec::with_capacity(n);\n    let normal = Normal::new(0.0, 10.0).unwrap();\n    for _i in 0..n {\n        let mut sample = Vec::with_capacity(dimension);\n        for _j in 0..dimension {\n            sample.push(normal.sample(&mut rand::thread_rng()));\n        }\n        samples.push(sample);\n    }\n\n    \u002F\u002F init index\n    let mut index = hora::index::hnsw_idx::HNSWIndex::\u003Cf32, usize>::new(\n        dimension,\n        &hora::index::hnsw_params::HNSWParams::\u003Cf32>::default(),\n    );\n    for (i, sample) in samples.iter().enumerate().take(n) {\n        \u002F\u002F add point\n        index.add(sample, i).unwrap();\n    }\n    index.build(hora::core::metrics::Metric::Euclidean).unwrap();\n\n    let mut rng = thread_rng();\n    let target: usize = rng.gen_range(0..n);\n    \u002F\u002F 523 has neighbors: [523, 762, 364, 268, 561, 231, 380, 817, 331, 246]\n    println!(\n        \"{:?} has neighbors: {:?}\",\n        target,\n        index.search(&samples[target], 10) \u002F\u002F search for k nearest neighbors\n    );\n}\n```\n\nthank @vaaaaanquish for this complete pure `Rust 🦀` image search [example](https:\u002F\u002Fgithub.com\u002Fvaaaaanquish\u002Frust-ann-search-example), For more information about this example, you can click [Pure Rust な近似最近傍探索ライブラリ hora を用いた画像検索を実装する](https:\u002F\u002Fvaaaaaanquish.hatenablog.com\u002Fentry\u002F2021\u002F08\u002F10\u002F065117)\n\n**`Python` example** [[more info](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhorapy)]\n\n```Python\nimport numpy as np\nfrom horapy import HNSWIndex\n\ndimension = 50\nn = 1000\n\n# init index instance\nindex = HNSWIndex(dimension, \"usize\")\n\nsamples = np.float32(np.random.rand(n, dimension))\nfor i in range(0, len(samples)):\n    # add node\n    index.add(np.float32(samples[i]), i)\n\nindex.build(\"euclidean\")  # build index\n\ntarget = np.random.randint(0, n)\n# 410 in Hora ANNIndex \u003CHNSWIndexUsize> (dimension: 50, dtype: usize, max_item: 1000000, n_neigh: 32, n_neigh0: 64, ef_build: 20, ef_search: 500, has_deletion: False)\n# has neighbors: [410, 736, 65, 36, 631, 83, 111, 254, 990, 161]\nprint(\"{} in {} \\nhas neighbors: {}\".format(\n    target, index, index.search(samples[target], 10)))  # search\n\n```\n\n**`JavaScript` example** [[more info](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora-wasm)]\n\n```JavaScript\nimport * as horajs from \"horajs\";\n\nconst demo = () => {\n    const dimension = 50;\n    var bf_idx = horajs.BruteForceIndexUsize.new(dimension);\n    \u002F\u002F var hnsw_idx = horajs.HNSWIndexUsize.new(dimension, 1000000, 32, 64, 20, 500, 16, false);\n    for (var i = 0; i \u003C 1000; i++) {\n        var feature = [];\n        for (var j = 0; j \u003C dimension; j++) {\n            feature.push(Math.random());\n        }\n        bf_idx.add(feature, i); \u002F\u002F add point\n    }\n    bf_idx.build(\"euclidean\"); \u002F\u002F build index\n    var feature = [];\n    for (var j = 0; j \u003C dimension; j++) {\n        feature.push(Math.random());\n    }\n    console.log(\"bf result\", bf_idx.search(feature, 10)); \u002F\u002Fbf result Uint32Array(10) [704, 113, 358, 835, 408, 379, 117, 414, 808, 826]\n}\n\n(async () => {\n    await horajs.default();\n    await horajs.init_env();\n    demo();\n})();\n```\n\n**`Java` example** [[more info](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora-java)]\n\n```Java\npublic void demo() {\n    final int dimension = 2;\n    final float variance = 2.0f;\n    Random fRandom = new Random();\n\n    BruteForceIndex bruteforce_idx = new BruteForceIndex(dimension); \u002F\u002F init index instance\n\n    List\u003Cfloat[]> tmp = new ArrayList\u003C>();\n    for (int i = 0; i \u003C 5; i++) {\n        for (int p = 0; p \u003C 10; p++) {\n            float[] features = new float[dimension];\n            for (int j = 0; j \u003C dimension; j++) {\n                features[j] = getGaussian(fRandom, (float) (i * 10), variance);\n            }\n            bruteforce_idx.add(\"bf\", features, i * 10 + p); \u002F\u002F add point\n            tmp.add(features);\n          }\n    }\n    bruteforce_idx.build(\"bf\", \"euclidean\"); \u002F\u002F build index\n\n    int search_index = fRandom.nextInt(tmp.size());\n    \u002F\u002F nearest neighbor search\n    int[] result = bruteforce_idx.search(\"bf\", 10, tmp.get(search_index));\n    \u002F\u002F [main] INFO com.hora.app.ANNIndexTest  - demo bruteforce_idx[7, 8, 0, 5, 3, 9, 1, 6, 4, 2]\n    log.info(\"demo bruteforce_idx\" + Arrays.toString(result));\n}\n\nprivate static float getGaussian(Random fRandom, float aMean, float variance) {\n    float r = (float) fRandom.nextGaussian();\n    return aMean + r * variance;\n}\n```\n\n# Roadmap\n\n- [ ] Full test coverage\n- [ ] Implement [EFANNA](http:\u002F\u002Farxiv.org\u002Fabs\u002F1609.07228) algorithm to achieve faster KNN graph building\n- [ ] Swift support and iOS\u002FmacOS deployment example\n- [ ] Support `R`\n- [ ] support `mmap`\n\n# Related Projects and Comparison\n\n- [Faiss](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Ffaiss), [Annoy](https:\u002F\u002Fgithub.com\u002Fspotify\u002Fannoy), [ScaNN](https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fgoogle-research\u002Ftree\u002Fmaster\u002Fscann):\n\n  - **`Hora`'s implementation is strongly inspired by these libraries.**\n  - `Faiss` focuses more on the GPU scenerio, and `Hora` is lighter than Faiss (**no heavy dependencies)**.\n  - `Hora` expects to support more languages, and everything related to performance will be implemented by Rust🦀.\n  - `Annoy` only supports the `LSH (Random Projection)` algorithm.\n  - `ScaNN` and `Faiss` are less user-friendly, (e.g. lack of documentation).\n  - Hora is **ALL IN RUST** 🦀.\n\n- [Milvus](https:\u002F\u002Fgithub.com\u002Fmilvus-io\u002Fmilvus), [Vald](https:\u002F\u002Fgithub.com\u002Fvdaas\u002Fvald), [Jina AI](https:\u002F\u002Fgithub.com\u002Fjina-ai\u002Fjina)\n  - `Milvus` and `Vald` also support multiple languages, but serve as a service instead of a library\n  - `Milvus` is built upon some libraries such as `Faiss`, while `Hora` is a library with all the algorithms implemented itself\n\n# Contribute\n\n**We appreciate your participation!**\n\nWe are glad to have you participate, any contributions are welcome, including documentations and tests.\nYou can create a `Pull Request` or `Issue` on GitHub, and we will review it as soon as possible.\n\nWe use GitHub issues for tracking suggestions and bugs.\n\n#### Clone the repo\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\n```\n\n#### Build\n\n```bash\ncargo build\n```\n\n#### Test\n\n```bash\ncargo test --lib\n```\n\n#### Try the changes\n\n```bash\ncd examples\ncargo run\n```\n\n# License\n\nThe entire repository is licensed under the [Apache License](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FLICENSE).\n","\u003Cdiv align=\"center\">\n  \u003Cimg src=\"asset\u002Flogo.svg\" width=\"70%\"\u002F>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>  English | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_FR.md\"> Français \u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_JP.md\"> 日本語 \u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_KR.md\">한국어\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_RU.md\">Русский\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FREADME_CN.md\">中文\u003C\u002Fa> \u003C\u002Fh3>\n\u003C\u002Fdiv>\n\n# Hora\n\n**[[主页](http:\u002F\u002Fhorasearch.com\u002F)]** **[[文档](https:\u002F\u002Fhorasearch.com\u002Fdoc)]** **[[示例](https:\u002F\u002Fhorasearch.com\u002Fdoc\u002Fexample.html)]**\n\n**_Hora 搜索无处不在！_**\n\nHora 是一个**近似最近邻搜索算法**（Approximate Nearest Neighbor Search Algorithm，[维基百科](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNearest_neighbor_search)）库。我们使用 `Rust🦀` 实现所有代码，以确保可靠性、高级抽象以及与 `C++` 相当的高性能。\n\nHora，日语写作 **`「ほら」`**，发音为 `[hōlə]`，意为\"哇\"、\"你看！\"或\"快看！\"。这个名字灵感来源于一首著名的日本歌曲 **`「小さな恋のうた」`**（《小小恋歌》）。\n\n# 演示\n\n**👩 人脸匹配 [[在线演示](https:\u002F\u002Fhorasearch.com\u002F#Demos)]，快来试试吧！**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_61f39bb983ca.gif\" width=\"100%\"\u002F>\n\u003C\u002Fdiv>\n\n**🍷 葡萄酒评论语义搜索 [[在线演示](https:\u002F\u002Fhorasearch.com\u002F#Demos)]，快来试试吧！**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_981b595d92dd.gif\" width=\"100%\"\u002F>\n\u003C\u002Fdiv>\n\n# 特性\n\n- **高性能** ⚡️\n\n  - **SIMD 加速**（[packed_simd](https:\u002F\u002Fgithub.com\u002Frust-lang\u002Fpacked_simd)）\n  - **稳定的算法实现**\n  - **多线程设计**\n\n- **支持多种语言** ☄️\n\n  - `Python`\n  - `Javascript`\n  - `Java`\n  - `Go`（进行中）\n  - `Ruby`（进行中）\n  - `Swift`（进行中）\n  - `R`（进行中）\n  - `Julia`（进行中）\n  - **也可作为服务使用**\n\n- **支持多种索引** 🚀\n\n  - `分层可导航小世界图索引（Hierarchical Navigable Small World Graph Index，HNSWIndex）`（[详情](https:\u002F\u002Farxiv.org\u002Fabs\u002F1603.09320)）\n  - `卫星系统图（Satellite System Graph，SSGIndex）`（[详情](https:\u002F\u002Farxiv.org\u002Fabs\u002F1907.06146)）\n  - `乘积量化倒排文件（Product Quantization Inverted File，PQIVFIndex）`（[详情](https:\u002F\u002Flear.inrialpes.fr\u002Fpubs\u002F2011\u002FJDS11\u002Fjegou_searching_with_quantization.pdf)）\n  - `随机投影树（Random Projection Tree，RPTIndex）`（LSH，进行中）\n  - `暴力搜索（BruteForce，BruteForceIndex）`（基于 SIMD 的简单实现）\n\n- **可移植性** 💼\n\n  - 支持 `WebAssembly`\n  - 支持 `Windows`、`Linux` 和 `OS X`\n  - 支持 `IOS` 和 `Android`（进行中）\n  - 支持 `no_std`（进行中，部分支持）\n  - **无**重量级依赖，如 `BLAS`\n\n- **可靠性** 🔒\n\n  - `Rust` 编译器保障所有代码安全\n  - 所有语言库（如 `Python`）的内存由 `Rust` 管理\n  - 广泛的测试覆盖\n\n- **支持多种距离度量** 🧮\n\n  - `点积距离（Dot Product Distance）`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_db6ac0bcd538.png)\n  - `欧几里得距离（Euclidean Distance）`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_55c5cb2c9434.png)\n  - `曼哈顿距离（Manhattan Distance）`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_dd96b5abd12f.png)\n  - `余弦相似度（Cosine Similarity）`\n    - ![equation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_d804eab122e2.png)\n\n- **高效开发** ⭐\n  - 文档完善\n  - API 优雅、简洁、易学\n\n# 安装\n\n**`Rust`**\n\n在 `Cargo.toml` 中添加：\n\n```toml\n[dependencies]\nhora = \"0.1.1\"\n```\n\n**`Python`**\n\n```Bash\n$ pip install horapy\n```\n\n**`Javascript (WebAssembly)`**\n\n```Bash\n$ npm i horajs\n```\n\n**`从源码构建`**\n\n```bash\n$ git clone https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\n$ cargo build\n```\n\n# 基准测试\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_readme_a01bb0338e46.png\"\u002F>\n\n测试环境：`aws t2.medium (CPU: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz)` [更多信息](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fann-benchmarks)\n\n# 示例\n\n**`Rust` 示例** [[更多信息](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Ftree\u002Fmain\u002Fexamples)]\n\n```Rust\nuse hora::core::ann_index::ANNIndex;\nuse rand::{thread_rng, Rng};\nuse rand_distr::{Distribution, Normal};\n\npub fn demo() {\n    let n = 1000;\n    let dimension = 64;\n\n    \u002F\u002F 生成样本点\n    let mut samples = Vec::with_capacity(n);\n    let normal = Normal::new(0.0, 10.0).unwrap();\n    for _i in 0..n {\n        let mut sample = Vec::with_capacity(dimension);\n        for _j in 0..dimension {\n            sample.push(normal.sample(&mut rand::thread_rng()));\n        }\n        samples.push(sample);\n    }\n\n    \u002F\u002F 初始化索引\n    let mut index = hora::index::hnsw_idx::HNSWIndex::\u003Cf32, usize>::new(\n        dimension,\n        &hora::index::hnsw_params::HNSWParams::\u003Cf32>::default(),\n    );\n    for (i, sample) in samples.iter().enumerate().take(n) {\n        \u002F\u002F 添加数据点\n        index.add(sample, i).unwrap();\n    }\n    index.build(hora::core::metrics::Metric::Euclidean).unwrap();\n\n    let mut rng = thread_rng();\n    let target: usize = rng.gen_range(0..n);\n    \u002F\u002F 523 的邻居为: [523, 762, 364, 268, 561, 231, 380, 817, 331, 246]\n    println!(\n        \"{:?} has neighbors: {:?}\",\n        target,\n        index.search(&samples[target], 10) \u002F\u002F 搜索 k 个最近邻\n    );\n}\n```\n\n感谢 @vaaaaanquish 提供的完整纯 `Rust 🦀` 图像搜索[示例](https:\u002F\u002Fgithub.com\u002Fvaaaaanquish\u002Frust-ann-search-example)，关于此示例的更多信息，可点击[使用纯 Rust 近似最近邻搜索库 hora 实现图像搜索](https:\u002F\u002Fvaaaaaanquish.hatenablog.com\u002Fentry\u002F2021\u002F08\u002F10\u002F065117)查看。\n\n**`Python` 示例** [[更多信息](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhorapy)]\n\n```Python\nimport numpy as np\nfrom horapy import HNSWIndex\n\ndimension = 50\nn = 1000\n\n# 初始化索引实例\nindex = HNSWIndex(dimension, \"usize\")\n\nsamples = np.float32(np.random.rand(n, dimension))\nfor i in range(0, len(samples)):\n    # 添加节点\n    index.add(np.float32(samples[i]), i)\n\nindex.build(\"euclidean\")  # 构建索引\n\ntarget = np.random.randint(0, n)\n# 410 in Hora ANNIndex \u003CHNSWIndexUsize> (dimension: 50, dtype: usize, max_item: 1000000, n_neigh: 32, n_neigh0: 64, ef_build: 20, ef_search: 500, has_deletion: False)\n```\n\n# has neighbors: [410, 736, 65, 36, 631, 83, 111, 254, 990, 161]\nprint(\"{} in {} \\nhas neighbors: {}\".format(\n    target, index, index.search(samples[target], 10)))  # search\n\n```\n\n**`JavaScript` 示例** [[更多信息](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora-wasm)]\n\n```JavaScript\nimport * as horajs from \"horajs\";\n\nconst demo = () => {\n    const dimension = 50;\n    var bf_idx = horajs.BruteForceIndexUsize.new(dimension);\n    \u002F\u002F var hnsw_idx = horajs.HNSWIndexUsize.new(dimension, 1000000, 32, 64, 20, 500, 16, false);\n    for (var i = 0; i \u003C 1000; i++) {\n        var feature = [];\n        for (var j = 0; j \u003C dimension; j++) {\n            feature.push(Math.random());\n        }\n        bf_idx.add(feature, i); \u002F\u002F add point\n    }\n    bf_idx.build(\"euclidean\"); \u002F\u002F build index\n    var feature = [];\n    for (var j = 0; j \u003C dimension; j++) {\n        feature.push(Math.random());\n    }\n    console.log(\"bf result\", bf_idx.search(feature, 10)); \u002F\u002Fbf result Uint32Array(10) [704, 113, 358, 835, 408, 379, 117, 414, 808, 826]\n}\n\n(async () => {\n    await horajs.default();\n    await horajs.init_env();\n    demo();\n})();\n```\n\n**`Java` 示例** [[更多信息](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora-java)]\n\n```Java\npublic void demo() {\n    final int dimension = 2;\n    final float variance = 2.0f;\n    Random fRandom = new Random();\n\n    BruteForceIndex bruteforce_idx = new BruteForceIndex(dimension); \u002F\u002F init index instance\n\n    List\u003Cfloat[]> tmp = new ArrayList\u003C>();\n    for (int i = 0; i \u003C 5; i++) {\n        for (int p = 0; p \u003C 10; p++) {\n            float[] features = new float[dimension];\n            for (int j = 0; j \u003C dimension; j++) {\n                features[j] = getGaussian(fRandom, (float) (i * 10), variance);\n            }\n            bruteforce_idx.add(\"bf\", features, i * 10 + p); \u002F\u002F add point\n            tmp.add(features);\n          }\n    }\n    bruteforce_idx.build(\"bf\", \"euclidean\"); \u002F\u002F build index\n\n    int search_index = fRandom.nextInt(tmp.size());\n    \u002F\u002F nearest neighbor search\n    int[] result = bruteforce_idx.search(\"bf\", 10, tmp.get(search_index));\n    \u002F\u002F [main] INFO com.hora.app.ANNIndexTest  - demo bruteforce_idx[7, 8, 0, 5, 3, 9, 1, 6, 4, 2]\n    log.info(\"demo bruteforce_idx\" + Arrays.toString(result));\n}\n\nprivate static float getGaussian(Random fRandom, float aMean, float variance) {\n    float r = (float) fRandom.nextGaussian();\n    return aMean + r * variance;\n}\n```\n\n# 路线图\n\n- [ ] 完整的测试覆盖\n- [ ] 实现 [EFANNA](http:\u002F\u002Farxiv.org\u002Fabs\u002F1609.07228) 算法以实现更快的 KNN 图构建\n- [ ] Swift 支持及 iOS\u002FmacOS 部署示例\n- [ ] 支持 `R` 语言\n- [ ] 支持 `mmap`\n\n# 相关项目与对比\n\n- [Faiss](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Ffaiss)、[Annoy](https:\u002F\u002Fgithub.com\u002Fspotify\u002Fannoy)、[ScaNN](https:\u002F\u002Fgithub.com\u002Fgoogle-research\u002Fgoogle-research\u002Ftree\u002Fmaster\u002Fscann)：\n\n  - **`Hora` 的实现深受这些库的启发。**\n  - `Faiss` 更侧重于 GPU 场景，而 `Hora` 比 Faiss 更轻量（**无繁重依赖**）。\n  - `Hora` 期望支持更多语言，所有与性能相关的部分都将由 Rust🦀 实现。\n  - `Annoy` 仅支持 `LSH (Random Projection, 局部敏感哈希\u002F随机投影)` 算法。\n  - `ScaNN` 和 `Faiss` 的用户友好性较差（例如缺乏文档）。\n  - Hora **完全基于 Rust** 🦀。\n\n- [Milvus](https:\u002F\u002Fgithub.com\u002Fmilvus-io\u002Fmilvus)、[Vald](https:\u002F\u002Fgithub.com\u002Fvdaas\u002Fvald)、[Jina AI](https:\u002F\u002Fgithub.com\u002Fjina-ai\u002Fjina)\n  - `Milvus` 和 `Vald` 也支持多种语言，但以服务（service）形式而非库（library）形式提供\n  - `Milvus` 基于 `Faiss` 等库构建，而 `Hora` 是一个所有算法都自行实现的库\n\n# 贡献\n\n**我们感谢您的参与！**\n\n我们很高兴您能参与，欢迎任何贡献，包括文档和测试。\n您可以在 GitHub 上创建 `Pull Request` 或 `Issue`，我们会尽快审核。\n\n我们使用 GitHub issues 来跟踪建议和漏洞。\n\n#### 克隆仓库\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\n```\n\n#### 构建\n\n```bash\ncargo build\n```\n\n#### 测试\n\n```bash\ncargo test --lib\n```\n\n#### 尝试更改\n\n```bash\ncd examples\ncargo run\n```\n\n# 许可证\n\n整个仓库采用 [Apache License](https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002FLICENSE) 许可。","# Hora 快速上手指南\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Windows \u002F Linux \u002F macOS\n- **Rust 版本**: 1.56+（如需从源码编译）\n- **Python 版本**: 3.6+（如需使用 Python 绑定）\n\n### 前置依赖\n| 语言 | 依赖 |\n|:---|:---|\n| Rust | [Rust 工具链](https:\u002F\u002Frustup.rs\u002F) |\n| Python | `pip` 或 `conda` |\n| JavaScript\u002FNode.js | `npm` 或 `yarn` |\n| Java | JDK 8+ |\n\n---\n\n## 安装步骤\n\n### Rust 项目\n\n在 `Cargo.toml` 中添加：\n\n```toml\n[dependencies]\nhora = \"0.1.1\"\n```\n\n### Python（推荐国内镜像加速）\n\n```bash\n# 使用清华镜像\npip install horapy -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n# 或使用阿里云镜像\npip install horapy -i https:\u002F\u002Fmirrors.aliyun.com\u002Fpypi\u002Fsimple\u002F\n```\n\n### JavaScript\u002FWebAssembly\n\n```bash\nnpm i horajs\n```\n\n### 从源码构建\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\ncd hora\ncargo build --release\n```\n\n---\n\n## 基本使用\n\n### Rust 示例\n\n```rust\nuse hora::core::ann_index::ANNIndex;\nuse rand::{thread_rng, Rng};\nuse rand_distr::{Distribution, Normal};\n\nfn main() {\n    let n = 1000;\n    let dimension = 64;\n\n    \u002F\u002F 生成随机样本数据\n    let mut samples = Vec::with_capacity(n);\n    let normal = Normal::new(0.0, 10.0).unwrap();\n    for _ in 0..n {\n        let sample: Vec\u003Cf32> = (0..dimension)\n            .map(|_| normal.sample(&mut rand::thread_rng()))\n            .collect();\n        samples.push(sample);\n    }\n\n    \u002F\u002F 创建 HNSW 索引\n    let mut index = hora::index::hnsw_idx::HNSWIndex::\u003Cf32, usize>::new(\n        dimension,\n        &hora::index::hnsw_params::HNSWParams::\u003Cf32>::default(),\n    );\n\n    \u002F\u002F 添加数据点\n    for (i, sample) in samples.iter().enumerate() {\n        index.add(sample, i).unwrap();\n    }\n\n    \u002F\u002F 构建索引\n    index.build(hora::core::metrics::Metric::Euclidean).unwrap();\n\n    \u002F\u002F 搜索最近邻\n    let mut rng = thread_rng();\n    let target: usize = rng.gen_range(0..n);\n    let neighbors = index.search(&samples[target], 10);\n    \n    println!(\"目标点 {} 的10个最近邻: {:?}\", target, neighbors);\n}\n```\n\n### Python 示例\n\n```python\nimport numpy as np\nfrom horapy import HNSWIndex\n\n# 参数设置\ndimension = 50\nn = 1000\n\n# 初始化索引\nindex = HNSWIndex(dimension, \"usize\")\n\n# 生成随机数据并添加\nsamples = np.float32(np.random.rand(n, dimension))\nfor i in range(n):\n    index.add(np.float32(samples[i]), i)\n\n# 构建索引（使用欧氏距离）\nindex.build(\"euclidean\")\n\n# 搜索最近邻\ntarget = np.random.randint(0, n)\nneighbors = index.search(samples[target], 10)\n\nprint(f\"目标点 {target} 的10个最近邻: {neighbors}\")\n```\n\n### JavaScript 示例\n\n```javascript\nimport * as horajs from \"horajs\";\n\nconst demo = async () => {\n    const dimension = 50;\n    \n    \u002F\u002F 创建暴力搜索索引（或换用 HNSWIndexUsize）\n    const index = horajs.BruteForceIndexUsize.new(dimension);\n    \n    \u002F\u002F 添加数据点\n    for (let i = 0; i \u003C 1000; i++) {\n        const feature = Array.from({length: dimension}, () => Math.random());\n        index.add(feature, i);\n    }\n    \n    \u002F\u002F 构建索引\n    index.build(\"euclidean\");\n    \n    \u002F\u002F 搜索\n    const query = Array.from({length: dimension}, () => Math.random());\n    const result = index.search(query, 10);\n    console.log(\"最近邻结果:\", result);\n};\n\n(async () => {\n    await horajs.default();\n    await horajs.init_env();\n    demo();\n})();\n```\n\n---\n\n## 关键概念速查\n\n| 索引类型 | 适用场景 | 特点 |\n|:---|:---|:---|\n| `HNSWIndex` | 通用场景，推荐首选 | 图索引，搜索快，内存适中 |\n| `SSGIndex` | 高维数据 | 卫星系统图，精度更高 |\n| `PQIVFIndex` | 大规模数据 | 乘积量化，内存友好 |\n| `BruteForceIndex` | 小数据集\u002F基准测试 | 精确搜索，速度慢 |\n\n**距离度量**: `euclidean`（欧氏距离）、`cosine`（余弦相似度）、`dot`（点积）、`manhattan`（曼哈顿距离）","某短视频平台的推荐系统团队需要为 2 亿用户实现\"以图搜视频\"功能，用户上传一张截图即可找到相似视频片段。\n\n### 没有 hora 时\n\n- 团队使用暴力遍历（Brute Force）计算余弦相似度，单次查询需比对 5000 万条视频特征向量，平均耗时 8 秒，用户流失率高达 70%\n- 尝试基于 Faiss 的 Python 封装方案，但在高并发场景下频繁出现内存泄漏，凌晨 3 点被告警叫醒 4-5 次成为常态\n- 运维成本激增：需要 32 台 64 核服务器组成检索集群，每月云资源费用超过 18 万元\n- 跨平台部署困难：iOS 端的相似图片去重功能因 C++ 依赖库编译失败，延期 3 个月无法上线\n\n### 使用 hora 后\n\n- 采用 HNSWIndex 索引结构，单次相似视频检索耗时降至 12 毫秒，用户留存率提升 45%，\"以图搜视频\"功能日活突破 800 万\n- Rust 内存安全特性彻底消除内存泄漏问题，服务连续运行 6 个月零故障，团队终于能睡个安稳觉\n- 索引构建后单机即可承载全量数据，服务器缩减至 4 台，月度成本降低至 2.3 万元，节省的预算投入算法优化\n- 通过 hora 的 WebAssembly 支持，iOS 端离线去重模块 2 周完成集成，包体积仅增加 1.2MB，顺利赶上版本发布窗口\n\nhora 用 Rust 的可靠性重新定义了向量检索的基础设施标准，让高性能与低运维成本不再是非此即彼的选择。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fhora-search_hora_572af936.png","hora-search","Hora-Search","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fhora-search_1e5de026.png","Hora Search Everywhere!",null,"gagasalamer@outlook.com","https:\u002F\u002Fhorasearch.com\u002F","https:\u002F\u002Fgithub.com\u002Fhora-search",[23],{"name":24,"color":25,"percentage":26},"Rust","#dea584",100,2660,76,"2026-04-02T02:32:12","Apache-2.0",1,"Linux, macOS, Windows, iOS, Android","未说明",{"notes":35,"python":33,"dependencies":36},"核心库使用 Rust 实现，无重依赖（如 BLAS）。支持 WebAssembly 部署，支持多语言绑定（Python、JavaScript、Java 等）。部分功能如 iOS\u002FAndroid 支持、no_std 支持仍在开发中（WIP）。Python 包名为 horapy，JavaScript 包名为 horajs。",[6],[38,39,40],"图像","开发框架","数据工具",[42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59],"search-engine","rust","approximate-nearest-neighbor-search","artificial-intelligence","recommender-system","image-search","vector-search","algorithm","data-structures","simd","hnsw","similarity-search","neural-network","high-performance","machine-learning","k-nearest-neighbors","rust-sci","numeric",3,"ready","2026-03-27T02:49:30.150509","2026-04-06T07:12:41.088847",[65,70,75,80,85],{"id":66,"question_zh":67,"answer_zh":68,"source_url":69},4046,"如何将 Hora 索引保存到磁盘并在之后加载使用？","Hora 支持通过 `dump()` 和 `load()` 方法将索引序列化到磁盘。具体步骤如下：\n\n**保存索引：**\n```python\nindex.add(...)\nindex.add(...)\nindex.build('euclidean')\nindex.dump('path\u002Fto\u002Fmy_index.hora')\n```\n\n**加载索引：**\n```python\nindex = HNSWIndex(dimensions, 'usize')\nindex.load('path\u002Fto\u002Fmy_index.hora')\n# 现在可以直接搜索\nindex.search(search_vector, 10)\n```\n\n注意：不能使用 Python 的 pickle 模块，因为 usize 对象无法被 pickle。必须使用 Hora 原生的 dump\u002Fload 方法。","https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fissues\u002F42",{"id":71,"question_zh":72,"answer_zh":73,"source_url":74},4047,"Hora 是否支持将索引序列化到磁盘以加速大规模向量索引的重建？","是的，Hora 支持索引的序列化和反序列化。在源代码中可以找到 `dump` 和 `load` 方法来实现这一功能。这对于需要索引数百万向量且构建速度较慢的场景特别有用——可以一次性构建索引并保存到磁盘，之后直接加载使用而无需重新构建。","https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fissues\u002F30",{"id":76,"question_zh":77,"answer_zh":78,"source_url":79},4048,"BruteForceIndex 从文件加载索引时出现 Io Error: UnexpectedEof 错误怎么办？","这个错误通常是由于使用了错误的索引类型初始化导致的。确保加载索引时使用的索引类型与保存时一致。\n\n例如，如果原索引是 HNSWIndex，加载时也必须使用 HNSWIndex：\n```python\nindex = HNSWIndex(dimension, \"usize\")  # 必须与保存时的类型一致\nindex.load('path\u002Fto\u002Findex_file')\n```\n\n如果索引文件本身损坏或不完整，也可能导致此错误。请检查索引文件是否完整保存。","https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fissues\u002F12",{"id":81,"question_zh":82,"answer_zh":83,"source_url":84},4049,"Hora 是否支持阿拉伯语、希伯来语、波斯语、中文等非 ASCII 语言？","Hora 的节点索引（node index）是一个 trait，可以是整数或字符串类型。由于 Rust 中的字符串原生支持 UTF-8 编码，因此 Hora 理论上支持包括阿拉伯语、希伯来语、波斯语、中文等在内的所有 UTF-8 语言。\n\n具体实现可以参考源代码中的节点定义：https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fblob\u002Fmain\u002Fsrc\u002Fcore\u002Fnode.rs","https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fissues\u002F21",{"id":86,"question_zh":87,"answer_zh":88,"source_url":89},4050,"如何在 Django 中使用 Hora？","Hora 可以通过 Python 绑定 horapy 在 Django 中使用。安装和基本用法如下：\n\n**安装：**\n```bash\npip install horapy\n```\n\n**使用示例：**\n```python\nimport numpy as np\nfrom horapy import HNSWIndex\n\ndimension = 50\nn = 1000\n\n# 初始化索引实例\nindex = HNSWIndex(dimension, \"usize\")\n\nsamples = np.float32(np.random.rand(n, dimension))\nfor i in range(0, len(samples)):\n    # 添加节点\n    index.add(np.float32(samples[i]), i)\n\nindex.build(\"euclidean\")  # 构建索引\n\ntarget = np.random.randint(0, n)\n# 搜索最近邻\nprint(\"{} in {} \\nhas neighbors: {}\".format(\n    target, index, index.search(samples[target], 10)))\n```\n\n在 Django 中，可以将此逻辑封装到视图或服务层中，根据具体业务需求调用。","https:\u002F\u002Fgithub.com\u002Fhora-search\u002Fhora\u002Fissues\u002F7",[],[92,101,111,119,127,139],{"id":93,"name":94,"github_repo":95,"description_zh":96,"stars":97,"difficulty_score":60,"last_commit_at":98,"category_tags":99,"status":61},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",[39,38,100],"Agent",{"id":102,"name":103,"github_repo":104,"description_zh":105,"stars":106,"difficulty_score":107,"last_commit_at":108,"category_tags":109,"status":61},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 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[39,100,110],"语言模型",{"id":112,"name":113,"github_repo":114,"description_zh":115,"stars":116,"difficulty_score":107,"last_commit_at":117,"category_tags":118,"status":61},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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[39,38,100],{"id":120,"name":121,"github_repo":122,"description_zh":123,"stars":124,"difficulty_score":107,"last_commit_at":125,"category_tags":126,"status":61},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[39,110],{"id":128,"name":129,"github_repo":130,"description_zh":131,"stars":132,"difficulty_score":107,"last_commit_at":133,"category_tags":134,"status":61},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[38,40,135,136,100,137,110,39,138],"视频","插件","其他","音频",{"id":140,"name":141,"github_repo":142,"description_zh":143,"stars":144,"difficulty_score":60,"last_commit_at":145,"category_tags":146,"status":61},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[100,38,39,110,137]]