经 AI Skill Hub 精选评估,LumoKit 获评「推荐使用」。这款AI工具在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 7.5 分,适合有一定技术背景的用户使用。
一款开源Swift软件包,专为iOS/macOS提供端侧检索增强生成(RAG)能力。无需云端依赖,支持本地AI模型集成,适合隐私优先的移动应用开发者和AI集成爱好者使用。
LumoKit 是一款基于 Swift 开发的开源工具,专注于 RAG、Swift6、端侧AI 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
一款开源Swift软件包,专为iOS/macOS提供端侧检索增强生成(RAG)能力。无需云端依赖,支持本地AI模型集成,适合隐私优先的移动应用开发者和AI集成爱好者使用。
LumoKit 是一款基于 Swift 开发的开源工具,专注于 RAG、Swift6、端侧AI 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
# 克隆仓库 git clone https://github.com/rryam/LumoKit cd LumoKit # 查看安装说明 cat README.md # 按 README 完成环境依赖安装后即可使用
# 查看帮助 lumokit --help # 基本运行 lumokit [options] <input> # 详细使用说明请查阅文档 # https://github.com/rryam/LumoKit
# lumokit 配置说明 # 查看配置选项 lumokit --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export LUMOKIT_CONFIG="/path/to/config.yml"
LumoKit is a Swift package for building on-device Retrieval-Augmented Generation (RAG) workflows. It combines PicoDocs for document ingestion with VecturaKit for vector storage and semantic search, giving you an end-to-end pipeline for creating searchable knowledge bases.
The name Lumo blends the Mandarin characters 流 (liú, “flow”) and 模 (mó, “model”), representing the flow of knowledge into machine learning models.
Add LumoKit to your Package.swift using Swift Package Manager:
dependencies: [
.package(url: "https://github.com/rryam/LumoKit.git", from: "3.2.0")
]
Then attach the dependency to your target:
.target(
name: "AppModule",
dependencies: [
.product(name: "LumoKit", package: "LumoKit")
]
)
import LumoKit
import VecturaKit
// Configure vector database
let vecturaConfig = VecturaConfig(
name: "knowledge-base",
searchOptions: .init(
defaultNumResults: 10,
minThreshold: 0.7
)
)
// Configure chunking strategy
let chunkingConfig = ChunkingConfig(
chunkSize: 500,
overlapPercentage: 0.15, // 15% overlap between chunks
strategy: .semantic, // Content-aware chunking
contentType: .prose // For prose text
)
// Initialize LumoKit
let lumoKit = try await LumoKit(
config: vecturaConfig,
chunkingConfig: chunkingConfig
)
// Optionally choose a specific embedding model.
// Use a separate store when switching models so stored vector dimensions stay consistent.
let customModelConfig = VecturaConfig(
name: "knowledge-base-retrieval",
searchOptions: .init(
defaultNumResults: 10,
minThreshold: 0.7
)
)
let customModelLumoKit = try await LumoKit(
config: customModelConfig,
chunkingConfig: chunkingConfig,
modelSource: .id("minishlab/potion-retrieval-32M")
)
// Or provide any Vectura embedder directly
let customEmbedderConfig = VecturaConfig(
name: "knowledge-base-multilingual",
searchOptions: .init(
defaultNumResults: 10,
minThreshold: 0.7
)
)
let customEmbedderLumoKit = try await LumoKit(
config: customEmbedderConfig,
chunkingConfig: chunkingConfig,
embedder: SwiftEmbedder(modelSource: .id("intfloat/multilingual-e5-small"))
)
// Parse and index a document
let url = URL(fileURLWithPath: "/path/to/document.pdf")
try await lumoKit.parseAndIndex(url: url)
// Search
let results = try await lumoKit.semanticSearch(
query: "Explain vector databases",
numResults: 5,
threshold: 0.65
)
for result in results {
print(result.text)
}
LumoKit can also accept any embedder that conforms to VecturaEmbedder.
NLContextualEmbedderimport LumoKit
import VecturaKit
import VecturaNLKit
let embedder = try await NLContextualEmbedder(language: .english)
let lumoKit = try await LumoKit(
config: vecturaConfig,
chunkingConfig: chunkingConfig,
embedder: embedder
)
OpenAICompatibleEmbedderimport LumoKit
import VecturaKit
import VecturaOAIKit
let embedder = OpenAICompatibleEmbedder(
baseURL: "https://api.openai.com/v1",
model: "text-embedding-3-small",
apiKey: "<api-key>"
)
let lumoKit = try await LumoKit(
config: vecturaConfig,
chunkingConfig: chunkingConfig,
embedder: embedder
)
MLXEmbedderimport LumoKit
import VecturaKit
import VecturaMLXKit
import MLXEmbedders
let embedder = try await MLXEmbedder(configuration: .multilingual_e5_small)
let lumoKit = try await LumoKit(
config: vecturaConfig,
chunkingConfig: chunkingConfig,
embedder: embedder
)
public final class LumoKit {
public init(
config: VecturaConfig,
chunkingConfig: ChunkingConfig? = nil,
modelSource: VecturaModelSource = .default
) async throws
public init(
config: VecturaConfig,
chunkingConfig: ChunkingConfig? = nil,
embedder: VecturaEmbedder
) async throws
public func parseAndIndex(url: URL, chunkingConfig: ChunkingConfig? = nil) async throws -> [UUID]
public func parseDocument(from url: URL, chunkingConfig: ChunkingConfig? = nil) async throws -> [Chunk]
public func chunkText(_ text: String, config: ChunkingConfig) throws -> [Chunk]
public func semanticSearch(
query: String,
numResults: Int = 5,
threshold: Float = 0.7
) async throws -> [VecturaSearchResult]
public func addDocuments(texts: [String]) async throws -> [UUID]
public func deleteChunks(ids: [UUID]) async throws
public func documentCount() async throws -> Int
public func resetDB() async throws
}
public struct ChunkingConfig {
public let chunkSize: Int
public let overlapPercentage: Double
public let strategy: ChunkingStrategyType // .sentence, .paragraph, .semantic
public let contentType: ContentType // .prose, .code, .markdown, .mixed
}
public enum LumoKitError: Error {
case emptyDocument
case invalidChunkSize
case invalidURL
case fileNotFound
case unsupportedFileType
case invalidSearchParameters
case chunkingFailed(strategy: String, underlyingError: Error)
}
LumoKit填补Swift生态RAG空白,端侧部署方案符合隐私趋势,代码质量良好,但社区规模小、文档需强化。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:LumoKit 的核心功能完整,质量良好。对于AI 技术爱好者来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | LumoKit |
| Topics | RAGSwift6端侧AI本地模型隐私保护 |
| GitHub | https://github.com/rryam/LumoKit |
| License | MIT |
| 语言 | Swift |
收录时间:2026-05-24 · 更新时间:2026-05-24 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。