[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-enoch3712--ExtractThinker":3,"tool-enoch3712--ExtractThinker":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},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,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},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 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},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",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},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",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},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",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},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",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":79,"owner_email":80,"owner_twitter":78,"owner_website":78,"owner_url":81,"languages":82,"stars":87,"forks":88,"last_commit_at":89,"license":90,"difficulty_score":23,"env_os":91,"env_gpu":92,"env_ram":93,"env_deps":94,"category_tags":108,"github_topics":109,"view_count":10,"oss_zip_url":78,"oss_zip_packed_at":78,"status":16,"created_at":124,"updated_at":125,"faqs":126,"releases":157},1191,"enoch3712\u002FExtractThinker","ExtractThinker","ExtractThinker is a Document Intelligence library for LLMs, offering ORM-style interaction for flexible and powerful document workflows.","ExtractThinker 是一个基于大语言模型的文档智能处理工具，能够从各种格式的文档中提取并分类结构化数据。它通过类似 ORM 的方式简化了文档处理流程，让开发者可以更高效地构建文档分析应用。  \n这个工具解决了传统文档处理中结构化数据提取困难、流程复杂的问题，尤其适合需要自动化处理大量文档的场景。  \n适合开发者和研究人员使用，尤其是那些希望快速构建文档智能应用的人群。其支持多种文档格式和 OCR 服务，具备灵活的提取合同定义和异步处理能力，是文档智能化处理的理想选择。","\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_readme_a5a03f450ab5.png\" alt=\"Extract Thinker Logo\" width=\"200\"\u002F> \n\u003C\u002Fp>\n\u003Cp align=\"center\">\n\u003Cimg alt=\"Python Version\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.9%2B-blue.svg\" \u002F>\n\u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@enoch3712\">\n    \u003Cimg alt=\"Medium\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-12100E?style=flat&logo=medium&logoColor=white\" \u002F>\n\u003C\u002Fa>\n\u003Cimg alt=\"GitHub Last Commit\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fenoch3712\u002FOpen-DocLLM\" \u002F>\n\u003Cimg alt=\"Github License\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache%202.0-blue.svg\" \u002F>\n\u003C\u002Fp>\n\n# ExtractThinker\n\nExtractThinker is a flexible document intelligence tool that leverages Large Language Models (LLMs) to extract and classify structured data from documents, functioning like an ORM for seamless document processing workflows.\n\n**TL;DR Document Intelligence for LLMs**\n\n## 🚀 Key Features\n\n- **Flexible Document Loaders**: Support for multiple document loaders, including Tesseract OCR, Azure Form Recognizer, AWS Textract, Google Document AI, and more.\n- **Customizable Contracts**: Define custom extraction contracts using Pydantic models for precise data extraction.\n- **Advanced Classification**: Classify documents or document sections using custom classifications and strategies.\n- **Asynchronous Processing**: Utilize asynchronous processing for efficient handling of large documents.\n- **Multi-format Support**: Seamlessly work with various document formats like PDFs, images, spreadsheets, and more.\n- **ORM-style Interaction**: Interact with documents and LLMs in an ORM-like fashion for intuitive development.\n- **Splitting Strategies**: Implement lazy or eager splitting strategies to process documents page by page or as a whole.\n- **Integration with LLMs**: Easily integrate with different LLM providers like OpenAI, Anthropic, Cohere, and more.\n- **Community-driven Development**: Inspired by the LangChain ecosystem with a focus on intelligent document processing.\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_readme_53a785cfcf7e.png)\n\n## 📦 Installation\n\nInstall ExtractThinker using pip:\n\n```bash\npip install extract_thinker\n```\n\n## 🛠️ Usage\n\n### Basic Extraction Example\n\nHere's a quick example to get you started with ExtractThinker. This example demonstrates how to load a document using PyPdf and extract specific fields defined in a contract.\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import Extractor, DocumentLoaderPyPdf, Contract\n\nload_dotenv()\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# Set the path to your Tesseract executable\ntest_file_path = os.path.join(\"path_to_your_files\", \"invoice.pdf\")\n\n# Initialize the extractor\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")  # or any other supported model\n\n# Extract data from the document\nresult = extractor.extract(test_file_path, InvoiceContract)\n\nprint(\"Invoice Number:\", result.invoice_number)\nprint(\"Invoice Date:\", result.invoice_date)\n```\n\n### Classification Example\n\nExtractThinker allows you to classify documents or parts of documents using custom classifications:\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import (\n    Extractor, Classification, Process, ClassificationStrategy,\n    DocumentLoaderPyPdf, Contract\n)\n\nload_dotenv()\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\nclass DriverLicenseContract(Contract):\n    name: str\n    license_number: str\n\n# Initialize the extractor and load the document loader\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")\n\n# Define classifications\nclassifications = [\n    Classification(\n        name=\"Invoice\",\n        description=\"An invoice document\",\n        contract=InvoiceContract,\n        extractor=extractor,\n    ),\n    Classification(\n        name=\"Driver License\",\n        description=\"A driver's license document\",\n        contract=DriverLicenseContract,\n        extractor=extractor,\n    ),\n]\n\n# Classify the document directly using the extractor\nresult = extractor.classify(\n    \"path_to_your_document.pdf\",  # Can be a file path or IO stream\n    classifications,\n    image=True  # Set to True for image-based classification\n)\n\n# The result will be a ClassificationResponse object with 'name' and 'confidence' fields\nprint(f\"Document classified as: {result.name}\")\nprint(f\"Confidence level: {result.confidence}\")\n```\n\n### Splitting Files Example\n\nExtractThinker allows you to split and process documents using different strategies. Here's how you can split a document and extract data based on classifications.\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import (\n    Extractor,\n    Process,\n    Classification,\n    ImageSplitter,\n    DocumentLoaderTesseract,\n    Contract,\n    SplittingStrategy,\n)\n\nload_dotenv()\n\nclass DriverLicenseContract(Contract):\n    name: str\n    license_number: str\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# Initialize the extractor and load the document loader\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")\n\n# Define classifications\nclassifications = [\n    Classification(\n        name=\"Driver License\",\n        description=\"A driver's license document\",\n        contract=DriverLicenseContract,\n        extractor=extractor,\n    ),\n    Classification(\n        name=\"Invoice\",\n        description=\"An invoice document\",\n        contract=InvoiceContract,\n        extractor=extractor,\n    ),\n]\n\n# Initialize the process and load the splitter\nprocess = Process()\nprocess.load_document_loader(DocumentLoaderPyPdf())\nprocess.load_splitter(ImageSplitter(model=\"gpt-4o-mini\"))\n\n# Load and process the document\npath_to_document = \"path_to_your_multipage_document.pdf\"\nsplit_content = (\n    process.load_file(path_to_document)\n    .split(classifications, strategy=SplittingStrategy.LAZY)\n    .extract()\n)\n\n# Process the extracted content as needed\nfor item in split_content:\n    if isinstance(item, InvoiceContract):\n        print(\"Extracted Invoice:\")\n        print(\"Invoice Number:\", item.invoice_number)\n        print(\"Invoice Date:\", item.invoice_date)\n    elif isinstance(item, DriverLicenseContract):\n        print(\"Extracted Driver License:\")\n        print(\"Name:\", item.name)\n        print(\"License Number:\", item.license_number)\n\n```\n\n### Batch Processing Example\n\nYou can also perform batch processing of documents:\n\n```python\nfrom extract_thinker import Extractor, Contract\n\nclass ReceiptContract(Contract):\n    store_name: str\n    total_amount: float\n\nextractor = Extractor()\nextractor.load_llm(\"gpt-4o-mini\")\n\n# List of file paths or streams\ndocument = \"receipt1.jpg\"\n\nbatch_job = extractor.extract_batch(\n    source=document,\n    response_model=ReceiptContract,\n    vision=True,\n)\n\n# Monitor the batch job status\nprint(\"Batch Job Status:\", await batch_job.get_status())\n\n# Retrieve results once processing is complete\nresults = await batch_job.get_result()\nfor result in results.parsed_results:\n    print(\"Store Name:\", result.store_name)\n    print(\"Total Amount:\", result.total_amount)\n```\n\n### Local LLM Integration Example\n\nExtractThinker supports custom LLM integrations. Here's how you can use a custom LLM:\n\n```python\nfrom extract_thinker import Extractor, LLM, DocumentLoaderTesseract, Contract\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# Initialize the extractor\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderTesseract(os.getenv(\"TESSERACT_PATH\")))\n\n# Load a custom LLM (e.g., Ollama)\nos.environ['API_BASE'] = \"http:\u002F\u002Flocalhost:11434\"\nllm = LLM('ollama\u002Fphi3')\nextractor.load_llm(llm)\n\n# Extract data\nresult = extractor.extract(\"invoice.png\", InvoiceContract)\nprint(\"Invoice Number:\", result.invoice_number)\nprint(\"Invoice Date:\", result.invoice_date)\n```\n\n## 📚 Documentation and Resources\n\n- **Examples**: Check out the examples directory for Jupyter notebooks and scripts demonstrating various use cases.\n- **Medium Articles**: Read articles about ExtractThinker on the author's Medium page.\n- **Test Suite**: Explore the test suite in the tests\u002F directory for more advanced usage examples and test cases.\n\n## 🧩 Integration with LLM Providers\n\nExtractThinker supports integration with multiple LLM providers:\n\n- **OpenAI**: Use models like gpt-3.5-turbo, gpt-4, etc.\n- **Anthropic**: Integrate with Claude models.\n- **Cohere**: Utilize Cohere's language models.\n- **Azure OpenAI**: Connect with Azure's OpenAI services.\n- **Local Models**: Ollama compatible models.\n\n## ⚙️ How It Works\n\nExtractThinker uses a modular architecture inspired by the LangChain ecosystem:\n\n- **Document Loaders**: Responsible for loading and preprocessing documents from various sources and formats.\n- **Extractors**: Orchestrate the interaction between the document loaders and LLMs to extract structured data.\n- **Splitters**: Implement strategies to split documents into manageable chunks for processing.\n- **Contracts**: Define the expected structure of the extracted data using Pydantic models.\n- **Classifications**: Classify documents or document sections to apply appropriate extraction contracts.\n- **Processes**: Manage the workflow of loading, classifying, splitting, and extracting data from documents.\n\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_readme_8982087f04ba.png)\n\n## 📝 Why Use ExtractThinker?\n\nWhile general frameworks like LangChain offer a broad range of functionalities, ExtractThinker is specialized for Intelligent Document Processing (IDP). It simplifies the complexities associated with IDP by providing:\n\n- **Specialized Components**: Tailored tools for document loading, splitting, and extraction.\n- **High Accuracy with LLMs**: Leverages the power of LLMs to improve the accuracy of data extraction and classification.\n- **Ease of Use**: Intuitive APIs and ORM-style interactions reduce the learning curve.\n- **Community Support**: Active development and support from the community.\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! To contribute:\n\n1. Fork the repository\n2. Create a new branch for your feature or bugfix\n3. Write tests for your changes\n4. Run tests to ensure everything is working correctly\n5. Submit a pull request with a description of your changes\n\n## 🌟 Community and Support\n\nStay updated and connect with the community:\n- [Scaling Document Extraction with o1, GPT-4o & Mini](https:\u002F\u002Fmedium.com\u002Ftowards-artificial-intelligence\u002Fscaling-document-extraction-with-o1-gpt4o-and-mini-extractthinker-8f3340b4e69c)\n- [Claude 3.5 — The King of Document Intelligence](https:\u002F\u002Fmedium.com\u002Fgitconnected\u002Fclaude-3-5-the-king-of-document-intelligence-f57bea1d209d?sk=124c5abb30c0e7f04313c5e20e79c2d1)\n- [Classification Tree for LLMs](https:\u002F\u002Fmedium.com\u002Fgitconnected\u002Fclassification-tree-for-llms-32b69015c5e0?sk=8a258cf74fe3483e68ab164e6b3aaf4c)\n- [Advanced Document Classification with LLMs](https:\u002F\u002Fmedium.com\u002Fgitconnected\u002Fadvanced-document-classification-with-llms-8801eaee3c58?sk=f5a22ee72022eb70e112e3e2d1608e79)\n- [Phi-3 and Azure: PDF Data Extraction | ExtractThinker](https:\u002F\u002Fmedium.com\u002Ftowards-artificial-intelligence\u002Fphi-3-and-azure-pdf-data-extraction-extractthinker-cb490a095adb?sk=7be7e625b8f9932768442f87dd0ebcec)\n- [ExtractThinker: Document Intelligence for LLMs](https:\u002F\u002Fmedium.com\u002Ftowards-artificial-intelligence\u002Fextractthinker-ai-document-intelligence-with-llms-72cbce1890ef)\n\n## 📄 License\n\nThis project is licensed under the Apache License 2.0. See the LICENSE file for more details.\n\n## Contact\n\nFor any questions or issues, please open an issue on the GitHub repository or reach out via email.\n","\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_readme_a5a03f450ab5.png\" alt=\"Extract Thinker Logo\" width=\"200\"\u002F> \n\u003C\u002Fp>\n\u003Cp align=\"center\">\n\u003Cimg alt=\"Python Version\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.9%2B-blue.svg\" \u002F>\n\u003Ca href=\"https:\u002F\u002Fmedium.com\u002F@enoch3712\">\n    \u003Cimg alt=\"Medium\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMedium-12100E?style=flat&logo=medium&logoColor=white\" \u002F>\n\u003C\u002Fa>\n\u003Cimg alt=\"GitHub Last Commit\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fenoch3712\u002FOpen-DocLLM\" \u002F>\n\u003Cimg alt=\"Github License\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache%202.0-blue.svg\" \u002F>\n\u003C\u002Fp>\n\n# ExtractThinker\n\nExtractThinker 是一款灵活的文档智能工具，它利用大型语言模型（LLMs）从文档中提取和分类结构化数据，就像一个 ORM 一样，能够实现流畅的文档处理工作流。\n\n**简而言之：面向 LLM 的文档智能**\n\n## 🚀 核心功能\n\n- **灵活的文档加载器**：支持多种文档加载器，包括 Tesseract OCR、Azure 表单识别器、AWS Textract、Google 文档 AI 等。\n- **可定制的契约**：使用 Pydantic 模型定义自定义提取契约，以实现精确的数据提取。\n- **高级分类**：通过自定义分类和策略对文档或文档部分进行分类。\n- **异步处理**：采用异步处理方式，高效处理大型文档。\n- **多格式支持**：无缝处理各种文档格式，如 PDF、图像、电子表格等。\n- **ORM 风格交互**：以类似 ORM 的方式与文档和 LLM 交互，便于直观开发。\n- **拆分策略**：实施惰性或主动拆分策略，按页或整体处理文档。\n- **与 LLM 集成**：轻松集成到不同的 LLM 提供商，如 OpenAI、Anthropic、Cohere 等。\n- **社区驱动开发**：受 LangChain 生态系统的启发，专注于智能文档处理。\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_readme_53a785cfcf7e.png)\n\n## 📦 安装\n\n使用 pip 安装 ExtractThinker：\n\n```bash\npip install extract_thinker\n```\n\n## 🛠️ 使用方法\n\n### 基本提取示例\n\n以下是一个快速入门示例，演示如何使用 ExtractThinker。此示例展示了如何使用 PyPdf 加载文档，并提取契约中定义的特定字段。\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import Extractor, DocumentLoaderPyPdf, Contract\n\nload_dotenv()\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# 设置 Tesseract 可执行文件的路径\ntest_file_path = os.path.join(\"path_to_your_files\", \"invoice.pdf\")\n\n# 初始化提取器\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")  # 或任何其他支持的模型\n\n# 从文档中提取数据\nresult = extractor.extract(test_file_path, InvoiceContract)\n\nprint(\"发票号码:\", result.invoice_number)\nprint(\"发票日期:\", result.invoice_date)\n```\n\n### 分类示例\n\nExtractThinker 允许您使用自定义分类对文档或文档的一部分进行分类：\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import (\n    Extractor, Classification, Process, ClassificationStrategy,\n    DocumentLoaderPyPdf, Contract\n)\n\nload_dotenv()\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\nclass DriverLicenseContract(Contract):\n    name: str\n    license_number: str\n\n# 初始化提取器并加载文档加载器\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")\n\n# 定义分类\nclassifications = [\n    Classification(\n        name=\"Invoice\",\n        description=\"一张发票文档\",\n        contract=InvoiceContract,\n        extractor=extractor,\n    ),\n    Classification(\n        name=\"Driver License\",\n        description=\"一张驾驶证文档\",\n        contract=DriverLicenseContract,\n        extractor=extractor,\n    ),\n]\n\n# 直接使用提取器对文档进行分类\nresult = extractor.classify(\n    \"path_to_your_document.pdf\",  # 可以是文件路径或 IO 流\n    classifications,\n    image=True  # 设置为 True 进行基于图像的分类\n)\n\n# 结果将是一个包含 'name' 和 'confidence' 字段的 ClassificationResponse 对象\nprint(f\"文档被分类为: {result.name}\")\nprint(f\"置信度: {result.confidence}\")\n```\n\n### 文件拆分示例\n\nExtractThinker 允许您使用不同的策略拆分和处理文档。以下是拆分文档并根据分类提取数据的方法。\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import (\n    Extractor,\n    Process,\n    Classification,\n    ImageSplitter,\n    DocumentLoaderTesseract,\n    Contract,\n    SplittingStrategy,\n)\n\nload_dotenv()\n\nclass DriverLicenseContract(Contract):\n    name: str\n    license_number: str\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# 初始化提取器并加载文档加载器\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")\n\n# 定义分类\nclassifications = [\n    Classification(\n        name=\"Driver License\",\n        description=\"一张驾驶证文档\",\n        contract=DriverLicenseContract,\n        extractor=extractor,\n    ),\n    Classification(\n        name=\"Invoice\",\n        description=\"一张发票文档\",\n        contract=InvoiceContract,\n        extractor=extractor,\n    ),\n]\n\n# 初始化流程并加载拆分器\nprocess = Process()\nprocess.load_document_loader(DocumentLoaderPyPdf())\nprocess.load_splitter(ImageSplitter(model=\"gpt-4o-mini\"))\n\n# 加载并处理文档\npath_to_document = \"path_to_your_multipage_document.pdf\"\nsplit_content = (\n    process.load_file(path_to_document)\n    .split(classifications, strategy=SplittingStrategy.LAZY)\n    .extract()\n)\n\n# 根据需要处理提取的内容\nfor item in split_content:\n    if isinstance(item, InvoiceContract):\n        print(\"提取的发票:\")\n        print(\"发票号码:\", item.invoice_number)\n        print(\"发票日期:\", item.invoice_date)\n    elif isinstance(item, DriverLicenseContract):\n        print(\"提取的驾驶证:\")\n        print(\"姓名:\", item.name)\n        print(\"许可证号码:\", item.license_number)\n\n```\n\n### 批量处理示例\n\n您还可以对文档进行批量处理：\n\n```python\nfrom extract_thinker import Extractor, Contract\n\nclass ReceiptContract(Contract):\n    store_name: str\n    total_amount: float\n\nextractor = Extractor()\nextractor.load_llm(\"gpt-4o-mini\")\n\n# 文件路径或流的列表\ndocument = \"receipt1.jpg\"\n\nbatch_job = extractor.extract_batch(\n    source=document,\n    response_model=ReceiptContract,\n    vision=True,\n)\n\n# 监控批量作业状态\nprint(\"批量作业状态:\", await batch_job.get_status())\n\n# 处理完成后获取结果\nresults = await batch_job.get_result()\nfor result in results.parsed_results:\n    print(\"商店名称:\", result.store_name)\n    print(\"总金额:\", result.total_amount)\n```\n\n### 本地 LLM 集成示例\n\nExtractThinker 支持自定义 LLM 集成。以下是使用自定义 LLM 的方法：\n\n```python\nfrom extract_thinker import Extractor, LLM, DocumentLoaderTesseract, Contract\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# 初始化提取器\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderTesseract(os.getenv(\"TESSERACT_PATH\")))\n\n# 加载自定义 LLM（例如 Ollama）\nos.environ['API_BASE'] = \"http:\u002F\u002Flocalhost:11434\"\nllm = LLM('ollama\u002Fphi3')\nextractor.load_llm(llm)\n\n# 提取数据\nresult = extractor.extract(\"invoice.png\", InvoiceContract)\nprint(\"发票号码:\", result.invoice_number)\nprint(\"发票日期:\", result.invoice_date)\n```\n\n## 📚 文档和资源\n\n- **示例**: 查看 examples 目录中的 Jupyter 笔记本和脚本，演示各种使用场景。\n- **Medium 文章**: 阅读作者 Medium 页面上关于 ExtractThinker 的文章。\n- **测试套件**: 探索 tests\u002F 目录中的测试套件，获取更多高级用法示例和测试案例。\n\n## 🧩 与 LLM 提供商的集成\n\nExtractThinker 支持与多个 LLM 提供商的集成：\n\n- **OpenAI**: 使用 gpt-3.5-turbo、gpt-4 等模型。\n- **Anthropic**: 集成 Claude 模型。\n- **Cohere**: 利用 Cohere 的语言模型。\n- **Azure OpenAI**: 连接 Azure 的 OpenAI 服务。\n- **本地模型**: 兼容 Ollama 的模型。\n\n## ⚙️ 工作原理\n\nExtractThinker 采用受 LangChain 生态系统启发的模块化架构：\n\n- **文档加载器**: 负责从各种来源和格式加载并预处理文档。\n- **提取器**: 协调文档加载器与 LLM 之间的交互，以提取结构化数据。\n- **分割器**: 实现将文档分割为可管理块的策略，以便进行处理。\n- **合同**: 使用 Pydantic 模型定义提取数据的预期结构。\n- **分类器**: 对文档或文档部分进行分类，以应用适当的提取合同。\n- **流程**: 管理从文档加载、分类、分割到数据提取的工作流程。\n\n![image](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_readme_8982087f04ba.png)\n\n## 📝 为什么使用 ExtractThinker？\n\n虽然像 LangChain 这样的通用框架提供了广泛的功能，但 ExtractThinker 专门用于智能文档处理 (IDP)。它通过以下方式简化了 IDP 相关的复杂性：\n\n- **专用组件**: 专为文档加载、分割和提取设计的工具。\n- **LLM 高精度**: 利用 LLM 的强大功能提高数据提取和分类的准确性。\n- **易用性**: 直观的 API 和 ORM 风格的交互降低了学习曲线。\n- **社区支持**: 积极的开发和社区支持。\n\n## 🤝 贡献\n\n我们欢迎社区的贡献！要参与贡献：\n\n1. 分支仓库\n2. 为您的功能或错误修复创建新分支\n3. 为您的更改编写测试\n4. 运行测试以确保一切正常工作\n5. 提交包含您更改描述的拉取请求\n\n## 🌟 社区和支持\n\n保持更新并与社区保持联系：\n- [使用 o1、GPT-4o 和 Mini 扩展文档提取](https:\u002F\u002Fmedium.com\u002Ftowards-artificial-intelligence\u002Fscaling-document-extraction-with-o1-gpt4o-and-mini-extractthinker-8f3340b4e69c)\n- [Claude 3.5 — 文档智能之王](https:\u002F\u002Fmedium.com\u002Fgitconnected\u002Fclaude-3-5-the-king-of-document-intelligence-f57bea1d209d?sk=124c5abb30c0e7f04313c5e20e79c2d1)\n- [LLM 的分类树](https:\u002F\u002Fmedium.com\u002Fgitconnected\u002Fclassification-tree-for-llms-32b69015c5e0?sk=8a258cf74fe3483e68ab164e6b3aaf4c)\n- [使用 LLM 进行高级文档分类](https:\u002F\u002Fmedium.com\u002Fgitconnected\u002Fadvanced-document-classification-with-llms-8801eaee3c58?sk=f5a22ee72022eb70e112e3e2d1608e79)\n- [Phi-3 和 Azure：PDF 数据提取 | ExtractThinker](https:\u002F\u002Fmedium.com\u002Ftowards-artificial-intelligence\u002Fphi-3-and-azure-pdf-data-extraction-extractthinker-cb490a095adb?sk=7be7e625b8f9932768442f87dd0ebcec)\n- [ExtractThinker：面向 LLM 的文档智能](https:\u002F\u002Fmedium.com\u002Ftowards-artificial-intelligence\u002Fextractthinker-ai-document-intelligence-with-llms-72cbce1890ef)\n\n## 📄 许可证\n\n本项目采用 Apache License 2.0 许可证。有关详细信息，请参阅 LICENSE 文件。\n\n## 联系方式\n\n如有任何问题或疑问，请在 GitHub 仓库中提交问题，或通过电子邮件联系我们。","# ExtractThinker 快速上手指南\n\n## 环境准备\n\n### 系统要求\n- Python 3.9 或更高版本\n- 支持 Linux、macOS 和 Windows 操作系统\n\n### 前置依赖\n- `python-dotenv`（用于加载环境变量）\n- `pydantic`（用于定义数据结构）\n- 其他依赖会通过 pip 自动安装\n\n> 推荐使用国内镜像源加速安装，例如：\n```bash\npip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple extract_thinker\n```\n\n## 安装步骤\n\n使用 pip 安装 ExtractThinker：\n\n```bash\npip install extract_thinker\n```\n\n## 基本使用\n\n以下是一个最简单的使用示例，演示如何加载文档并提取指定字段。\n\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom extract_thinker import Extractor, DocumentLoaderPyPdf, Contract\n\nload_dotenv()\n\nclass InvoiceContract(Contract):\n    invoice_number: str\n    invoice_date: str\n\n# 设置文档路径\ntest_file_path = os.path.join(\"path_to_your_files\", \"invoice.pdf\")\n\n# 初始化提取器\nextractor = Extractor()\nextractor.load_document_loader(DocumentLoaderPyPdf())\nextractor.load_llm(\"gpt-4o-mini\")  # 可替换为其他支持的模型\n\n# 提取数据\nresult = extractor.extract(test_file_path, InvoiceContract)\n\nprint(\"Invoice Number:\", result.invoice_number)\nprint(\"Invoice Date:\", result.invoice_date)\n```","某财务公司需要从大量PDF发票中自动提取发票号和日期，用于财务对账。由于发票格式多样，手动处理效率低且容易出错。\n\n### 没有 ExtractThinker 时  \n- 需要为每种发票格式编写定制的解析逻辑，开发成本高  \n- 文档处理流程分散，难以统一管理与维护  \n- 提取结果准确性依赖人工校验，效率低下  \n- 不支持异步处理，大规模文档处理耗时长  \n\n### 使用 ExtractThinker 后  \n- 通过定义 Pydantic 模型快速构建提取规则，降低开发复杂度  \n- 提供统一的文档处理接口，简化流程管理和维护  \n- 利用 LLM 自动识别并提取结构化数据，减少人工干预  \n- 支持异步处理，大幅提升大批量文档的处理速度  \n\nExtractThinker 通过结构化数据提取与流程标准化，显著提升了财务自动化处理的效率与准确性。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fenoch3712_ExtractThinker_a5a03f45.png","enoch3712","Julio","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fenoch3712_d191f6fe.jpg",null,"Lisbon | Warsaw | Tbilisi","enoch3712@gmail.com","https:\u002F\u002Fgithub.com\u002Fenoch3712",[83],{"name":84,"color":85,"percentage":86},"Python","#3572A5",100,1527,152,"2026-04-04T21:09:00","Apache-2.0","Linux, macOS, Windows","需要 NVIDIA GPU，显存 8GB+，CUDA 11.7+","16GB+",{"notes":95,"python":96,"dependencies":97},"建议使用 conda 管理环境，首次运行需下载约 5GB 模型文件","3.9+",[98,99,100,101,102,103,104,105,106,107],"torch>=2.0","transformers>=4.30","accelerate","pydantic","pandas","numpy","tqdm","requests","pillow","pdfminer.six",[13,14,15,26],[110,111,112,113,114,115,116,117,118,119,120,121,122,123],"ai","llm","nlp","ocr","openai","python","document-image-analysis","document-intelligence","document-parsing","document-processing","langchain","machine-learning","pdf","pdf-to-text","2026-03-27T02:49:30.150509","2026-04-06T08:17:40.209697",[127,132,137,142,147,152],{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},5425,"使用 PyCharm 时出现 'docx2txt module not found' 错误如何解决？","该问题由 PyCharm 的 Python 路径配置错误导致。解决方法是为项目添加一个定义好的运行模板，确保虚拟环境路径正确。","https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fissues\u002F135",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},5426,"DocumentLoaderPyPdf() 提取 PDF 内容为空如何处理？","可能是由于模型的上下文窗口限制导致内容未被正确提取。建议使用 gpt-4o 模型，并设置 CompletionStrategy.PAGINATE 来分页处理内容。","https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fissues\u002F262",{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},5427,"Excel 文件数据在 Extractor 中丢失如何解决？","当前版本的 DocumentLoaderSpreadSheet 仅传递了工作表名称，未传递实际数据。建议使用 Docling 或 Markdown 格式的文档加载器以获得更好的支持。","https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fissues\u002F286",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},5428,"使用本地 LLaMA3.2 模型时出现 JSON 格式错误如何解决？","该问题可能与模型返回的 JSON 格式不规范有关。请检查模型输出是否符合预期格式，或尝试使用 OpenAI 的 gpt-4o 模型作为替代方案。","https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fissues\u002F183",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},5429,"RAG 处理多页 PDF 时出现上下文过长错误如何解决？","此问题由模型上下文长度限制引起。可以设置 CompletionStrategy.PAGINATE 分页处理内容，或使用具有更大上下文窗口的模型如 gpt-4o。","https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fissues\u002F113",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},5430,"图像分类时未使用 input_data 变量如何解决？","目前代码中未实现对 input_data 的使用逻辑。建议关注后续版本更新或自行修改 extractor.py 中的 _classify 方法以支持该功能。","https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fissues\u002F115",[158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233,238,243,248,253],{"id":159,"version":160,"summary_zh":161,"released_at":162},114617,"v0.1.1","## What's Changed\r\n* Add strategy to Process.Extract by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F197\r\n* Docling refactor by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F199\r\n* markdown multi page fix by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F201\r\n* timeout llm request by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F202\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.0...v0.1.1","2025-01-17T15:36:56",{"id":164,"version":165,"summary_zh":166,"released_at":167},114618,"v0.1.0","## What's Changed\r\n* 49 documentloaderconfig by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F191","2025-01-13T14:00:30",{"id":169,"version":170,"summary_zh":171,"released_at":172},114619,"v0.0.36","## What's Changed\r\n* test ollama fix by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F185\r\n* 134 docling documentloader by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F187\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.0.35...v0.0.36","2025-01-10T10:29:52",{"id":174,"version":175,"summary_zh":176,"released_at":177},114620,"v0.0.35","## What's Changed\r\n* Paginate not merging properly (List Hashing) by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F179\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.0.34...v0.0.35","2025-01-03T15:10:00",{"id":179,"version":180,"summary_zh":181,"released_at":182},114621,"v0.0.34","## What's Changed\r\n* Remove Heavy dependencies by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F173\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.0.33...v0.0.34","2025-01-02T11:11:23",{"id":184,"version":185,"summary_zh":186,"released_at":187},114622,"v0.0.33","## What's Changed\r\n* documentLoader docs added by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F165\r\n* Major refactoring and Strategy added to the docs by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F168\r\n* add markdown DL by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F170\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.0.32...v0.0.33","2024-12-30T14:21:05",{"id":189,"version":190,"summary_zh":191,"released_at":192},114623,"v0.0.32","## What's Changed\r\n* removing hardcoded vision for image after split by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F157\r\n* Groq documentation added by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F158\r\n* markitdown documentloader by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F159\r\n* Add splitter checker on process  by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F160\r\n* name convention changed with warning by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F161\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.0.31...v0.0.32","2024-12-28T21:51:58",{"id":194,"version":195,"summary_zh":196,"released_at":197},114604,"v0.1.14","## What's Changed\r\n* Fixed Local LLM Integration Example in README.md by @iusshpandeh in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F322\r\n* libmagic added to poetry by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F331\r\n* Updated README.md with instructions for Windows setup. by @zurich123 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F328\r\n* Fix deprecation errors in example file by @zurich123 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F329\r\n* refactor, windows tessaract added to the docs by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F333\r\n* Added Receipt Example by @meghana1090 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F330\r\n* azure documentloader with advance configs by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F338\r\n* Added EasyOCR Loader by @meghana1090 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F337\r\n* [BUG] fix tests and EasyOCR by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F340\r\n* [BUG] Litellm: max_tokens no supported by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F341\r\n\r\n## New Contributors\r\n* @iusshpandeh made their first contribution in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F322\r\n* @zurich123 made their first contribution in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F328\r\n* @meghana1090 made their first contribution in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F330\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.13...v0.1.14","2025-06-09T15:42:36",{"id":199,"version":200,"summary_zh":201,"released_at":202},114605,"v0.1.13","## What's Changed\r\n* [HOT FIX] Classification Tree with Id by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F318\r\n* markdown image added by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F320\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.12...v0.1.13","2025-04-24T12:33:58",{"id":204,"version":205,"summary_zh":206,"released_at":207},114606,"v0.1.12","## What's Changed\r\n* add elements to init by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F315\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.11...v0.1.12","2025-04-16T13:35:05",{"id":209,"version":210,"summary_zh":211,"released_at":212},114607,"v0.1.11","## What's Changed\r\n* markdown page selection by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F307\r\n* \r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.10...v0.1.11","2025-04-08T11:52:48",{"id":214,"version":215,"summary_zh":216,"released_at":217},114608,"v0.1.10","## What's Changed\r\n* [FEATURE] MARKDOWN and Mistral  by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F300\r\n* 301 update markdown docs by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F302\r\n* poetry update by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F303\r\n* [BUG] markdown getting starter NOT FOUND #304 by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F305\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.9...v0.1.10","2025-04-07T13:52:26",{"id":219,"version":220,"summary_zh":221,"released_at":222},114609,"v0.1.9","## What's Changed\r\n* small_doc_fix_eval by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F291\r\n* [Bug] Excel DocumentLoader by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F294\r\n* Mistral DL with doucmentation by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F293\r\n* Add missing Config classes to exports by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F296\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.8...v0.1.9","2025-04-02T01:06:35",{"id":224,"version":225,"summary_zh":226,"released_at":227},114610,"v0.1.8","## What's Changed\r\n* 288 feature claude 37 support by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F289\r\n* [feature] evals v1 by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F285\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.7...v0.1.8","2025-03-21T13:03:14",{"id":229,"version":230,"summary_zh":231,"released_at":232},114611,"v0.1.7","## What's Changed\r\n* get_document_loader refactor. Get the first, if only one present by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F266\r\n* ignore warning on init by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F270\r\n* set temperature by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F272\r\n* litellm check vision removed. Exception checked after being raised by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F273\r\n* updated packages by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F275\r\n* DocumentLoaderData added to init by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F276\r\n* extract_async content added to params by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F277\r\n* extractor extract multiple sources added with tests by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F278\r\n* refactor of the tests. document_loader multiple choice. Multi image fix by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F279\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.6...v0.1.7","2025-02-21T22:54:30",{"id":234,"version":235,"summary_zh":236,"released_at":237},114612,"v0.1.6","## What's Changed\r\n* print removed by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F244\r\n* Add specific contract after classsification   by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F243\r\n* Paginate handler   bad optional list aggregation by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F249\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.5...v0.1.6","2025-02-11T01:06:14",{"id":239,"version":240,"summary_zh":241,"released_at":242},114613,"v0.1.5","## What's Changed\r\n* url added for docling and markitdown DL by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F236\r\n* Multiple image support added for extraction by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F238\r\n* Image generation for URL in DocumentLoader by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F239\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.4...v0.1.5","2025-02-04T14:01:23",{"id":244,"version":245,"summary_zh":246,"released_at":247},114614,"v0.1.4","## What's Changed\r\n* dynamic generation of the output by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F227\r\n* add pydanticai support by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F228\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.3...v0.1.4","2025-01-28T15:22:25",{"id":249,"version":250,"summary_zh":251,"released_at":252},114615,"v0.1.3","## What's Changed\r\n* MD extra components added to docling DL by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F218\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.2...v0.1.3","2025-01-22T11:32:15",{"id":254,"version":255,"summary_zh":256,"released_at":257},114616,"v0.1.2","## What's Changed\r\n* set_max_size for image added to the DL by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F207\r\n* Image too big and classification refactor  by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F209\r\n* Document Loader for already processed content by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F212\r\n* New classification strategy for image by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F209\r\n* 0.1.2 by @enoch3712 in https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fpull\u002F214\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fenoch3712\u002FExtractThinker\u002Fcompare\u002Fv0.1.1...v0.1.2","2025-01-21T17:49:53"]