[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-NVIDIA--NeMo-Retriever":3,"tool-NVIDIA--NeMo-Retriever":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 真正成长为懂上",145895,2,"2026-04-08T11:32:59",[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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[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},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":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":106,"forks":107,"last_commit_at":108,"license":109,"difficulty_score":110,"env_os":111,"env_gpu":112,"env_ram":113,"env_deps":114,"category_tags":123,"github_topics":76,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":125,"updated_at":126,"faqs":127,"releases":153},5570,"NVIDIA\u002FNeMo-Retriever","NeMo-Retriever","NeMo Retriever Library is a scalable, performance-oriented document content and metadata extraction microservice. NeMo Retriever extraction uses specialized NVIDIA NIM microservices to find, contextualize, and extract text, tables, charts and images that you can use in downstream generative applications.","NeMo-Retriever 是一款由英伟达推出的高性能文档内容提取微服务，专为构建生成式 AI 应用而设计。它主要解决了非结构化文档（如 PDF）中复杂元素难以被机器精准理解和利用的难题。传统工具往往只能提取纯文本，而 NeMo-Retriever 能够智能识别并分离文档中的文本、表格、图表及信息图，结合光学字符识别（OCR）技术将这些多模态内容转化为结构化的 JSON 数据，并自动计算向量嵌入存入数据库，从而让大模型能更准确地“读懂”文档细节。\n\n这款工具特别适合 AI 开发者、数据工程师及研究人员使用，尤其是那些需要处理大量文档以构建检索增强生成（RAG）系统或知识库的团队。其核心技术亮点在于深度集成了英伟达 NIM 微服务架构，支持从本地 GPU 到云端的大规模并行处理，既能满足小规模测试需求，也能通过 Kubernetes 轻松扩展至生产级负载。此外，它提供了简洁的 Python 接口，允许用户以链式调用的方式灵活定义提取流程，大幅降低了多模态文档处理的开发门槛，帮助用户高效地将静态文档转化为可被 AI 驱动的智能数据资产。","\u003C!--\nSPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES.\nAll rights reserved.\nSPDX-License-Identifier: Apache-2.0\n-->\n\n**Important: The default branch is main, which tracks active development and may be ahead of the latest supported release.**\n\nFor the latest stable release use the [release\u002F26.03 branch](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Ftree\u002F26.03).\n\nSee the corresponding [NeMo Retriever Library documentation](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Foverview\u002F).\n\n# NeMo Retriever Library\n\nNeMo Retriever Library is a scalable, performance-oriented document content and metadata extraction microservice. It uses specialized NVIDIA NIM microservices \nto find, contextualize, and extract text, tables, charts and infographics that you can use in downstream generative applications.\n\n> [!Note]\n> NeMo Retriever extraction is also known as NVIDIA Ingest and nv-ingest.\n\nNeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library manages computaiton of embeddings for the extracted content as well as storing them in a vector database [Milvus](https:\u002F\u002Fmilvus.io\u002F).\n\nThe following diagram shows the NeMo Retriever Library pipeline.\n\n![Pipeline Overview](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNVIDIA_NeMo-Retriever_readme_aa3a4a1b34bf.png)\n\nFor production-level performance and scalability, we recommend that you deploy the pipeline and supporting NIMs by using Kubernetes ([helm charts](helm)). For more information, refer to [prerequisites](https:\u002F\u002Fdocs.nvidia.com\u002Fnv-ingest\u002Fuser-guide\u002Fgetting-started\u002Fprerequisites).\n\n*Note*:\nAlong with the recent repo name change, we're phasing out the nv-ingest APIs and simplifying the dependencies. You can follow this work and see the forward looking API via the [nemo_retriever](nemo_retriever) library subfolder.\n\n\n## Typical Use\n\nFor small-scale workloads, such as workloads of fewer than 100 PDFs, you can use our in development library setup which works with HuggingFace models on local GPUs or with NIMs hosted on build.nvidia.com.\n\nAfter [following the quickstart installation steps](nemo_retriever), you can start ingesting content like with the following snippet:\n```python\nfrom nemo_retriever import create_ingestor\nfrom nemo_retriever.io import to_markdown, to_markdown_by_page\nfrom pathlib import Path\n\ndocuments = [str(Path(\"..\u002Fdata\u002Fmultimodal_test.pdf\"))]\ningestor = create_ingestor(run_mode=\"batch\")\n\n# ingestion tasks are chainable and defined lazily\ningestor = (\n  ingestor.files(documents)\n  .extract(\n    # below are the default values, but content types can be controlled\n    extract_text=True,\n    extract_charts=True,\n    extract_tables=True,\n    extract_infographics=True\n  )\n  .embed()\n  .vdb_upload()\n)\n\n# ingestor.ingest() actually executes the pipeline\n# results are returned as a ray dataset and inspectable as chunks\nray_dataset = ingestor.ingest()\nchunks = ray_dataset.get_dataset().take_all()\n```\n\nYou can see the extracted text that represents the content of the ingested test document.\n\n```python\n# page 1 raw text:\n>>> chunks[0][\"text\"]\n'TestingDocument\\r\\nA sample document with headings and placeholder text\\r\\nIntroduction\\r\\nThis is a placeholder document that can be used for any purpose...'\n\n# markdown formatted table from the first page\n>>> chunks[1][\"text\"]\n'| Table | 1 |\\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\\n| locations. |\\n| Animal | Activity | Place |\\n| Giraffe | Driving | a | car | At | the | beach |\\n| Lion | Putting | on | sunscreen | At | the | park |\\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\\n| Dog | Chasing | a | squirrel | In | the | front | yard |\\n| Chart | 1 |'\n\n# a chart from the first page\n>>> chunks[2][\"text\"]\n'Chart 1\\nThis chart shows some gadgets, and some very fictitious costs.\\nGadgets and their cost\\n$160.00\\n$140.00\\n$120.00\\n$100.00\\nDollars\\n$80.00\\n$60.00\\n$40.00\\n$20.00\\n$-\\nPowerdrill\\nBluetooth speaker\\nMinifridge\\nPremium desk fan\\nHammer\\nCost'\n\n# markdown formatting for full pages or documents:\n# document results are keyed by source filename\n>>> to_markdown_by_page(chunks).keys()\ndict_keys(['multimodal_test.pdf'])\n\n# results per document are keyed by page number\n>>> to_markdown_by_page(chunks)[\"multimodal_test.pdf\"].keys()\ndict_keys([1, 2, 3])\n\n>>> to_markdown_by_page(chunks)[\"multimodal_test.pdf\"][1]\n'TestingDocument\\r\\nA sample document with headings and placeholder text\\r\\nIntroduction\\r\\nThis is a placeholder document that can be used for any purpose. It contains some \\r\\nheadings and some placeholder text to fill the space. The text is not important and contains \\r\\nno real value, but it is useful for testing. Below, we will have some simple tables and charts \\r\\nthat we can use to confirm Ingest is working as expected.\\r\\nTable 1\\r\\nThis table describes some animals, and some activities they might be doing in specific \\r\\nlocations.\\r\\nAnimal Activity Place\\r\\nGira@e Driving a car At the beach\\r\\nLion Putting on sunscreen At the park\\r\\nCat Jumping onto a laptop In a home o@ice\\r\\nDog Chasing a squirrel In the front yard\\r\\nChart 1\\r\\nThis chart shows some gadgets, and some very fictitious costs.\\n\\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\\n| locations. |\\n| Animal | Activity | Place |\\n| Giraffe | Driving | a | car | At | the | beach |\\n| Lion | Putting | on | sunscreen | At | the | park |\\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\\n| Dog | Chasing | a | squirrel | In | the | front | yard |\\n| Chart | 1 |\\n\\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\\n\\n### Table 1\\n\\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\\n| locations. |\\n| Animal | Activity | Place |\\n| Giraffe | Driving | a | car | At | the | beach |\\n| Lion | Putting | on | sunscreen | At | the | park |\\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\\n| Dog | Chasing | a | squirrel | In | the | front | yard |\\n| Chart | 1 |\\n\\n### Chart 1\\n\\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\\n\\n### Table 2\\n\\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\\n| locations. |\\n| Animal | Activity | Place |\\n| Giraffe | Driving | a | car | At | the | beach |\\n| Lion | Putting | on | sunscreen | At | the | park |\\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\\n| Dog | Chasing | a | squirrel | In | the | front | yard |\\n| Chart | 1 |\\n\\n### Chart 2\\n\\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\\n\\n### Table 3\\n\\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\\n| locations. |\\n| Animal | Activity | Place |\\n| Giraffe | Driving | a | car | At | the | beach |\\n| Lion | Putting | on | sunscreen | At | the | park |\\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\\n| Dog | Chasing | a | squirrel | In | the | front | yard |\\n| Chart | 1 |\\n\\n### Chart 3\\n\\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost'\n\n# full document markdown also keyed by source filename\n>>> to_markdown(chunks).keys()\ndict_keys(['multimodal_test.pdf'])\n```\n\n### Step 3: Query Ingested Content\n\nTo query for relevant snippets of the ingested content, and use them with an LLM to generate answers, use the following code.\n\n```python\nfrom nemo_retriever.retriever import Retriever\nfrom openai import OpenAI\nimport os\n\nretriever = Retriever()\n\nquery = \"Given their activities, which animal is responsible for the typos in my documents?\"\n\n# you can also submit a list with retriever.queries[...]\nhits = retriever.query(query)\n\nclient = OpenAI(\n  base_url = \"https:\u002F\u002Fintegrate.api.nvidia.com\u002Fv1\",\n  api_key = os.environ.get(\"NVIDIA_API_KEY\")\n)\n\nhit_texts = [hit[\"text\"] for hit in hits]\nprompt = f\"\"\"\nGiven the following retrieved documents, answer the question: {query}\n\nDocuments:\n{hit_texts}\n\"\"\"\n\ncompletion = client.chat.completions.create(\n  model=\"nvidia\u002Fnemotron-3-super-120b-a12b\",\n  messages=[{\"role\":\"user\",\"content\":prompt}],\n  stream=False\n)\n\nanswer = completion.choices[0].message.content\nprint(answer)\n```\n\nAnswer:\n```shell\nCat is the animal whose activity (jumping onto a laptop) matches the location of the typos, so the cat is responsible for the typos in the documents.\n```\n\n> [!TIP]\n> Beyond inspecting the results, you can read them into things like [llama-index](examples\u002Fllama_index_multimodal_rag.ipynb) or [langchain](examples\u002Flangchain_multimodal_rag.ipynb) retrieval pipelines.\n>\n> Please also checkout our [demo using a retrieval pipeline on build.nvidia.com](https:\u002F\u002Fbuild.nvidia.com\u002Fnvidia\u002Fmultimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted w\u002F NVIDIA Ingest.\n\n## Documentation Resources\n\n- **[Official Documentation](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002F)** - Complete user guides, API references, and deployment instructions\n- **[Getting Started Guide](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Foverview\u002F)** - Overview and prerequisites for production deployments\n- **[Benchmarking Guide](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fbenchmarking\u002F)** - Performance testing and recall evaluation framework\n- **[MIG Deployment](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fmig-benchmarking\u002F)** - Multi-Instance GPU configurations for Kubernetes\n- **[API Documentation](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fapi\u002F)** - Python client and API reference\n\n## Notices\n\n### Third Party License Notice:\n\nIf configured to do so, this project will download and install additional third-party open source software projects.\nReview the license terms of these open source projects before use:\n\nhttps:\u002F\u002Fpypi.org\u002Fproject\u002Fpdfservices-sdk\u002F\n\n- **`INSTALL_ADOBE_SDK`**:\n  - **Description**: If set to `true`, the Adobe SDK will be installed in the container at launch time. This is\n    required if you want to use the Adobe extraction service for PDF decomposition. Please review the\n    [license agreement](https:\u002F\u002Fgithub.com\u002Fadobe\u002Fpdfservices-python-sdk?tab=License-1-ov-file) for the\n    pdfservices-sdk before enabling this option.\n- **Built With Llama**:\n  - **Description**: The NV-Ingest container comes with the `meta-llama\u002FLlama-3.2-1B` tokenizer pre-downloaded so \n    that the split task can use it for token-based splitting without making a network request. The [Llama 3.2 Community License Agreement](https:\u002F\u002Fhuggingface.co\u002Fmeta-llama\u002FLlama-3.2-1B\u002Fblob\u002Fmain\u002FLICENSE.txt) governs your use of these Llama materials.\n    \n    If you're building the container yourself and want to pre-download this model, you'll first need to set \n    `DOWNLOAD_LLAMA_TOKENIZER` to `True`. Because this is a gated model, you'll also need to \n    [request access](https:\u002F\u002Fhuggingface.co\u002Fmeta-llama\u002FLlama-3.2-1B) and set `HF_ACCESS_TOKEN` to your HuggingFace \n    access token in order to use it.\n\nBefore contributing to this project, please review our [Contributor Guide](contributing.md).\n\n## Security Considerations\n\n- NeMo Retriever Extraction doesn't generate any code that may require sandboxing.\n- NeMo Retriever Extraction is shared as a reference and is provided \"as is\". The security in the production environment is the responsibility of the end users deploying it. When deploying in a production environment, please have security experts review any potential risks and threats; define the trust boundaries, implement logging and monitoring capabilities, secure the communication channels, integrate AuthN & AuthZ with appropriate access controls, keep the deployment up to date, ensure the containers\u002Fsource code are secure and free of known vulnerabilities.\n- A frontend that handles AuthN & AuthZ should be in place as missing AuthN & AuthZ could provide ungated access to customer models if directly exposed to e.g. the internet, resulting in either cost to the customer, resource exhaustion, or denial of service.\n- NeMo Retriever Extraction doesn't require any privileged access to the system.\n- The end users are responsible for ensuring the availability of their deployment.\n- The end users are responsible for building the container images and keeping them up to date.\n- The end users are responsible for ensuring that OSS packages used by the developer blueprint are current.\n- The logs from nginx proxy, backend, and demo app are printed to standard out. They can include input prompts and output completions for development purposes. The end users are advised to handle logging securely and avoid information leakage for production use cases.\n","\u003C!--\nSPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES.\nAll rights reserved.\nSPDX-License-Identifier: Apache-2.0\n-->\n\n**重要提示：默认分支为 main，该分支跟踪活跃开发，可能领先于最新的支持版本。**\n\n如需使用最新稳定版本，请使用 [release\u002F26.03 分支](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Ftree\u002F26.03)。\n\n请参阅相应的 [NeMo Retriever Library 文档](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Foverview\u002F)。\n\n# NeMo Retriever Library\n\nNeMo Retriever Library 是一款可扩展、高性能的文档内容与元数据提取微服务。它利用专门的 NVIDIA NIM 微服务来查找、上下文化并提取文本、表格、图表和信息图，这些内容可用于下游的生成式应用中。\n\n> [!注]\n> NeMo Retriever 提取也称为 NVIDIA Ingest 和 nv-ingest。\n\nNeMo Retriever Library 支持将文档并行分割成页面，对其中的内容（如文本、表格、图表和信息图）进行分类、提取，并通过光学字符识别 (OCR) 进一步上下文化处理，最终输出为结构清晰的 JSON 模式。随后，NeMo Retriever Library 会为提取的内容计算嵌入向量，并将其存储到向量数据库 [Milvus](https:\u002F\u002Fmilvus.io\u002F) 中。\n\n下图展示了 NeMo Retriever Library 的处理流程。\n\n![流程概览](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNVIDIA_NeMo-Retriever_readme_aa3a4a1b34bf.png)\n\n为了实现生产级别的性能和可扩展性，我们建议您使用 Kubernetes（[Helm Charts](helm)）部署该流程及配套的 NIM 服务。更多信息请参阅 [先决条件](https:\u002F\u002Fdocs.nvidia.com\u002Fnv-ingest\u002Fuser-guide\u002Fgetting-started\u002Fprerequisites)。\n\n*注*：\n随着近期仓库名称的变更，我们将逐步淘汰 nv-ingest API 并简化依赖关系。您可以通过 [nemo_retriever](nemo_retriever) 库子文件夹关注相关工作进展，并查看未来的 API 设计。\n\n\n## 典型用法\n\n对于小型工作负载，例如少于 100 个 PDF 文件的工作负载，您可以使用我们正在开发中的库设置，该设置可在本地 GPU 上运行 HuggingFace 模型，或在 build.nvidia.com 上托管的 NIM 服务上运行。\n\n按照 [快速入门安装步骤](nemo_retriever) 后，您可以开始导入内容，例如使用以下代码片段：\n```python\nfrom nemo_retriever import create_ingestor\nfrom nemo_retriever.io import to_markdown, to_markdown_by_page\nfrom pathlib import Path\n\ndocuments = [str(Path(\"..\u002Fdata\u002Fmultimodal_test.pdf\"))]\ningestor = create_ingestor(run_mode=\"batch\")\n\n# 提取任务可以链式调用，且采用惰性定义\ningestor = (\n  ingestor.files(documents)\n  .extract(\n    # 以下是默认值，但也可以控制提取的内容类型\n    extract_text=True,\n    extract_charts=True,\n    extract_tables=True,\n    extract_infographics=True\n  )\n  .embed()\n  .vdb_upload()\n)\n\n# ingestor.ingest() 实际执行整个流程\n# 结果以 Ray 数据集的形式返回，可按块检查\nray_dataset = ingestor.ingest()\nchunks = ray_dataset.get_dataset().take_all()\n```\n\n您可以查看已提取的文本，这些文本代表了所导入测试文档的内容。\n\n```python\n# 第一页原始文本：\n>>> chunks[0][\"text\"]\n'TestingDocument\\r\\n包含标题和占位符文本的示例文档\\r\\n引言\\r\\n这是一个可用于任何目的的占位符文档...'\n\n# 第一页格式化为 Markdown 的表格\n>>> chunks[1][\"text\"]\n'| 表格 | 1 |\\n| 此 | 表格 | 描述 | 一些 | 动物 | 和 | 一些 | 活动 | 它们 | 可能 | 在 | 特定 | 地点 | 进行。 |\\n| 动物 | 活动 | 地点 |\\n| 长颈鹿 | 开车 | 在 | 海滩 |\\n| 狮子 | 涂抹 | 防晒霜 | 在 | 公园 |\\n| 猫 | 跳上 | 笔记本电脑 | 在 | 家庭办公室 |\\n| 狗 | 追逐 | 松鼠 | 在 | 前院 |\\n| 图表 | 1 |'\n\n# 第一页的一张图表\n>>> chunks[2][\"text\"]\n'图表 1\\n此图表展示了一些小工具及其虚构的成本。\\n小工具及其成本\\n$160.00\\n$140.00\\n$120.00\\n$100.00\\n美元\\n$80.00\\n$60.00\\n$40.00\\n$20.00\\n$-\\n电钻\\n蓝牙音箱\\n迷你冰箱\\n高级台扇\\n锤子\\n成本'\n\n# 将整页或整份文档格式化为 Markdown：\n# 文档结果按源文件名进行索引\n>>> to_markdown_by_page(chunks).keys()\ndict_keys(['multimodal_test.pdf'])\n\n# 每个文档的结果以页码为键\n>>> to_markdown_by_page(chunks)[\"multimodal_test.pdf\"].keys()\ndict_keys([1, 2, 3])\n\n>>> to_markdown_by_page(chunks)[\"multimodal_test.pdf\"][1]\n'测试文档\\r\\n一个包含标题和占位符文本的示例文档\\r\\n引言\\r\\n这是一份可用于任何目的的占位符文档。它包含一些标题和一些占位符文本以填充空间。这些文本并不重要，也不具有实际价值，但对测试很有用。下面我们将有一些简单的表格和图表，可以用来确认 Ingest 是否按预期工作。\\r\\n表1\\r\\n此表描述了一些动物以及它们可能在特定地点进行的一些活动。\\r\\n动物 活动 地点\\r\\n长颈鹿 驾驶汽车 在海滩\\r\\n狮子 涂抹防晒霜 在公园\\r\\n猫 跳上笔记本电脑 在家庭办公室\\r\\n狗 追逐松鼠 在前院\\r\\n图1\\r\\n这张图展示了一些小工具以及一些虚构的成本。\\n\\n| 此 | 表格 | 描述 | 一些 | 动物，| 和 | 一些 | 活动 | 他们 | 或许 | 正在 | 进行 | 在 | 特定 |\\n| 地点。|\\n| 动物 | 活动 | 地点 |\\n| 长颈鹿 | 驾驶 | 一辆 | 汽车 | 在 | 海滩 |\\n| 狮子 | 涂抹 | 防晒霜 | 在 | 公园 |\\n| 猫 | 跳跃 | 上 | 一台 | 笔记本电脑 | 在 | 一个 | 家庭 | 办公室 |\\n| 狗 | 追逐 | 一只 | 松鼠 | 在 | 前 | 庭院 |\\n| 图 | 1 |\\n\\n### 表1\\n\\n| 此 | 表格 | 描述 | 一些 | 动物，| 和 | 一些 | 活动 | 他们 | 或许 | 正在 | 进行 | 在 | 特定 |\\n| 地点。|\\n| 动物 | 活动 | 地点 |\\n| 长颈鹿 | 驾驶 | 一辆 | 汽车 | 在 | 海滩 |\\n| 狮子 | 涂抹 | 防晒霜 | 在 | 公园 |\\n| 猫 | 跳跃 | 上 | 一台 | 笔记本电脑 | 在 | 一个 | 家庭 | 办公室 |\\n| 狗 | 追逐 | 一只 | 松鼠 | 在 | 前 | 庭院 |\\n| 图 | 1 |\\n\\n### 图1\\n\\n图1展示了某些小工具及其虚构的成本。小工具及其成本 $160.00 $140.00 $120.00 $100.00 美元 $80.00 $60.00 $40.00 $20.00 $- 电钻 蓝牙音箱 迷你冰箱 高级台式风扇 锤子 成本\\n\\n### 表2\\n\\n| 此 | 表格 | 描述 | 一些 | 动物，| 和 | 一些 | 活动 | 他们 | 或许 | 正在 | 进行 | 在 | 特定 |\\n| 地点。|\\n| 动物 | 活动 | 地点 |\\n| 长颈鹿 | 驾驶 | 一辆 | 汽车 | 在 | 海滩 |\\n| 狮子 | 涂抹 | 防晒霜 | 在 | 公园 |\\n| 猫 | 跳跃 | 上 | 一台 | 笔记本电脑 | 在 | 一个 | 家庭 | 办公室 |\\n| 狗 | 追逐 | 一只 | 松鼠 | 在 | 前 | 庭院 |\\n| 图 | 1 |\\n\\n### 图2\\n\\n图1展示了某些小工具及其虚构的成本。小工具及其成本 $160.00 $140.00 $120.00 $100.00 美元 $80.00 $60.00 $40.00 $20.00 $- 电钻 蓝牙音箱 迷尼冰箱 高级台式风扇 锤子 成本\\n\\n### 表3\\n\\n| 此 | 表格 | 描述 | 一些 | 动物，| 和 | 一些 | 活动 | 他们 | 或许 | 正在 | 进行 | 在 | 特定 |\\n| 地点。|\\n| 动物 | 活动 | 地点 |\\n| 长颈鹿 | 驾驶 | 一辆 | 汽车 | 在 | 海滩 |\\n| 狮子 | 涂抹 | 防晒霜 | 在 | 公园 |\\n| 猫 | 跳跃 | 上 | 一台 | 笔记本电脑 | 在 | 一个 | 家庭 | 办公室 |\\n| 狗 | 追逐 | 一只 | 松鼠 | 在 | 前 | 庭院 |\\n| 图 | 1 |\\n\\n### 图3\\n\\n图1展示了某些小工具及其虚构的成本。小工具及其成本 $160.00 $140.00 $120.00 $100.00 美元 $80.00 $60.00 $40.00 $20.00 $- 电钻 蓝牙音箱 迷尼冰箱 高级台式风扇 锤子 成本'\n\n# 整个文档的 Markdown 也以源文件名为键\n>>> to_markdown(chunks).keys()\ndict_keys(['multimodal_test.pdf'])\n```\n\n### 第3步：查询已提取的内容\n\n要查询已提取内容中的相关片段，并将其与 LLM 结合生成答案，请使用以下代码。\n\n```python\nfrom nemo_retriever.retriever import Retriever\nfrom openai import OpenAI\nimport os\n\nretriever = Retriever()\n\nquery = \"根据它们的活动，哪个动物导致了我的文档中出现错别字？\"\n\n# 也可以通过 retriever.queries[...] 提交列表\nhits = retriever.query(query)\n\nclient = OpenAI(\n  base_url = \"https:\u002F\u002Fintegrate.api.nvidia.com\u002Fv1\",\n  api_key = os.environ.get(\"NVIDIA_API_KEY\")\n)\n\nhit_texts = [hit[\"text\"] for hit in hits]\nprompt = f\"\"\"\n根据以下检索到的文档，回答问题：{query}\n\n文档：\n{hit_texts}\n\"\"\"\n\ncompletion = client.chat.completions.create(\n  model=\"nvidia\u002Fnemotron-3-super-120b-a12b\",\n  messages=[{\"role\":\"user\",\"content\":prompt}],\n  stream=False\n)\n\nanswer = completion.choices[0].message.content\nprint(answer)\n```\n\n答案：\n```shell\n猫是那种活动（跳上笔记本电脑）与错别字位置相符的动物，因此文档中的错别字是由猫造成的。\n```\n\n> [!提示]\n> 除了检查结果之外，您还可以将这些结果导入诸如 [llama-index](examples\u002Fllama_index_multimodal_rag.ipynb) 或 [langchain](examples\u002Flangchain_multimodal_rag.ipynb) 的检索管道中。\n>\n> 请同时查看我们在 build.nvidia.com 上提供的演示，该演示使用检索管道查询预先由 NVIDIA Ingest 提取的文档内容：\n> [build.nvidia.com\u002Fnvidia\u002Fmultimodal-pdf-data-extraction-for-enterprise-rag](https:\u002F\u002Fbuild.nvidia.com\u002Fnvidia\u002Fmultimodal-pdf-data-extraction-for-enterprise-rag)\n\n## 文档资源\n\n- **[官方文档](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002F)** - 完整的用户指南、API 参考和部署说明\n- **[入门指南](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Foverview\u002F)** - 生产部署概述和先决条件\n- **[基准测试指南](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fbenchmarking\u002F)** - 性能测试和召回率评估框架\n- **[MIG 部署](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fmig-benchmarking\u002F)** - 用于 Kubernetes 的多实例 GPU 配置\n- **[API 文档](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fapi\u002F)** - Python 客户端和 API 参考\n\n## 公告\n\n### 第三方许可声明：\n\n如果已配置为执行此操作，该项目将下载并安装其他第三方开源软件项目。\n在使用这些开源项目之前，请先查看其许可条款：\n\nhttps:\u002F\u002Fpypi.org\u002Fproject\u002Fpdfservices-sdk\u002F\n\n- **`INSTALL_ADOBE_SDK`**:\n  - **描述**：如果设置为 `true`，Adobe SDK 将在容器启动时安装。如果您希望使用 Adobe 提取服务对 PDF 进行分解，则必须启用此选项。请在启用此选项前查阅 pdfservices-sdk 的[许可协议](https:\u002F\u002Fgithub.com\u002Fadobe\u002Fpdfservices-python-sdk?tab=License-1-ov-file)。\n- **基于 Llama 构建**：\n  - **描述**：NV-Ingest 容器预装了 `meta-llama\u002FLlama-3.2-1B` 分词器，以便分块任务可以直接使用该分词器进行基于标记的拆分，而无需发起网络请求。您对这些 Llama 资料的使用受《Llama 3.2 社区许可协议》约束。\n  \n    如果您自行构建容器并希望预先下载此模型，首先需要将 `DOWNLOAD_LLAMA_TOKENIZER` 设置为 `True`。由于该模型属于受控访问模型，您还需[申请访问权限](https:\u002F\u002Fhuggingface.co\u002Fmeta-llama\u002FLlama-3.2-1B)，并将您的 HuggingFace 访问令牌设置为 `HF_ACCESS_TOKEN` 才能使用它。\n\n在为本项目做出贡献之前，请先阅读我们的[贡献者指南](contributing.md)。\n\n## 安全注意事项\n\n- NeMo Retriever Extraction 不会生成任何可能需要沙箱隔离的代码。\n- NeMo Retriever Extraction 仅作为参考示例提供，按“原样”交付。生产环境中的安全性由部署它的最终用户负责。在生产环境中部署时，请务必请安全专家评估潜在风险与威胁；明确信任边界，实施日志记录与监控功能，确保通信通道的安全性，集成身份认证与授权机制并实施适当的访问控制，保持部署的最新状态，确保容器和源代码的安全且不存在已知漏洞。\n- 应部署具备身份认证与授权功能的前端系统；若缺少此类功能，直接暴露于互联网等外部环境时，可能导致客户模型被未授权访问，从而造成客户成本增加、资源耗尽或服务拒绝等后果。\n- NeMo Retriever Extraction 无需任何系统级别的特权访问权限。\n- 最终用户需负责保障其部署的可用性。\n- 最终用户需自行构建容器镜像并保持其更新。\n- 最终用户需确保开发者蓝图中使用的开源软件包均为最新版本。\n- Nginx 代理、后端服务及演示应用的日志均输出至标准输出流。出于开发目的，这些日志可能包含输入提示和输出内容。建议最终用户在生产环境中妥善管理日志记录，避免信息泄露。","# NeMo-Retriever 快速上手指南\n\nNeMo-Retriever（曾用名 NVIDIA Ingest）是一个可扩展的文档内容与元数据提取微服务。它利用 NVIDIA NIM 微服务，从文档中精准查找、上下文化并提取文本、表格、图表和信息图，并将其转换为结构化 JSON 或 Markdown，适用于下游生成式 AI 应用（如 RAG）。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux (推荐 Ubuntu 20.04\u002F22.04)\n- **GPU**: 支持 CUDA 的 NVIDIA GPU（本地运行需安装驱动；若使用云端 NIM 则无需本地 GPU）\n- **Python**: 3.10 或更高版本\n- **容器运行时**: Docker 或 Kubernetes（生产环境推荐）\n\n### 前置依赖\n- **NVIDIA API Key**: 若使用 `build.nvidia.com` 托管的 NIM 服务，需准备 API Key。\n- **向量数据库**: 如需存储嵌入向量，需部署 [Milvus](https:\u002F\u002Fmilvus.io\u002F) 或使用默认配置。\n- **可选依赖**:\n  - 若需使用 Adobe PDF 分解服务，需同意其许可协议并设置 `INSTALL_ADOBE_SDK=true`。\n  - 若需本地进行基于 Token 的文档分割，需申请 HuggingFace 权限并设置 `HF_ACCESS_TOKEN` 以下载 Llama 3.2 分词器。\n\n## 安装步骤\n\n对于小规模工作负载（如少于 100 个 PDF），推荐使用开发版库直接在本地 Python 环境中运行，配合本地 GPU 或云端 NIM。\n\n1. **安装 Python 包**\n   ```bash\n   pip install nemo-retriever\n   ```\n\n2. **配置环境变量**\n   如果使用云端 NIM 服务，请导出您的 NVIDIA API Key：\n   ```bash\n   export NVIDIA_API_KEY=\"your_nvidia_api_key_here\"\n   ```\n\n   *(注：目前官方未提供特定的中国镜像源，如遇网络问题，请配置通用的 PyPI 国内镜像，如清华源或阿里源)*\n   ```bash\n   pip install nemo-retriever -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n   ```\n\n## 基本使用\n\n以下示例展示如何提取 PDF 中的文本、表格和图表，将其转换为 Markdown 格式，并进行简单的检索问答。\n\n### 1. 文档提取与转换\n\n创建一个 Python 脚本（例如 `ingest_example.py`）：\n\n```python\nfrom nemo_retriever import create_ingestor\nfrom nemo_retriever.io import to_markdown, to_markdown_by_page\nfrom pathlib import Path\n\n# 指定待处理的文档路径\ndocuments = [str(Path(\"multimodal_test.pdf\"))]\n\n# 创建提取器，设置为批处理模式\ningestor = create_ingestor(run_mode=\"batch\")\n\n# 定义处理流水线：加载文件 -> 提取内容 -> 生成嵌入 -> 上传至向量库\n# 可根据需要控制提取类型 (extract_text, extract_charts, extract_tables, extract_infographics)\ningestor = (\n  ingestor.files(documents)\n  .extract(\n    extract_text=True,\n    extract_charts=True,\n    extract_tables=True,\n    extract_infographics=True\n  )\n  .embed()\n  .vdb_upload()\n)\n\n# 执行流水线\nray_dataset = ingestor.ingest()\nchunks = ray_dataset.get_dataset().take_all()\n\n# 查看提取结果 (例如第一页的原始文本)\nprint(\"Page 1 Raw Text:\")\nprint(chunks[0][\"text\"])\n\n# 将结果转换为按页组织的 Markdown\nmd_by_page = to_markdown_by_page(chunks)\nprint(\"\\nMarkdown Keys:\", md_by_page.keys())\n```\n\n### 2. 检索与生成回答\n\n提取完成后，可使用内置的 Retriever 结合大模型进行问答：\n\n```python\nfrom nemo_retriever.retriever import Retriever\nfrom openai import OpenAI\nimport os\n\n# 初始化检索器\nretriever = Retriever()\n\nquery = \"Given their activities, which animal is responsible for the typos in my documents?\"\n\n# 执行检索\nhits = retriever.query(query)\n\n# 配置 OpenAI 客户端指向 NVIDIA 接口\nclient = OpenAI(\n  base_url=\"https:\u002F\u002Fintegrate.api.nvidia.com\u002Fv1\",\n  api_key=os.environ.get(\"NVIDIA_API_KEY\")\n)\n\n# 构建提示词\nhit_texts = [hit[\"text\"] for hit in hits]\nprompt = f\"\"\"\nGiven the following retrieved documents, answer the question: {query}\n\nDocuments:\n{hit_texts}\n\"\"\"\n\n# 调用模型生成回答\ncompletion = client.chat.completions.create(\n  model=\"nvidia\u002Fnemotron-3-super-120b-a12b\",\n  messages=[{\"role\": \"user\", \"content\": prompt}],\n  stream=False\n)\n\nanswer = completion.choices[0].message.content\nprint(\"Answer:\", answer)\n```\n\n**输出示例：**\n```text\nAnswer: Cat is the animal whose activity (jumping onto a laptop) matches the location of the typos, so the cat is responsible for the typos in the documents.\n```\n\n> **提示**: 提取出的 `chunks` 数据也可以直接集成到 [LlamaIndex](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Ftree\u002Fmain\u002Fexamples\u002Fllama_index_multimodal_rag.ipynb) 或 [LangChain](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Ftree\u002Fmain\u002Fexamples\u002Flangchain_multimodal_rag.ipynb) 的 RAG 流水线中使用。","某金融分析团队需要构建一个智能研报问答系统，每天需处理数百份包含复杂表格、趋势图表和文字分析的 PDF 格式行业研究报告。\n\n### 没有 NeMo-Retriever 时\n- **多模态内容丢失**：传统 OCR 工具只能提取纯文本，导致报告中的关键财务数据表格和业绩趋势图无法被识别，AI 回答时缺乏核心数据支撑。\n- **结构混乱难解析**：提取出的文字顺序错乱，表头与数据行错位，开发人员需编写大量繁琐的正则代码进行后期清洗，耗时且容易出错。\n- **检索精度低下**：由于缺乏对图表和表格的语义理解，用户询问“某公司近三年营收对比”时，系统无法定位到具体的图表内容，只能返回无关的文本片段。\n- **扩展性瓶颈**：面对批量文档处理需求，现有脚本难以并行化，处理一份百页报告往往需要数分钟，无法满足实时分析的业务节奏。\n\n### 使用 NeMo-Retriever 后\n- **全要素精准提取**：NeMo-Retriever 利用专用微服务自动识别并分离文本、表格、图表及信息图，将非结构化 PDF 转化为富含语义的结构化 JSON 数据。\n- **原生结构化输出**：工具直接将提取的表格转换为规范的 Markdown 格式，图表附带上下文描述，无需人工二次清洗即可直接送入下游大模型。\n- **深度语义检索**：系统自动为提取的多模态内容计算向量嵌入并存入 Milvus 数据库，使 AI 能准确理解图表含义，精准回答涉及数据对比的复杂问题。\n- **高性能并行处理**：基于 Kubernetes 的弹性架构支持大规模并发任务，将数百份报告的预处理时间从小时级缩短至分钟级，显著提升业务响应速度。\n\nNeMo-Retriever 通过打通多模态文档解析到向量检索的全链路，让企业级 RAG 应用真正具备了“看懂”复杂商业报表的能力。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNVIDIA_NeMo-Retriever_4c5dd0eb.png","NVIDIA","NVIDIA Corporation","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FNVIDIA_7dcf6000.png","",null,"https:\u002F\u002Fnvidia.com","https:\u002F\u002Fgithub.com\u002FNVIDIA",[80,84,88,92,96,99,103],{"name":81,"color":82,"percentage":83},"Python","#3572A5",88.2,{"name":85,"color":86,"percentage":87},"Jupyter Notebook","#DA5B0B",10.9,{"name":89,"color":90,"percentage":91},"Shell","#89e051",0.6,{"name":93,"color":94,"percentage":95},"Jinja","#a52a22",0.1,{"name":97,"color":98,"percentage":95},"Dockerfile","#384d54",{"name":100,"color":101,"percentage":102},"Go Template","#00ADD8",0,{"name":104,"color":105,"percentage":102},"HTML","#e34c26",2900,315,"2026-04-08T07:46:45","Apache-2.0",4,"Linux","必需 NVIDIA GPU。支持本地 GPU 运行或使用托管的 NVIDIA NIM 微服务。生产环境建议使用 Kubernetes 部署并配置 MIG (Multi-Instance GPU)。具体显存和 CUDA 版本未在片段中明确说明，但需兼容 NVIDIA NIM 微服务。","未说明",{"notes":115,"python":113,"dependencies":116},"该工具主要作为微服务运行，推荐在生产环境中使用 Kubernetes 和 Helm charts 部署以获取最佳性能和扩展性。小规模测试可在本地 GPU 或使用 build.nvidia.com 托管的 NIM 进行。若启用 Adobe PDF 分解功能，需接受第三方许可协议并设置 INSTALL_ADOBE_SDK=true。内置了 Llama-3.2-1B 分词器，若自行构建容器且需预下载该模型，需设置 DOWNLOAD_LLAMA_TOKENIZER=True 并提供 HuggingFace 访问令牌。数据最终存储于 Milvus 向量数据库中。",[117,118,119,120,121,122],"nemo_retriever","ray","milvus","openai","pdfservices-sdk (可选，用于 Adobe 提取)","meta-llama\u002FLlama-3.2-1B (用于分词)",[14,16,124],"其他","2026-03-27T02:49:30.150509","2026-04-08T23:42:53.243327",[128,133,138,143,148],{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},25255,"提取图像时出现错误 'Failed to convert NumPy array to image: Cannot handle this data type: (1, 1, 1), |u1' 是什么原因？","这是因为 pdfium 有时会生成灰度图像（\"L\"模式），其生成的 numpy 数组形状为 (H, W, 1)，导致 PIL.Image.fromarray 无法识别该数据类型。该问题预计将在 pypdfium2 v5 版本中修复，届时单通道位图将使用 2D 形状以避免此问题。在此之前，这通常被视为上游库的兼容性问题。","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Fissues\u002F53",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},25254,"在使用 Docker 构建 nv-ingest 时，遇到 conda install setuptools 失败（exit code: 1）的错误怎么办？","这是由于 Anaconda 许可问题，NVIDIA 无法再从默认的 anaconda 通道拉取包。解决方法是修改 Dockerfile，将安装命令中的通道更改为 conda-forge。具体操作是将 Dockerfile 第 122 行更新为：`&& conda install -c conda-forge setuptools==70.0.0`。","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Fissues\u002F182",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},25256,"如何优化 VLM（视觉语言模型）在图像描述任务中的输入格式以减少幻觉并提高准确性？","应将图像作为 `image_url` 类型发送，而不是将其作为字符串包含在提示文本中。这样可以利用 VLM 的视觉编码器返回更好的图像描述。推荐的代码实现格式如下：\n```python\nmessages = [\n    {\"role\": \"user\", \"content\": [{\"type\": \"text\", \"text\": f\"{prompt}\"}, {\"type\": \"image_url\", \"image_url\": {\"url\": f\"data:image\u002Fpng;base64,{img}\"}}]} for img in batch\n]\n```","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Fissues\u002F1030",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},25257,"示例文档摄入脚本的输出难以理解，全是调试信息，如何改善？","该问题已在客户端重构过程中解决。相关的 PR（#84）不仅优化了输出格式，使其更加用户友好，还在 README 中添加了注释，解释了输出内容的具体含义。建议查看最新的文档或代码以获取清晰的输出说明。","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Fissues\u002F45",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},25258,"YOLOX NIM 代码中存在重复的后处理代码，应该如何处理？","应移除 nv-ingest 中与 YOLOX NIM 重复的 `postprocess_model_prediction` 和 `postprocess_results` 函数，转而直接使用 YOLOX NIM HTTP 端点返回的输出。但特定于 nv-ingest 的逻辑（如 `expand_chart_bboxes` 和阈值处理）应保留。注意需切换到支持图表边界框修复的新版本（0.2.0+），并验证切换后无性能回归。","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNeMo-Retriever\u002Fissues\u002F106",[154,159,163,168,173,178,183,187,191,195],{"id":155,"version":156,"summary_zh":157,"released_at":158},154668,"26.3.0","请参阅发布说明：https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Freleasenotes-nv-ingest\u002F","2026-03-18T17:23:19",{"id":160,"version":161,"summary_zh":157,"released_at":162},154669,"26.1.2","2026-01-16T05:49:49",{"id":164,"version":165,"summary_zh":166,"released_at":167},154670,"25.9.0","NeMo Retriever extraction 25.09 版本新增了硬件和软件支持，并进行了其他改进，具体如下：\n\n- 增加对 [RTX Pro 6000](https:\u002F\u002Fwww.nvidia.com\u002Fen-us\u002Fproducts\u002Fworkstations\u002Fprofessional-desktop-gpus\u002Frtx-pro-6000\u002F) 的功能支持。\n- 增加对 [DGX B200](https:\u002F\u002Fwww.nvidia.com\u002Fen-us\u002Fdata-center\u002Fdgx-b200\u002F) 的功能支持。\n- 增加对 [nemoretriever-ocr-v1](https:\u002F\u002Fbuild.nvidia.com\u002Fnvidia\u002Fnemoretriever-ocr-v1) 的支持。有关详细信息，请参阅 [使用 Docker Compose 部署（自托管）](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fquickstart-guide\u002F) 和 [NV-Ingest Helm Charts](https:\u002F\u002Fgithub.com\u002Fnkmcalli\u002Fnv-ingest\u002Ftree\u002Fmain\u002Fhelm)。\n- 增加对 [llama-3.2-nemoretriever-1b-vlm-embed-v1](https:\u002F\u002Fbuild.nvidia.com\u002Fnvidia\u002Fllama-3_2-nemoretriever-1b-vlm-embed-v1) 的支持。\n- 增加对 Llama Nemotron VLM 8b NIM 的支持，用于图像字幕生成。有关详细信息，请参阅 [从图像中提取字幕](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fnv-ingest-python-api\u002F#extract-captions-from-images)。\n- 增加对自定义向量数据库实现的支持。有关详细信息，请参阅 [构建自定义向量数据库运算符](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fexamples\u002Fbuilding_vdb_operator.ipynb)。\n- 增加对自定义 Lambda 阶段的支持。有关详细信息，请参阅 [将用户定义的阶段添加到您的 NeMo Retriever 提取管道](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fuser-defined-stages\u002F)。\n- 扩展了 [库模式](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fquickstart-library-mode\u002F) 的文档。\n- 新增文档 [配置 Ray 日志记录](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fray-logging\u002F)。\n- 新增文档 [使用多模态嵌入](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fvlm-embed\u002F)。\n- 在 Milvus 实体创建过程中，自定义元数据中增加了对整数、浮点数、布尔值和数组的支持。\n- 增加了通过 Helm 同时运行多个 VLM 的支持。有关详细信息，请参阅 [NV-Ingest Helm Charts](https:\u002F\u002Fgithub.com\u002Fnkmcalli\u002Fnv-ingest\u002Ftree\u002Fmain\u002Fhelm)。\n\n**已知问题**\n\n本版本的已知问题如下：\n\n- 不支持 A10G 和 L40S。有关详细信息，请参阅 [支持矩阵](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fsupport-matrix\u002F)。\n- RTX Pro 6000 或 B200 上不支持 `nemoretriever-parse`。有关详细信息，请参阅 [支持矩阵](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Flatest\u002Fextraction\u002Fsupport-matrix\u002F)。\n- NeMo Retriever 提取管道不支持摄取包含单个文件大小超过约 400MB 的批次。","2025-09-17T18:17:04",{"id":169,"version":170,"summary_zh":171,"released_at":172},154671,"25.6.3","pypdfium2 4.30.1 版本今天已从 PyPI 上架移除：https:\u002F\u002Fpypi.org\u002Fproject\u002Fpypdfium2\u002F4.30.1\u002F。此版本为修复版，用于将客户端对 pypdfium2 的依赖更新至最新的稳定版本。\n\n**注意**：目前仅发布分支和 [nv-ingest-client 软件包](https:\u002F\u002Fpypi.org\u002Fproject\u002Fnv-ingest-client\u002F) 已升级至 25.6.3。此前在 NGC 上发布的 25.6.2 镜像将保持不变。","2025-07-22T00:38:46",{"id":174,"version":175,"summary_zh":176,"released_at":177},154672,"25.6.2","NeMo Retriever 25.06 版本主要聚焦于准确性的提升和功能的扩展，具体包括以下内容：\n\n- 提升重排序器的准确性。\n- 将 Python 版本从 3.10 升级至 3.12。\n- Helm 部署的吞吐量性能现已与 Docker 部署相当。\n- 增加对最新版本 OpenAI API 的支持。\n- 添加 MIG 支持。有关详细信息，请参阅 [启用 NVIDIA GPU MIG](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fhelm\u002FREADME.md#enable-nvidia-gpu-mig)。\n- 添加时间切片支持。有关详细信息，请参阅 [启用 GPU 时间切片](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fhelm\u002FREADME.md#enabling-gpu-time-slicing)。\n- 增加对 RIVA NIM 的支持，用于可选的音频提取。有关详细信息，请参阅 [helm\u002Fvalues.yaml](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fhelm\u002Fvalues.yaml)。\n- 新增笔记本：[如何为文档添加元数据并进行筛选搜索](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fexamples\u002Fmetadata_and_filtered_search.ipynb)。\n\n**重大变更**\n本版本无重大变更。\n\n**升级**\n如需升级此版本的 Helm Charts，请参考 [NV-Ingest Helm Charts](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fhelm\u002Fvalues.yaml)。","2025-06-12T18:45:33",{"id":179,"version":180,"summary_zh":181,"released_at":182},154673,"25.4.2","NeMo Retriever extraction 25.04 版本主要聚焦于修复一些小 bug 和功能改进，具体包括以下内容：\n\n- 修复了一个已知问题：大型文本文件的导入会失败。\n- REST 服务现在更加健壮，能够在工作节点故障和连接错误时自动恢复。\n- 客户端侧进行了多项优化，以降低重试频率，并提升整体使用体验。\n- 新增了关于[如何重新索引集合](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Fblob\u002Fmain\u002Fexamples\u002Freindex_example.ipynb)的笔记本。\n- 扩展了分块相关文档。更多信息请参阅[拆分文档](https:\u002F\u002Fdocs.nvidia.com\u002Fnemo\u002Fretriever\u002Fextraction\u002Fchunking\u002F)。\n\n**重大变更**\n本版本没有重大变更。\n\n**升级**\n如需升级此版本的 Helm Chart，请参考[NV-Ingest Helm Chart](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnv-ingest\u002Ftree\u002Fmain\u002Fhelm)。","2025-06-12T18:44:15",{"id":184,"version":185,"summary_zh":76,"released_at":186},154674,"25.3.0","2025-03-16T14:02:34",{"id":188,"version":189,"summary_zh":76,"released_at":190},154675,"24.12.1","2025-02-12T20:10:27",{"id":192,"version":193,"summary_zh":76,"released_at":194},154676,"24.12","2025-01-30T13:13:40",{"id":196,"version":197,"summary_zh":198,"released_at":199},154677,"24.08","这是 NV-Ingest 的初始版本；请参阅 README 文件以了解使用方法。","2024-09-25T20:07:16"]