contextgem

GitHub
1.8k 150 简单 2 次阅读 昨天Apache-2.0数据工具图像语言模型Agent开发框架
AI 解读 由 AI 自动生成,仅供参考

ContextGem 是一款专注于大语言模型上下文提取的开源 Python 库,其核心使命是让从文档中获取 LLM 可用信息的过程变得毫不费力。面对复杂的文档格式和非结构化数据,手动清洗和转换上下文往往耗时且易错,ContextGem 通过自动化流程解决了这一难题,显著提升了文档处理的效率。

对于正在构建 RAG 系统、开发 AI Agent 或从事 NLP 相关研究的开发者而言,ContextGem 是非常合适的选择。ContextGem 不仅功能强大,还展现了极高的工程标准:全面覆盖 Python 3.10 至 3.14 版本,集成 uv、ruff 等现代化开发工具,并通过多项安全与质量测试。特别值得一提的是,ContextGem 对 AI Agent 非常友好,原生支持 AGENTS.md 和 CLAUDE.md,便于智能体理解项目结构。凭借详尽的文档和严格的 CI 流程,ContextGem 成为值得信赖的开发伙伴。

使用场景

某金融风控团队正在构建内部知识库问答系统,核心任务是从数百份历史审计报告中提取关键信息供大模型进行风险推理。

没有 contextgem 时

  • 开发人员需手写复杂的 PDF 解析脚本,处理扫描件乱码及特殊字符极其耗时
  • 文档中的表格和图表被强制转成纯文本后丢失结构,严重影响模型理解能力
  • 不同格式的文档(DOCX、PDF、TXT)需要分别适配不同的清洗逻辑,维护困难
  • 上下文切片过于粗糙,导致检索增强生成(RAG)系统中的关键信息召回率偏低

使用 contextgem 后

  • contextgem 能够统一处理多格式文档,自动剥离页眉页脚等无关噪声保留核心语义
  • 智能算法维持原文档的层级结构,确保长文本在输入模型时逻辑依然连贯清晰
  • 提供标准化的输出接口,可无缝对接现有的向量数据库和复杂提示词模板
  • 将原本需要数周的文档预处理工作压缩至几天,大幅降低了后续的工程维护成本

contextgem 通过自动化文档上下文提取,让开发者能专注于业务逻辑而非繁琐的数据清洗。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes需配置外部 LLM 提供商 API Key(如 OpenAI);推荐使用 uv 进行环境管理;支持多语言文档及结构化数据提取。
python3.10 | 3.11 | 3.12 | 3.13 | 3.14
pydantic
wtpsplit
contextgem hero image

快速开始

ContextGem

ContextGem:从文档中轻松提取 LLM 数据

PyPI PyPI Downloads Python Versions License
质量 tests Coverage CodeQL bandit security OpenSSF Best Practices
工具 uv Ruff Pydantic v2 pyright pre-commit deptry egress: tethered Hatch project
文档 docs documentation Docstring Coverage DeepWiki
AI 代理 AGENTS.md CLAUDE.md
社区 Contributor Covenant GitHub issues closed GitHub latest commit
ContextGem:本周第二产品


ContextGem 是一个免费、开源的 LLM(大型语言模型)框架,它通过最少的代码量,使从文档中提取结构化数据和见解变得极其容易。


💎 为什么选择 ContextGem?

大多数流行的用于从文档中提取结构化数据的 LLM 框架都需要大量的样板代码才能提取基本信息。这显著增加了开发时间和复杂性。

ContextGem 通过提供一个灵活、直观的框架来解决这一挑战,能够以最小的努力从文档中提取结构化数据和见解。复杂且最耗时的部分由强大的抽象处理,消除了样板代码并减少了开发开销。

📖 在文档中阅读更多关于项目 动机 的信息。

⭐ 核心功能

内置抽象 ContextGem 其他 LLM 框架*
自动化动态提示词 🟢
自动化数据建模和验证器 🟢
精确的细粒度引用映射(段落与句子) 🟢
理由说明(支撑提取的推理) 🟢
神经分割(使用 wtpsplit 的 SaT 模型) 🟢
多语言支持(无需提示词的输入/输出) 🟢
单一统一的提取管道(声明式、可复用、完全序列化) 🟢 🟡
具有特定角色任务的分组 LLM 🟢 🟡
嵌套上下文提取 🟢 🟡
统一、完全序列化的结果存储模型(文档) 🟢 🟡
带示例的提取任务校准 🟢 🟡
内置并发 I/O 处理 🟢 🟡
自动化用量与成本追踪 🟢 🟡
降级与重试逻辑 🟢 🟢
多个 LLM 提供商 🟢 🟢

🟢 - 完全支持 - 无需额外设置
🟡 - 部分支持 - 需要额外设置
◯ - 不支持 - 需要自定义逻辑

* 请参阅 描述 了解 ContextGem 抽象,以及使用 ContextGem 与其他流行开源 LLM 框架的具体实现示例的 比较

💡 你能构建什么

通过最少的代码,你可以:

  • 从文档中提取结构化数据(文本、图像)
  • 识别并分析文档内的关键方面(主题、话题、类别)(了解更多)
  • 从文档中提取特定概念(实体、事实、结论、评估)(了解更多)
  • 通过简单直观的 API 构建复杂的提取工作流
  • 创建多级提取管道(包含概念的方面、分层方面)

ContextGem extraction example

📦 安装

使用 uv(推荐):

uv add contextgem

或使用 pip:

pip install -U contextgem

🚀 快速开始

以下示例演示了如何使用 ContextGem 从法律文档中提取异常——这是一个需要上下文理解的复杂概念。与可能忽略细微不一致的传统 RAG(检索增强生成)方法不同,ContextGem 分析整个文档上下文来识别不相关的内容,并提供完整的来源引用和理由说明。

# Quick Start Example - Extracting anomalies from a document, with source references and justifications

import os

from contextgem import Document, DocumentLLM, StringConcept


# Sample document text (shortened for brevity)
doc = Document(
    raw_text=(
        "Consultancy Agreement\n"
        "This agreement between Company A (Supplier) and Company B (Customer)...\n"
        "The term of the agreement is 1 year from the Effective Date...\n"
        "The Supplier shall provide consultancy services as described in Annex 2...\n"
        "The Customer shall pay the Supplier within 30 calendar days of receiving an invoice...\n"
        "The purple elephant danced gracefully on the moon while eating ice cream.\n"  # 💎 anomaly
        "Time-traveling dinosaurs will review all deliverables before acceptance.\n"  # 💎 another anomaly
        "This agreement is governed by the laws of Norway...\n"
    ),
)

# Attach a document-level concept
doc.concepts = [
    StringConcept(
        name="Anomalies",  # in longer contexts, this concept is hard to capture with RAG
        description="Anomalies in the document",
        add_references=True,
        reference_depth="sentences",
        add_justifications=True,
        justification_depth="brief",
        # see the docs for more configuration options
    )
    # add more concepts to the document, if needed
    # see the docs for available concepts: StringConcept, JsonObjectConcept, etc.
]
# Or use `doc.add_concepts([...])`

# Define an LLM for extracting information from the document
llm = DocumentLLM(
    model="openai/gpt-4o-mini",  # or another provider/LLM
    api_key=os.environ.get(
        "CONTEXTGEM_OPENAI_API_KEY"
    ),  # your API key for the LLM provider
    # see the docs for more configuration options
)

# Extract information from the document
doc = llm.extract_all(doc)  # or use async version `await llm.extract_all_async(doc)`

# Access extracted information in the document object
anomalies_concept = doc.concepts[0]

or doc.get_concept_by_name("Anomalies")

for item in anomalies_concept.extracted_items: print("Anomaly:") print(f" {item.value}") print("Justification:") print(f" {item.justification}") print("Reference paragraphs:") for p in item.reference_paragraphs: print(f" - {p.raw_text}") print("Reference sentences:") for s in item.reference_sentences: print(f" - {s.raw_text}") print()

[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/shcherbak-ai/contextgem/blob/main/dev/notebooks/readme/quickstart_concept.ipynb)

🧠 工作原理

📝 步骤 1:定义提取上下文

📄 文档 (Document)
创建一个包含文本和/或视觉内容的 Document,代表您的文档(合同、发票、报告、简历等),LLM 从中提取信息(方面和/或概念)。了解更多
document = Document(raw_text="Non-Disclosure Agreement...")

🎯 步骤 2:定义要提取的内容

🔍 方面 (Aspects) 💡 概念 (Concepts)
定义 Aspects 以从文档中提取文本片段(章节、主题、主题)。您可以分层组织内容并结合 Concept 进行全面分析。了解更多 定义 Concept 以提取特定数据点,具备智能推理能力:实体、见解、结构化对象、分类、数值计算、日期、评级和评估。了解更多
# Extract document sections
aspect = Aspect(
    name="Term and termination",
    description="Clauses on contract term and termination",
)
# Extract specific data points
concept = BooleanConcept(
    name="NDA check",
    description="Is the contract an NDA?",
)
# Add these to the document instance for further extraction
document.add_aspects([aspect])
document.add_concepts([concept])
🔄 替代方案:配置 提取管道 (Extraction Pipeline)
创建可重用的预定义 Aspect 和 Concept 集合,以便在多个文档之间实现一致的提取。了解更多

🧠 步骤 3:运行 LLM 提取

🤖 大语言模型 (LLM) 🤖🤖 替代方案LLM 组 (高级)
配置云或本地 LLM,用于从文档中提取方面和/或概念。DocumentLLM 支持回退模型和基于角色的任务路由以实现最佳性能。了解更多 配置一组具有独特角色的 LLM,用于复杂的提取工作流。您可以将不同的方面和/或概念路由到专门的 LLM(例如,简单提取与推理任务)。了解更多
llm = DocumentLLM(
    model="openai/gpt-5-mini",  # or another provider/LLM
    api_key="...",
)
document = llm.extract_all(document)
# print(document.aspects[0].extracted_items)
# print(document.concepts[0].extracted_items)

📖 了解更多关于 ContextGem 的 核心组件 及其在实际中的示例。

📚 使用示例

🌟 基本用法:

🚀 高级用法:

🔄 文档转换器

要为 LLM 分析创建 ContextGem 文档,您可以直接传递原始文本,或使用内置转换器处理各种文件格式。

📄 DOCX 转换器

ContextGem 提供了一个内置转换器,可以轻松地将 DOCX 文件转换为 LLM 就绪的数据。

  • 全面提取文档元素:段落、标题、列表、表格、注释、脚注、文本框、页眉/页脚、链接、嵌入图像和内联格式
  • 保留文档结构,并附带丰富元数据以改进 LLM 分析
  • 内置转换器,直接处理 Word XML

🚀 v0.17.1 版本性能提升:DOCX 转换器现在转换速度快约 2 倍

# Using ContextGem's DocxConverter

from contextgem import DocxConverter


converter = DocxConverter()

# Convert a DOCX file to an LLM-ready ContextGem Document
# from path
document = converter.convert("path/to/document.docx")
# or from file object
with open("path/to/document.docx", "rb") as docx_file_object:
    document = converter.convert(docx_file_object)

# Perform data extraction on the resulting Document object
# document.add_aspects(...)
# document.add_concepts(...)
# llm.extract_all(document)

# You can also use DocxConverter instance as a standalone text extractor
docx_text = converter.convert_to_text_format(
    "path/to/document.docx",
    output_format="markdown",  # or "raw"
)

📖 在文档中了解更多关于 DOCX 转换器功能 的信息。

🎯 聚焦文档分析

ContextGem 利用 LLM(大语言模型)的长上下文窗口,从单个文档中提供卓越的提取精度。与经常 难以处理复杂概念和细微见解 的 RAG(检索增强生成)方法不同,ContextGem 利用了不断扩展的上下文容量、进化的 LLM 能力和下降的成本。这种聚焦方法实现了从完整文档中直接提取信息,消除了检索不一致性,同时优化了深入的单文档分析。虽然这为单个文档提供了更高的准确性,但 ContextGem 目前尚不支持跨文档查询或语料库范围的检索——对于这些用例,现代 RAG 框架(例如 LlamaIndex, Haystack)仍然更为合适。

📖 在文档中阅读更多关于 ContextGem 如何工作 的内容。

🤖 支持的 LLM

ContextGem 通过 LiteLLM 集成支持基于云和本地的 LLM:

  • 云端 LLM:OpenAI, Anthropic, Google, Azure OpenAI, xAI 等
  • 本地 LLM:使用 Ollama, LM Studio 等提供商在本地运行模型
  • 模型架构:适用于具备推理/CoT(思维链)能力(如 gpt-5)和非推理模型(如 gpt-4.1)
  • 简单 API:所有 LLM 的统一接口,轻松切换提供商

💡 模型选择说明: 为了可靠的结构化提取,我们建议使用性能相当于或超过 gpt-4o-mini 的模型。较小的模型(如 8B 参数模型)可能在 ContextGem 的详细提取指令上遇到困难。如果您在使用较小模型时遇到问题,请参阅我们的 故障排除指南 以获取潜在解决方案。

📖 在文档中了解更多关于 支持的 LLM 提供商和模型,如何 配置 LLM,以及 LLM 提取方法 的信息。

⚡ 优化

ContextGem 文档提供了关于优化策略的指导,以最大化性能、最小化成本并提高提取精度:

💾 序列化结果

ContextGem 允许您使用内置的 serialization(序列化)方法保存和加载 Document 对象、pipeline(管道)和 LLM 配置:

  • 保存已处理的文档以避免重复昂贵的 LLM 调用
  • 在不同系统之间传输提取结果
  • 持久化 pipeline 和 LLM 配置以便以后重用

📖 在文档中了解更多关于 serialization 选项 的信息。

📚 文档

📖 完整文档: contextgem.dev

⚠️ 官方文档通知: https://contextgem.dev/ 是 ContextGem 文档的唯一官方来源。请注意可能存在包含过时或不正确信息的未经授权副本或镜像。

🤖 AI 驱动的代码探索: DeepWiki 为代码库提供可视化架构映射和自然语言问答。

📈 变更历史: 请查看 CHANGELOG 以了解版本历史、改进和错误修复。

💬 社区

🐛 发现错误或有任何功能请求? 在 GitHub 上 提交问题

💭 需要帮助或想要讨论?GitHub Discussions 中开启一个线程。

🤝 贡献

我们欢迎社区的贡献——无论是修复拼写错误还是开发完全新功能!

📋 开始: 查看我们的 贡献者指南

🤖 对 AI 智能体友好

此仓库遵循现代开发实践,并提供对 AI 编码助手的一流支持:

这些文件为 AI 助手提供特定于项目的上下文、编码约定、架构模式和贡献工作流程——从而实现更准确和一致的 AI 辅助开发。

🔐 安全

本项目使用多种安全工具自动扫描安全漏洞:

  • CodeQL - GitHub 的语义代码分析引擎,用于漏洞检测
  • Bandit - Python 安全 linter(代码检查器),用于常见安全问题
  • Snyk - 依赖项漏洞监控(按需使用)

🛡️ 安全策略: 详细信息请参见 SECURITY 文件。

💖 致谢

ContextGem 依赖于这些优秀的开源包:

  • aiolimiter: 用于异步操作的强大速率限制
  • colorlog: Python 日志模块的彩色格式化器
  • docstring-parser: 用于自动生成工具架构的文档字符串解析
  • fastjsonschema: 超快速的 JSON 架构验证
  • genai-prices: LLM(大型语言模型)定价数据和实用工具(由 Pydantic 提供),用于自动估算成本
  • Jinja2: 用于提示词渲染的快速、表达力强且可扩展的模板引擎
  • litellm: 多个 LLM 提供商的统一接口,支持无缝切换提供商
  • lxml: 用于解析 DOCX 文档结构的高性能 XML 处理库
  • pillow: 用于本地模型图像处理的图像处理库
  • pydantic: 数据验证的黄金标准
  • python-ulid: 用于唯一对象标识的高效 ULID 生成
  • tenacity: Python 通用重试库
  • typing-extensions: 最新类型特性的向后移植版本,用于增强类型注解
  • wtpsplit-lite: wtpsplit 的轻量级版本,使用 wtpsplit 的 SaT 模型进行最先进的段落/句子分割

🌱 支持项目

ContextGem 才刚刚开始,您的支持对我们意义重大!

⭐ 如果您觉得 ContextGem 有用,请给项目加星
📢 分享给可能受益的其他人
🔧 通过反馈、问题报告或代码改进来贡献

您的参与是这个项目成长的关键!

📄 许可证与联系方式

许可证: Apache 2.0 许可证 - 详见 LICENSENOTICE 文件。

版权: © 2025 Shcherbak AI AS — 企业人工智能工程。我们构建改变企业运营方式的 AI 智能体。

联系: 如有疑问或合作想法,请联系 LinkedInX

在挪威奥斯陆用心打造。

📦 Shcherbak AI 更多产品

包名 描述
tethered PyPI License: MIT Python 运行时网络出口控制。一次函数调用即可阻止所有未经授权的出站连接——零依赖,无需更改基础设施。适用于供应链防御、AI 智能体护栏和测试隔离。

版本历史

v0.18.02025/09/01
v0.17.12025/08/26
v0.17.02025/08/24
v0.16.12025/08/19
v0.16.02025/08/19
v0.15.02025/08/13
v0.14.42025/08/08
v0.14.32025/08/07
v0.14.22025/08/06
v0.14.12025/08/05
v0.14.02025/08/02
v0.13.02025/07/29
v0.22.02026/03/16
v0.21.02026/02/22
v0.20.02026/02/22
v0.19.42025/12/19
v0.19.32025/11/16
v0.19.22025/09/30
v0.19.12025/09/19
v0.19.02025/09/09

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架