结构化输出
less than a minute
结构化输出在NodeRAG中的挑战
NodeRAG高度依赖于将长文本分解为结构化提示以进行进一步处理。具体来说,它依赖于从较长文本输入中持续生成结构化JSON输出的能力。一方面,我们需要系统在复杂、延伸的任务中保持适当的格式。为实现这一点,我们的项目最初依赖于OpenAI的结构化输出功能(文档在此)。借此,模型可靠地将文本块分解为异构节点,使下游处理变得顺畅高效。
然而,当我们尝试扩展到其他模型时,遇到了一些障碍。例如,OpenAI的结构输出失败(即输出不遵循预期的JSON格式)发生率不到1%——相当稳定。但当我们尝试Gemini 2.0 Flash时,这一失败率跃升至约20%。更糟的是,使用DeepSeek的官方JSON输出时,近60%的API响应忽略了规定的格式,这使得错误处理几乎不可能。
由于这些问题,在v0.1.0版本中,我们仅支持OpenAI和Gemini用于结构化输出任务。

图1. OpenAI GPT-4o-mini — 高度可靠的JSON输出

图2. Gemini 2.0 Flash — 可接受的格式,但内容质量较低
话虽如此,尽管Gemini比DeepSeek更常能坚持格式,我们注意到其输出的质量存在问题——例如重复短语、多余空格,以及与OpenAI的GPT-4o-mini相比整体保真度较低的内容。
我们的建议
到目前为止,我们建议在NodeRAG中使用OpenAI的模型,特别是对于需要一致结构化输出的任务。我们将继续评估其他模型的结构化输出能力,看它们是否最终能适应NodeRAG流程。
展望未来
我们对未来一个令人兴奋的方向是:专门为NodeRAG文本到节点分解步骤进行微调轻量级模型。这项任务本质上是摘要和改述的混合,所以相对直接。挑战在于在长文本输入上保持稳定的结构化输出。
一旦文本被分解为结构化节点,我们可以使用更强大的模型从图中提取更高层次的见解和观点总结。