compel
Compel 是一款专为基于 Transformer 架构的文本嵌入系统(如 Stable Diffusion)设计的提示词增强库。它主要解决了用户在生成式 AI 创作中难以精准控制画面细节的痛点:传统提示词往往对所有词汇一视同仁,而 Compel 允许用户通过简单直观的语法(例如在词语后添加"+"号),灵活调整提示句中特定部分的权重。这意味着你可以轻松强调"ball++"让球体更突出,或弱化背景干扰,从而更精确地引导图像生成结果。
该工具特别适合开发者、AI 研究人员以及希望深入掌控生成效果的高级创作者使用。虽然普通用户也能受益,但其核心价值在于为需要编程集成或批量处理提示词的场景提供技术支持。Compel 的技术亮点在于其高度兼容性,不仅完美适配 Hugging Face Diffusers 库中的 Stable Diffusion 及 SDXL 模型,还支持正负提示词的加权处理与批量生成。它源自 InvokeAI 项目的核心代码,经过优化后提供了更灵活的 API,让用户无需修改底层扩散循环,即可通过简单的 Python 调用实现复杂的注意力控制,显著提升创作效率与成品质量。
使用场景
一位数字艺术家正在使用 Stable Diffusion 创作一系列商业海报,需要精准控制画面中特定元素(如产品主体)的视觉权重,同时保持背景氛围的自然协调。
没有 compel 时
- 难以通过自然语言强调重点,反复修改提示词措辞(如重复“一个巨大的球”)往往导致语句不通顺或引发模型误解。
- 调整元素权重依赖复杂的括号语法
(word:1.5),不仅记忆成本高,且在长提示词中极易因括号嵌套错误导致生成失败。 - 无法对同一批次中的不同图片进行差异化权重设置,批量生成时只能牺牲个性化需求以换取效率。
- 在 SDXL 等双编码器架构下,手动处理正向与负向提示词的张量对齐极其繁琐,容易引发维度不匹配报错。
使用 compel 后
- 支持直观的
++或--语法直接增减权重(如ball++),让艺术家能像调节音量一样微调画面元素的显著性。 - 自动解析并构建正确的嵌入张量,彻底消除手动计算权重系数和检查括号匹配的痛苦,大幅降低试错成本。
- 原生支持列表化批量处理,可为一组提示词分别定义独立的权重策略,轻松实现“同背景、不同主体强调”的多样化输出。
- 针对 SDXL 架构自动管理复杂的
pooled_embeds与常规嵌入,开发者只需关注创意描述,无需深究底层张量结构。
compel 将晦涩的向量权重调控转化为简单的文本标记,让创作者从繁琐的代码调试中解放,真正专注于视觉创意的精细打磨。
运行环境要求
- Linux
- macOS
- Windows
- 非必需(支持 CPU),但推荐 NVIDIA GPU 以加速生成
- 示例中使用了 CUDA ('cuda') 和 Apple MPS ('mps')
- 显存大小取决于所加载的扩散模型(如 SDXL 或 Flux),通常建议 8GB+
- CUDA 版本未说明
未说明(取决于具体扩散模型的大小,运行 SDXL 或 Flux 时建议 16GB+)

快速开始
Compel
由 @damian0815 开发的、用于 Transformer 类文本嵌入系统的文本提示加权与混合库。
借助灵活直观的语法,你可以对提示字符串的不同部分进行重新加权,从而调整由此字符串生成的嵌入张量中各部分的权重。
该库已在 Hugging Face 的 StableDiffusionPipeline 上进行了测试和开发,但理论上也适用于任何基于 diffusers 并使用某种 Tokenizer 和 Text Encoder 的系统。
本库改编自 InvokeAI 的提示编写代码(同样由 @damian0815 编写)。
需要注意的是,当前 Compel 会忽略交叉注意力控制 .swap(),不过你也可以通过自行调用 build_conditioning_tensor_for_prompt_object() 方法,并在扩散循环中实现交叉注意力控制来使用它。
安装
pip install compel
文档
文档请见 这里。
演示
快速入门
使用 Hugging Face diffusers >=0.12:
from diffusers import StableDiffusionPipeline
from compel import CompelForSD
pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
compel = CompelForSD(pipeline)
# 加强“ball”的权重
prompt = "a cat playing with a ball++ in the forest"
conditioning = compel(prompt)
# 生成图像
images = pipeline(prompt_embeds=conditioning.embeds, num_inference_steps=20).images
images[0].save("image.jpg")
使用负面提示:
from diffusers import StableDiffusionPipeline
from compel import CompelForSD
pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
compel = CompelForSD(pipeline)
# 加强“ball”的权重
prompt = "a cat playing with a ball++ in the forest"
negative_prompt = "blurry, low quality, deformed"
conditioning = compel(prompt, negative_prompt=negative_prompt)
# 生成图像
images = pipeline(prompt_embeds=conditioning.embeds, negative_prompt_embed=conditioning.negative_embeds, num_inference_steps=20).images
images[0].save("image.jpg")
批量处理:
from diffusers import StableDiffusionPipeline
from compel import CompelForSD
pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
compel = CompelForSD(pipeline)
prompt = ["a cat playing with a ball++ in the forest", "a dog wearing a hat++"]
negative_prompt = ["blurry, low quality, deformed", "painting"]
# 或者:negative_prompt = "blurry, low quality, deformed" # 共享给所有生成的图像
conditioning = compel(prompt, negative_prompt=negative_prompt)
# 生成图像
images = pipeline(prompt_embeds=conditioning.embeds, negative_prompt_embed=conditioning.negative_embeds, num_inference_steps=20).images
images[0].save("image.jpg")
SDXL:
from diffusers import DiffusionPipeline
from compel import CompelForSDXL
import torch
device = 'cuda'
pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", variant="fp16",
use_safetensors=True, torch_dtype=torch.float16).to(device)
prompt = "a cat playing with a ball++ in the forest"
negative_prompt = "low quality, blurry"
compel = CompelForSDXL(pipeline)
conditioning = compel(prompt, negative_prompt=negative_prompt)
generator = torch.Generator().manual_seed(42)
image = pipeline(prompt_embeds=conditioning.embeds,
pooled_prompt_embeds=conditioning.pooled_embeds,
negative_prompt_embeds=conditioning.negative_embeds,
negative_pooled_prompt_embeds=conditioning.negative_pooled_embeds,
num_inference_steps=25, width=1024, height=1024, generator=generator).images[0]
image.save('sdxl_image.jpg')
Flux
from diffusers import FluxPipeline
from compel import CompelForFlux
import torch
device = "mps"
pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=torch.float32).to(device) # bfloat16 在 MPS 上会导致 NaN
compel = CompelForFlux(pipe)
prompt = "Astronaut---- in a jungle++++, cold color palette, muted colors, detailed, 8k"
conditioning = compel(prompt)
generator = torch.Generator().manual_seed(42)
images = pipe(prompt_embeds=conditioning.embeds, pooled_prompt_embeds=conditioning.pooled_embeds,
num_inference_steps=4, width=512, height=512, generator=generator)
风格提示
适用于 SDXL 或 Flux:
from diffusers import DiffusionPipeline
from compel import CompelForSDXL
import torch
device = 'cuda'
pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", variant="fp16",
use_safetensors=True, torch_dtype=torch.float16).to(device)
prompt = "a cat playing with a ball++ in the forest"
style_prompt = "painting by van gogh, impasto, thick brush strokes"
negative_prompt = "low quality, blurry"
negative_style_prompt = "photography"
compel = CompelForSDXL(pipeline) # 或 CompelForFlux
conditioning = compel(prompt=prompt, negative_prompt=negative_prompt,
style_prompt=style_prompt, negative_style_prompt=negative_style_prompt)
generator = torch.Generator().manual_seed(42)
image = pipeline(prompt_embeds=conditioning.embeds,
pooled_prompt_embeds=conditioning.pooled_embeds,
negative_prompt_embeds=conditioning.negative_embeds,
negative_pooled_prompt_embeds=conditioning.negative_pooled_embeds,
num_inference_steps=25, width=1024, height=1024, generator=generator).images[0]
image.save('sdxl_image.jpg')
文本反转支持
如果你想使用 🤗diffusers 的文本反转功能,请实例化一个 DiffusersTextualInversionManager,并在初始化 Compel 时传入:
from diffusers import StableDiffusionPipeline
from compel import CompelForSD, DiffusersTextualInversionManager
pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
textual_inversion_manager = DiffusersTextualInversionManager(pipeline)
compel = CompelForSD(pipe=pipeline, textual_inversion_manager=textual_inversion_manager)
内存使用/显存泄漏
如果遇到内存问题,请确保在 with torch.no_grad(): 块中运行 Compel。
如果这样仍无法解决问题,可以尝试 @kshieh1 提供的建议:
图像生成后,应显式地解除对张量对象的引用(即 prompt_embeds = None),并调用 gc.collect()。
更多详情请参阅 https://github.com/damian0815/compel/issues/24。感谢 @kshieh1!
更改记录
2.3.1 - 修复 SDXL 中 78 个 token / 77 个 token 的问题;为 CompelFor* 构造函数添加 device 参数(感谢 @dx2-66)
2.3.0 - 分词信息、SplitLongTextMode 中 CLS 令牌处理、负向/风格提示错误修复
CompelFor*对象现在通过conditioning.tokenization_info字典返回分词信息,该字典包含main_positive和(在适用时)main_negative、style_positive和style_negative键。SplitLongTextMode枚举新增了处理 CLS(EOS)令牌的选项——CLS 令牌可以从第一个分块复制到后续分块,或者将所有 CLS 令牌合并后在所有分块上重复。详情请参阅SplitLongTextMode枚举。- 针对 SDXL/Flux 处理不同组合的风格提示和负向提示的一些边缘情况进行了修复。
2.2.1 - 修复 #116 问题
2.2.0 - 支持 Flux,提升易用性
- 现已支持 Flux。
- 新增
CompelForSD、CompelForFlux和CompelForSDXL,以简化并优化嵌入与池化嵌入、负向提示以及风格提示的处理。使用示例请参见compel-demo-*.py/.ipynb。 - 在处理非加权提示时性能有所提升。如果传递的提示未加权重,则会完全跳过加权逻辑。这可能会略微改变未加权时的输出结果——可通过调用
compel.disable_no_weights_bypass()恢复旧版较慢的行为。 - 使用
CompelForSD和CompelForSDXL类时,非截断现为默认设置。
2.1.1 - 将 split_long_text_mode 暴露至顶层 Compel,默认值设为 SENTENCES,修复有时分割会失败的 bug。
2.1.0 - 添加 split_long_text_mode 参数,用于在 truncate_long_prompts 为 False 时控制长提示的分词方式。详见 SplitLongTextMode。默认值为 WORDS。
2.0.3 - 包含贡献的修复 #64、#80,并修复 pyproject.toml/pypi 中的许可证问题。
2.0.2 - 修复 SDXL 模型配合 pipeline.enable_sequential_cpu_offloading() 使用时的问题(需在初始化 Compel 时传入 device='cuda')。
2.0.1 - 修复 #45 关于 SDXL 非截断提示及 .and() 方法的填充问题。
2.0.0 - 支持 SDXL
特别感谢 Hugging Face 的 Patrick von Platen 提供的 拉取请求,Compel 现已支持 SDXL。使用方法如下:
from compel import Compel, ReturnedEmbeddingsType
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", use_safetensors=True, torch_dtype=torch.float16).to("cuda")
compel = Compel(tokenizer=[pipeline.tokenizer, pipeline.tokenizer_2] , text_encoder=[pipeline.text_encoder, pipeline.text_encoder_2], returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, requires_pooled=[False, True])
# 提升“ball”的权重
prompt = "a cat playing with a ball++ in the forest"
conditioning, pooled = compel(prompt)
# 生成图像
image = pipeline(prompt_embeds=conditioning, pooled_prompt_embeds=pooled, num_inference_steps=30).images[0]
请注意,如果您一直使用 clip skip 功能,此次更新属于破坏性变更:旧的布尔型参数 use_penultimate_clip_layer 已被枚举类型 ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NORMALIZED 所取代。
1.2.1 - 正确应用 .and() 权重
1.2.0 - 使用 .and() 连接嵌入
对于 Stable Diffusion 2.1,我一直在尝试一项新功能:连接嵌入。我发现,例如,当提示词较为复杂时,如果将提示词拆分成多个部分并分别输入到 OpenCLIP 中,生成图像的质量会显著提升。
简而言之:现在你可以尝试将提示词拆分成若干段,这对 SD2.1 来说似乎能改善生成的图像质量。语法是 ("prompt part 1", "prompt part 2").and()。你也可以有超过两个部分,并且可以为它们设置权重,比如 ("a man eating an apple", "sitting on the roof of a car", "high quality, trending on artstation, 8K UHD").and(1, 0.5, 0.5),这会为 man eating an apple 分配权重 1,而为 sitting on the roof of a car 和 high quality, trending on artstation, 8K UHD 各分配权重 0.5。
这里有一个来自 InvokeAI Discord #garbage-bin 频道的无厘头例子,由 gogurt enjoyer 的超赞 噩梦提示词生成器 创作:
a moist sloppy pindlesackboy sloppy hamblin' bogomadong, Clem Fandango is pissed-off, Wario's Woods in background, making a noise like ga-woink-a
直接将这个提示词输入 SD2.1,得到的结果并不理想:

然而,如果将提示词拆分成几块,分别作为四个独立的提示词输入 OpenCLIP,然后再进行连接:
a moist sloppy pindlesackboy sloppy hamblin' bogomadong
Clem Fandango is pissed-off
Wario's Woods in background
making a noise like ga-woink-a
那么使用相同种子生成的图像就会好很多:

在新的 .and() 语法中,你可以这样写提示词:
("a moist sloppy pindlesackboy sloppy hamblin' bogomadong", "Clem Fandango is pissed-off", "Wario's Woods in background", "making a noise like ga-woink-a").and()
这种效果有时可能不太明显。例如,以下是一个例子:
A dream of a distant galaxy, by Caspar David Friedrich, matte painting, trending on artstation, HQ

而将其拆分为两部分:
A dream of a distant galaxy, by Caspar David Friedrich, matte painting
trending on artstation, HQ

对应的 Compel 提示词是:
("A dream of a distant galaxy, by Caspar David Friedrich, matte painting", "trending on artstation, HQ").and()
1.1.6 - 其他小修复
- 添加
DiffusersTextualInversionManager(感谢 @pdoane) - 修复批处理嵌入生成时提示词长度截断或未截断的问题(#18,感谢 @abassino)
- 增加关于内存泄漏的说明(ref #24,感谢 @kshieh1)
- 修复逗号后没有空格时解析错误的问题(#34,感谢 @moono)
1.1.5 - 修复 Compel 将括号内的数字转换为浮点数的问题
1.1.4 - 修复 #23(顺序卸载)和 InvokeAI 问题 #3442(允许 LoRA 名称中包含连字符)的相关问题
1.1.3 - 支持获取倒数第二层 CLIP 隐藏层(即“clip skip”)
要使用,请在初始化 Compel 实例时传入 use_penultimate_clip_layer=True。请注意,对于 SD2.0/SD2.1,无需传递此标志,因为 diffusers 在加载 SD2.0 及以上版本的文本编码器时已经会丢弃最后一层隐藏层。
1.1.2 - 修复 #21(启用截断时解析长提示词,若存在超出截断边界的加权片段,则会导致崩溃)的问题
1.1.1 - 修复 #22(解析括号内 . 字符时出现问题)的问题
1.1.0 - 支持在 parse_prompt_string() 中解析 withLora/useLora
Compel.parse_prompt_string()现在会返回一个Conjunction- 提示词字符串中任何出现的
withLora(name[, weight])或useLora(name[, weight])都会被解析为LoraWeight实例,并在parse_prompt_string()返回的最外层Conjunction中体现出来。
1.0.5 - 修复输入无效(auto1111)语法中的浮点数时的解析错误
同时修复默认交换参数的测试用例
1.0.4 - 修复禁用截断时空交换目标(如 cat.swap(""))的嵌入问题
1.0.3 - 改进 .swap 的默认行为(https://github.com/damian0815/compel/issues/8)
1.0.2 - 修复非截断批量嵌入的填充问题(https://github.com/damian0815/compel/issues/9)
1.0.1 - 修复 InvokeAI 的 --free_gpu_mem 选项问题
1.0.0 - 新的降权算法
现在的降权机制是通过应用注意力掩码来移除被降权的标记,而不是直接从序列中删除它们。这是默认行为,但可以通过在初始化 Compel 实例时传入 downweight_mode=DownweightMode.REMOVE 来恢复旧的行为。
过去,降权一个标记的做法是同时乘以该标记嵌入的权重,并与一个移除了被降权标记的标记序列副本进行反向加权混合。其背后的直觉是:当权重趋近于零时,被降权的标记应该真正从序列中移除。然而,移除这些标记会导致所有后续标记的位置错乱,最终混合的效果远远超出了原本需要处理的标记范围。
自 v1.0.0 起,根据 @keturn 和 @bonlime 的建议(https://github.com/damian0815/compel/issues/7),默认的处理方式发生了变化。降权仍然涉及混合操作,但现在混合的是一个将被降权标记屏蔽掉的标记序列版本,而不是直接移除它们。这样可以正确地保留其他标记的嵌入位置。
此外还修复了一个 bug:解决了权重为 0 时生成黑色图像的问题(https://github.com/invoke-ai/InvokeAI/issues/2832)
0.1.10 - 添加对超过模型最大标记长度的提示的支持。
要启用此功能,请使用 truncate_long_prompts=False 初始化 Compel(默认值为 True)。超过模型 max_token_length 的提示将被分块,并填充到 max_token_length 的整数倍。
请注意,即使您不使用负面提示,也需要为至少包含空字符串 "" 的负面提示构建条件张量,并调用 compel.pad_conditioning_tensors_to_same_length(),否则会因条件张量长度不匹配而报错:
compel = Compel(..., truncate_long_prompts=False)
prompt = "一只猫在森林里玩球++,惊艳、精致、令人惊叹、杰作、技艺高超、强大、不可思议、精彩、在 gregstation 上热门,格雷格、格雷吉、格雷格森、麦克格雷夫的格雷吉……" # 非常长的提示
conditioning = compel.build_conditioning_tensor(prompt)
negative_prompt = "" # 必须创建一个空提示——如果您愿意,它也可以很长
negative_conditioning = compel.build_conditioning_tensor(negative_prompt)
[conditioning, negative_conditioning] = compel.pad_conditioning_tensors_to_same_length([conditioning, negative_conditioning])
0.1.9 - 已损坏
0.1.8 - 将 Python 最低版本降级至 3.7
0.1.7 - 兼容 InvokeAI
版本历史
v2.3.12025/11/02v2.3.02025/10/05v2.2.12025/10/012.2.02025/10/012.1.12025/05/172.1.02025/05/11v2.0.22023/08/20常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备