ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

llmware 源码导航:Library、Embeddings、Prompts 与 Model Catalog 核心模块解析及代码贡献指南

llmware 源码导航:Library、Embeddings、Prompts 与 Model Catalog 核心模块解析及代码贡献指南 llmware 源码导航Library、Embeddings、Prompts 与 Model Catalog 核心模块解析及代码贡献指南【免费下载链接】llmwareUnified framework for building enterprise RAG pipelines with small, specialized models项目地址: https://gitcode.com/GitHub_Trending/ll/llmware本文基于 llmware 仓库的官方贡献文档 docs/contributing/code.md 整理而成面向希望参与 llmware 开发的贡献者与需要深入理解其内部结构的开发者。文章沿原文档脉络逐一讲解四大核心模块——Library文档入库、Embeddings向量存取、Prompts提示词增强与 Model Catalog模型注册——的类与方法并结合 llmware/ 包中的真实源码补充参数默认值、调用链与返回值细节最后给出 llmware 对“新功能”与“Bug 修复”两类代码贡献的具体要求。读完本文你可以准确定位各模块入口、理解关键方法的实现行为并按项目规范提交高质量的代码贡献。llmware 代码库核心模块总览llmware 是一个面向企业级 RAG 流水线的统一框架。要参与其开发首先需要能“导航”代码库。从 llmware/ 包的结构看各核心模块与其实现文件的对应关系如下模块实现文件职责Library文档库llmware/library.py文档解析、文本分块、索引管理负责“加入内容”的重活Embeddings向量存取llmware/embeddings.py将嵌入模型作用于文档库把向量存入向量库并提供自然语言查询Prompts提示词llmware/prompts.py管理与模型交互的输入并为提示词附加各类来源RAG 增强Model Catalog模型目录llmware/models.py集中管理可加载的生成式/嵌入/量化模型并支持注册新模型此外解析逻辑集中在 llmware/parsers.pyLibrary 的入库方法最终都会委托Parser完成实际解析检索逻辑在 llmware/retrieval.py智能体在 llmware/agents.py。测试用例位于 tests/ 目录如 tests/library/test_library.py、tests/retrieval/test_search_in_memory.py可用于验证你的改动。Library文档解析、分块与索引的中心Library 与 LibraryCatalog 两个类library模块在 llmware/library.py 中实现了Library与LibraryCatalog两个类。Libraryllmware/library.py#L38实现library概念——一个文档集合文档可以是 PDF、图片或 Office 文档。其类文档字符串明确写道library 是“从解析文件中提取的文本、表格和图片构成的已索引集合”。它负责解析parsing、文本分块chunking与索引indexing即“加入内容”的全部重活。LibraryCatalogllmware/library.py#L1286管理所有 library 的目录与检索用于枚举、加载与删除已有文档库。从源码结构看Library.__init__llmware/library.py#L49会初始化一系列路径属性file_copy_path、image_path、dataset_path、embedding_path等均挂载在library_main_path之下、默认的 block 键结构default_keys含doc_ID、text_block、table_block、header_text、text_search等字段以及 library card 的默认字段documents、blocks、images、pages、tables等。若LLMWareConfig.get_llmware_path()尚不存在会自动调用setup_llmware_workspace()创建工作区——这意味着贡献者运行任何 Library 示例前无需手动建目录。单文件与批量入库add_file / add_filesadd_file(self, file_path)llmware/library.py#L491-L514向文档库添加单个任意受支持类型的文档。从实现看它先把文件拷贝到 llmware 的 input 目录再转调add_files()因此单文件与批量入库共用同一条解析流水线。add_files(...)llmware/library.py#L516-L620向文档库添加整个文件夹中的文档。真实签名比贡献文档中的简写多了两个日志参数为def add_files(self, input_folder_pathNone, encodingutf-8, chunk_size400, get_imagesTrue, get_tablesTrue, smart_chunking1, max_chunk_size600, table_gridTrue, get_header_textTrue, table_strategy1, strip_headerFalse, verbose_level2, copy_files_to_libraryTrue, set_custom_logging-1, use_logging_fileFalse)各参数的默认值与含义取自源码 docstring如下表参数默认值说明input_folder_pathNone待入库文件所在文件夹路径缺省时使用LLMWareConfig.get_input_path()encodingutf-8读取文件时使用的编码chunk_size400解析时生成的文本块目标大小get_imagesTrue是否从文档中提取图片get_tablesTrue是否从文档中提取表格smart_chunking1智能分块策略级别注贡献文档旧版签名中标注为 2当前源码默认值为 1max_chunk_size600文本块的最大尺寸table_gridTrue表格是否使用网格策略get_header_textTrue是否提取页眉/头部文本table_strategy1表格抽取策略strip_headerFalse是否剥离文档头部verbose_level2日志详细程度copy_files_to_libraryTrue是否将文件拷贝进文档库目录set_custom_logging-1为解析任务设置 0–50 区间的自定义日志级别use_logging_fileFalse解析日志输出到 stdout默认还是文件从实现看add_files的核心是构造一个Parser对象并调用其ingest(input_folder_path, dupe_checkTrue)llmware/library.py#L585-L599文件按扩展名被路由到相应解析器随后通过入库前后get_library_card()计数器之差返回一个结果字典包含docs_added、blocks_added、images_added、pages_added、tables_added与rejected_files六个统计量——这是贡献者调试解析流水线时最有用的可观测输出。面向特定来源的入库方法除通用入库外Library 还提供一组按来源类型划分的方法全部位于 llmware/library.py#L956-L1109 附近且都遵循“委托Parser 必要时重建文本索引”的统一模式add_website(self, url, get_linksTrue, max_links5)#L956把网站及其链接页面加入文档库。get_links控制是否抓取页内链接max_links限制跟随的链接数。实现上调用Parser.parse_website(...)然后CollectionWriter.build_text_index()重建全文索引。add_wiki(self, topic_list, target_results10)#L982按主题列表抓取维基百科文章入库target_results指定每个主题的抓取结果数。add_dialogs(self, input_folderNone)#L1005添加对话转录dialog transcripts源码 docstring 标注为 AWS dialog transcript走Parser.parse_dialog(input_folder)通道。add_image(self, input_folderNone)#L1027添加图片含图片 OCR 内容到文档库走Parser.parse_image(input_folder)。add_pdf_by_ocr(self, input_folderNone)#L1049为扫描件或无法常规解析的 PDF 提供 OCR 入库通道走Parser.parse_pdf_by_ocr_images(input_folder)。add_pdf(self, input_folderNone)#L1071便捷方法仅添加 PDF源码注释明确建议“多数情况下add_files是更好的选择”。add_office(self, input_folderNone)#L1093便捷方法仅添加 Office 文档同样建议优先使用add_files。以上方法的input_folder缺省时一律回退到LLMWareConfig.get_input_path()这一约定对编写入库相关的测试与示例参考 tests/library/test_library.py很有用。Embeddings嵌入模型与向量库的统一存取接口embedding同时指“向量库 嵌入模型”。该模块负责将嵌入模型作用于文档库、把向量存入向量库并支持以自然语言查询向量。相关实现位于 llmware/embeddings.py。所有向量库后端共同暴露三个方法在文件中被多个后端类重复实现形成统一接口create_new_embedding(self, doc_idsNone, batch_size500)创建嵌入并写入向量库。doc_ids可限定只对部分文档重建嵌入batch_size控制批处理大小不同后端的默认值略有差异例如部分后端为 100。search_index(self, query_embedding_vector, sample_count10)给定查询向量在向量库中做近邻检索sample_count控制返回的条数默认 10。delete_index(self)删除已创建的向量库索引。从源码结构看llmware/embeddings.py 中每个具体向量库后端类都各自实现了上述三个同名方法文件中可检索到多处def create_new_embedding/def search_index/def delete_index即 llmware 以“同签名、多后端”的方式统一了不同向量数据库的存取行为。这一点对贡献者很重要新增或修改某个向量库后端时应保持这三个方法的签名与语义一致相关行为可参考 tests/embeddings/ 下的测试如 test_all_embedding_dbs.py。Prompts为提示词附加来源RAG 增强prompt是模型的输入模型据此生成响应。一个重要使用场景是用户希望用一个或多个“来源”sources来增强提示词——这正是 RAG 的落点。来源附加方法集中在 llmware/prompts.py 的 Prompt 对象上llmware/prompts.py#L358-L511add_source_new_query(self, library, queryNone, query_typesemantic, result_count10)#L358对文档库发起新查询并把查询结果加入提示词。实现上是两步先以Query(library).query(...)执行查询支持semantic等query_type再由Sources(self).package_source(...)打包为提示词来源。若查询无结果会发出 “No source added” 警告。add_source_query_results(self, query_results)#L374直接把一次先前查询的结果作为来源加入提示词适合“先查询、后组装提示词”的两步式用法。add_source_library(self, library_name, account_namellmware)#L391把整个文档库加入提示词。源码 docstring 与官方文档一致地提醒仅当文档库规模很小时才推荐这样使用内部通过Query(lib).get_whole_library()取出全库内容。add_source_wikipedia(self, topic, article_count3, queryNone)#L411按给定topic把维基百科文章加入提示词article_count控制篇数。add_source_yahoo_finance(self, tickerNone, key_listNone)#L434把 Yahoo Finance 的股票行情ticker加入提示词。add_source_knowledge_graph(self, library, query)按查询把知识图谱的 summary 输出元素加入提示词。官方文档特别标注该方法处于实验阶段行为不稳定可能在后续版本中发生剧烈变化——贡献者修改或依赖它时应保持谨慎。add_source_website(self, url, queryNone)#L467把url指向的网站内容加入提示词。add_source_document(self, input_fp, input_fn, queryNone)#L488把任意受支持类型的文档单个或多个加入提示词query可用于对文档做过滤。add_source_last_interaction_step(self)#L511把最近一次交互加入提示词用于实现交互式对话聊天场景。这些方法返回值一致打包好的 sources 字典含text_batch等键可直接供prompt_with_sources等提示词组合方式使用当text_batch为空时日志中会给出警告便于排查“来源未生效”的问题。Model Catalog注册新模型与扩展模型目录model catalog是一组模型的集中目录相关注册方法位于 llmware/models.pyllmware/models.py#L736-L880。贡献文档列出的五个注册方法允许用户把当前目录尚未支持的模型加入 catalogregister_new_hf_generative_modelllmware/models.py#L736从 Hugging Face 注册一个新的生成式模型参数包括hf_model_name、context_window2048、prompt_wrapperINST、display_name、temperature0.3、trailing_space、link等。这样用户可以把 Hugging Face 上目前未内置支持的模型纳入 llmware 使用。register_sentence_transformer_modelllmware/models.py#L778注册一个新的 sentence transformer 嵌入模型需要提供model_name、embedding_dims、context_window可选display_name与link。register_gguf_modelllmware/models.py#L804注册一个新的 GGUF 量化模型参数包括model_name、gguf_model_repo、gguf_model_file_name、prompt_wrapperNone、eos_token_id0、display_name、trailing_space、temperature0.3、context_window2048、instruction_followingTrue。这与仓库中 llmware/lib/gguf/ 下预置的各平台 GGUF 运行时库相配套。register_open_chat_modelllmware/models.py#L843注册任意通过 Web API 暴露的聊天模型例如本地 localhost 上运行的模型参数包括model_name、api_baseNone、model_typechat、display_name、context_window4096、instruction_followingTrue、prompt_wrapper、temperature0.5。register_ollama_modelllmware/models.py#L880注册通过 Web API 暴露的 Ollama 模型参数为model_name、hostlocalhost、port11434、model_typechat、rawFalse、streamFalse、display_name、context_window4096、instruction_followingTrue、prompt_wrapper、temperature0.5——与上面的register_open_chat_model基本同构只是固定了 Ollama 的默认主机与端口。对贡献者而言这几个注册方法也是“如何接入一个新模型后端”的参考实现新模型类型应复用目录的注册/查找模式而不是在各处硬编码模型配置默认模型配置参见 llmware/model_configs.py 与 llmware/gguf_configs.py。llmware 代码贡献的类别与流程官方贡献文档 docs/contributing/code.md 将代码贡献分为两类处理方式不同。新功能或既有功能增强如果你想提交的代码贡献是新增功能或增强既有功能最佳起点是先在项目的 Discussions 区发起讨论并明确建议请在动手实现之前先讨论以免投入开发后才发现该方向不会被合并。这与 llmware 的模块划分相呼应——新功能通常落在 Library 入库通道llmware/library.py、llmware/parsers.py、向量库后端llmware/embeddings.py或模型注册llmware/models.py之一先确认目标模块与接口边界可以避免返工。Bug 修复遇到 Bug 时官方建议按以下步骤进行针对该 Bug 提交一个 issue提供一个自包含的最小可复现示例minimal, reproducible example——文档强调这一点“extremely important”并建议阅读 Stack Overflow 帮助中心的“如何创建最小可复现示例”与 self-contained 标签说明给出可能的解决方案提交一个修复该 Bug 的 pull request。撰写最小复现示例时可以参照仓库自带的端到端样例如 solutions/rag/ 下的 fast start 系列脚本或 tutorials/getting_started/ 下的入门示例来精简你的复现代码使示例只保留触发问题所需的最少配置与调用。结语从文档到源码的贡献者路径llmware 的贡献文档用“四大核心模块 贡献类别”搭建了代码库的导航骨架Library 通过add_file/add_files等九个入库方法llmware/library.py完成解析、分块与索引Embeddings 以create_new_embedding/search_index/delete_index三件套统一了多向量库后端的存取llmware/embeddings.pyPrompts 通过一组add_source_*方法把查询结果、文档库、网页、维基与知识图谱接入提示词llmware/prompts.pyModel Catalog 则提供五个register_*方法扩展模型生态llmware/models.py。新功能先讨论、Bug 修复附最小可复现示例是参与 llmware 开发的两条基本纪律。结合 tests/ 下的测试与 solutions/ 下的真实示例贡献者可以按“读懂模块 → 本地运行验证 → 按类别提交”的路径高效地进入这个项目。【免费下载链接】llmwareUnified framework for building enterprise RAG pipelines with small, specialized models项目地址: https://gitcode.com/GitHub_Trending/ll/llmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表