
**AI合同审查(AI Contract Review)**指用 AI 自动审阅、提取和生成合同文档,例如从协议中抽取当事方与付款条款、标出异常条款,或基于模板批量产出合同。用 C# 进行 AI 合同审查,则是把这种语言理解与文档处理能力结合进 .NET 应用,让开发者用自然语言描述任务即可完成上述流程,而不必为每个模板编写字段映射与排版代码。在实践层面,就是用一条自然语言指令替代字段匹配代码,实现合同处理自动化。Spire.Agent.Office 是一款文档 AI 智能体(AI Agent)SDK,负责语言理解;其下的确定性文档层保证输出真实、格式正确的 Word 与 PDF 文件。
快速导航
- 为什么合同审查适合 AI
- AI 合同智能体能做什么、不能做什么
- 常见的合同自动化场景
- .NET 中实现合同处理自动化的三种方式
- 完整示例:用 C# 审阅和生成合同
- 为什么用 Spire.Agent.Office 做 AI 合同自动化
- 常见问题
1. 为什么合同审查适合 AI
在开发者的世界里,合同工作可以拆成三种重复劳动:阅读(从以 PDF 和 Word 形式到达的协议中提取当事方、日期、付款条款和履约义务)、核查(识别缺失条款或异常措辞)、产出(把一批员工或供应商名单变成可签署的合同)。
对 .NET 开发者而言,难点不只是理解合同内容,而是把非结构化文档转成应用自己就能维护的结构化、可重复工作流。
三个特性使这类任务特别适合用语言模型而不是手写规则完成:
- 输入是非结构化的。 对方发来的合同格式各不相同。针对某一种排版写的规则,换一份文档就失效;而大语言模型能直接读文本。
- 输出是文档形态的。 交付物是格式正确的
.docx或.pdf,不是一段纯文本。这正是文档处理层能发挥作用的地方。 - 数量持续变化。 一个月入职 50 名员工,或审阅 200 份供应商协议,意味着需要配置化方案,而不是为每个模板重新编码。
实践中,审阅与生成总是结伴出现:团队既想汇总已有合同并标出异常,也想基于模板加结构化数据生成新合同。
2. AI 合同智能体能做什么、不能做什么
| 能做什么 | 不能做什么 |
|---|---|
| 提取当事方、生效日期、付款条款、履约义务 | 替代专业律师对高风险协议的法律审查 |
| 把冗长协议概括成一页简报 | 保证符合当地法律 |
| 基于模板 + 数据源批量生成合同 | 代替你谈判或接受条款 |
| 保持排版、表格样式与字体不变 | 不经复核就保证输出无误 |
| 在你的应用内运行(无需上传云端) | 解读新的或模糊的法规;转交法律顾问 |
| 标出相对标准协议的异常条款 | 识破刻意含糊的条款背后的隐藏风险 |
分工很清晰:智能体负责阅读、提取和起草的自动化(省去原本交给助理律师的工时),最终判断权仍在人类律师手里。这条边界既让工具可用,也让流程经得起审视。
3. 常见的合同自动化场景
合同自动化不止一种场景。同一个模式(一条指令 + 一个模板 + 可选数据)覆盖了团队搜索最多的几类场景:
| 场景 | 示例指令 |
|---|---|
| 供应商协议审阅 | "审阅这份供应商协议,标出与我们的标准条款不一致的付款条款、责任上限和终止条件。" |
| 员工合同生成 | "按 employees.xlsx 中的每一行,用该模板生成一份劳动合同,保持排版与样式。" |
| NDA 处理 | "概括这份保密协议:保密期限、允许披露的情形以及违约救济。" |
| 租赁协议分析 | "从这份租赁合同中提取租金、租期、续租选项和维护义务,并列出任何异常条款。" |
每个场景都是同一套架构:一条指令进,一份真实文档出。
4. .NET 中实现合同处理自动化的三种方式
| 实现方式 | 代码量 | 格式保真 | 维护成本 | 适用场景 |
|---|---|---|---|---|
| 文档 AI 智能体(LLM + 文档层) | 一条指令 + 约 10 行代码 | 高(真实 Word/PDF 文件) | 低(改指令即改行为) | 不想自建 LLM 管线的合同自动化团队 |
| 原生 LLM API(OpenAI/Claude + 自己的代码) | 高(提示词、解析、文件 I/O) | 低(LLM 不原生读写 Office 文件) | 高(RAG、路由、错误处理都要自己来) | 已有 LLM 技术栈的团队 |
| 传统 SDK(Spire.Office 或同类) | 每种文档类型几十行 | 高(确定性) | 高(每个映射都是代码) | 固定、规范、很少变更的文档 |
关键点:没有文档处理层的 LLM 无法编辑合同模板,没有自然语言理解能力的传统 SDK 无法理解自然语言请求。 文档 AI 智能体把两者结合了起来。
这并非否定传统路线。对固定、规范、极少变更的文档,确定性 SDK 常常是正确选择,Spire.Office 仍能满足这类需求。当模板、输入和需求变更频繁、重新编码成为瓶颈时,智能体才真正体现价值。
为什么只靠原生 LLM API 不够
直接调用 gpt-4 或 claude 让它"生成一份合同",在生产环境中会在三个方面出问题:
- 无法可靠读写 Office 文件。 LLM 看到的是文本,不是
.docx和.pdf的结构。读取 Word 模板、保持表格完整、产出有效 PDF,通常都需要另建一套提取与重建管线。 - 格式没有保障。 合同模板承载着对接收方至关重要的条款编号、表格和字体。原生 LLM 只返回文本,而丢掉的格式恰恰是法务和 HR 最在意的。
- 整个编排都要重新实现。 提示词设计、字段映射、错误处理、文件 I/O 和输出校验都变成你要维护的代码。
文档 AI 智能体把模型的语义理解与确定性的文档 API 结合:模型决定提取或填写什么,文档层保证文件真实且格式正确。这就是演示与可交付工作流的区别。
5. 完整示例:用 C# 审阅和生成合同
下面是法务和采购团队每周都会重复的任务:审阅新到的供应商协议,然后为审核通过的供应商签发合同。实现使用 Spire.Agent.Office for .NET:一个通过自然语言指令处理 Word、Excel、PowerPoint 和 PDF 文档的 AI 智能体。示例围绕该工作流设计而非照搬教程;官方集成入门与批量生成合同教程分步说明了 API 的搭建过程,本节重点讲 C# 集成模式。

1. 审阅本周到达的每一份协议。 只配置一次智能体,然后读取收件箱文件夹,让智能体把每份协议概括成可粘贴进审阅跟踪表的 Markdown 简报:
using System.IO;
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Doc;
using Spire.Pdf;
AIOptions agentOptions = new AIOptions();
agentOptions.WorkDir = @"C:\legal-ops\output";
agentOptions.SpireToken = spireToken;
string reviewPrompt =
"审阅这份供应商协议并写出 Markdown 简报:用一张单行表格列出当事方、" +
"生效日期、付款条款和终止条款,再用项目符号列出任何对标准供应商协议" +
"来说异常的条款,并把简报以 Markdown 格式保存到指定输出路径。";
Directory.CreateDirectory(@"C:\legal-ops\output");
foreach (string file in Directory.GetFiles(@"C:\legal-ops\inbox", "*.pdf"))
{
string briefPath = Path.Combine(
@"C:\legal-ops\output", Path.GetFileNameWithoutExtension(file) + ".md");
using (PdfDocument agreement = new PdfDocument())
{
agreement.LoadFromFile(file);
AIResult result = agreement.AI(agentOptions).ExecuteInstruction(
agreement, reviewPrompt, briefPath, new string[] { });
if (result == null || !result.Success)
{
throw new InvalidOperationException(
$"审阅失败 {Path.GetFileName(file)}: {result?.ErrorMessage}");
}
}
}
关键 API 调用
PdfDocument.LoadFromFile()-- 打开供应商协议 PDFagreement.AI(agentOptions)-- 挂载 AI 文档处理器ExecuteInstruction(doc, instruction, savePath, attachments)-- 执行审阅并写出 Markdown 简报AIResult.Success/AIResult.ErrorMessage-- 校验结果并暴露错误
输出结果

2. 为审核通过的供应商签发合同。 一个模板加一份审批名单。模板用 {{Placeholder}} 占位符承载供应商数据;输出路径传 null,智能体就会把每位供应商的独立 PDF 写进工作目录:
string[] attachments = { @"C:\legal-ops\data\approved-vendors.xlsx" };
using (Document contract = new Document())
{
contract.LoadFromFile(@"C:\legal-ops\templates\supplier-contract.docx");
AIResult result = contract.AI(agentOptions).ExecuteInstruction(
contract,
"为每位审核通过的供应商签发一份采购合同:逐行读取 approved-vendors.xlsx," +
"用每家供应商的数据填充本模板中的 {{Placeholder}} 占位符,保持模板的排版与样式," +
"并把每份合同另存为工作目录下的独立 PDF 文件。",
null, // 输出路径传 null -> 智能体将每份合同写入 WorkDir
attachments);
if (result == null || !result.Success)
{
throw new InvalidOperationException(
$"合同签发失败: {result?.ErrorMessage}");
}
}
关键 API 调用
Document.LoadFromFile()-- 加载合同模板contract.AI(agentOptions)-- 挂载 AI 文档处理器ExecuteInstruction(doc, instruction, savePath, attachments)-- 为每个供应商行签发一份独立合同AIResult.Success/AIResult.ErrorMessage-- 校验结果并暴露错误
输出结果
每份合同都会被写入智能体在 WorkDir 下管理的会话子文件夹(例如 output\.office_use_tmp\Word\<会话>\output_contracts),所以把 WorkDir 指向归档目录,再从该处收集签发的合同即可。

一个模板、一份电子表格、同一条指令驱动每一份合同,每份都保持原有格式。输出可保存为 PDF、DOCX、DOC、HTML、Markdown 或 XPS,以配合你的归档工作流。还可以构建比简单填字段更复杂的模板。官方生成多种 Word 模板教程覆盖了智能体可填充的占位符、条件章节等模板模式。
差别在哪:传统 SDK vs AI 智能体
传统 SDK 处理时,你需要手动定位每个 {{Placeholder}} 占位符并逐个替换,每个字段一行代码,把电子表格的每一列映射到对应占位符,再循环行记录、每行导出一份文件。每次模板或数据布局变化,你都要维护这几十行代码。下面的示意代码(为说明而简化)展示了这类工作的形态:
// 传统 SDK(示意):逐个定位并替换每个 {{Placeholder}} 占位符
// -- 每个字段一行代码
Document doc = new Document();
doc.LoadFromFile(@"C:\legal-ops\templates\supplier-contract.docx");
doc.Replace("{{SupplierName}}", vendor.SupplierName, false, true);
doc.Replace("{{Amount}}", vendor.Amount.ToString(), false, true);
doc.Replace("{{PaymentTerms}}", vendor.PaymentTerms, false, true);
doc.Replace("{{EffectiveDate}}", vendor.EffectiveDate.ToString("yyyy-MM-dd"), false, true);
doc.SaveToFile(@"C:\legal-ops\output\PO-001.pdf"); // ...每个供应商行重复一次
AI 智能体用一条指令替代上述编排:
contract.AI(agentOptions).ExecuteInstruction(
contract,
"为每位审核通过的供应商签发一份采购合同:逐行读取 approved-vendors.xlsx," +
"用每家供应商的数据填充本模板中的 {{Placeholder}} 占位符,保持模板的排版与样式," +
"并把每份合同另存为工作目录下的独立 PDF 文件。",
null,
attachments);
两者产出相同的合同。区别在于:SDK 为每个占位符增加一行 Replace、为每一列增加一段映射,而智能体把同样的工作收进一条指令。当模板或数据布局变化时,你改的是指令,而不是代码。

6. 为什么用 Spire.Agent.Office 做 AI 合同自动化
上面的三方对比刻意保持产品中立,同样的模式对任何够格的 LLM 都成立。Spire.Agent.Office 对 .NET 团队的价值集中在三方面:
- 原生 Office 文档处理。 Word、Excel、PowerPoint 和 PDF 是一等公民,而不是事后拼装的格式。智能体在四种格式之间读写真实文件。
- 格式保真。 企业合同承载着必须保留下来的条款编号、表格和字体。智能体的文档层能保持它们完整。在指令中加入"保持原文档排版与样式",输出就会忠于模板。
- 原生 .NET 集成。 它是能直接嵌入现有 .NET 应用的 C# SDK。无需另建或维护文档处理服务,也没有跨服务管线。上面的示例就是完整的集成面。
如果已经在用 Spire.Office 处理文档,智能体就是自然的下一层:同一个 Document 对象获得一个把指令变成已执行工作流的 AI() 处理器。
7. 常见问题
AI 合同审查能处理文本型 PDF 吗?
能。上面的审阅示例直接加载 supplier-agreement.pdf,智能体以原生格式读取并分析文档。支持标准与加密的文本型 PDF。纯图片扫描件没有可提取的文本层,需要先用 OCR 转成可搜索文本再进行审阅。
合同数据能留在我自己的环境里吗?
能,但有一个重要前提。Spire.Agent.Office 从你自己的应用运行,SDK、模板和文档处理都留在你的环境内,合同文件不会上传到第三方文档服务做存储或转换。要分析合同内容,AI 需要相关的文本,这部分文本会发送给模型处理,这是任何 AI 工作流固有的一步。如果你在自己的内网部署模型,内容就完全留在你的基础设施内;如果通过 OpenAI 或 Azure OpenAI 这类托管模型 API 接入,相关内容会按你的配置经网络发送给该服务商。
我可以用自己的 AI 模型吗?
可以。Spire.Agent.Office 支持灵活的 AI 模型集成,兼容主流 AI 基础设施,包括托管模型 API 和私有化部署的模型。你可以把智能体指向自己的端点。集成细节见集成教程;关于你的部署支持哪些服务商,请联系我们。
用哪个模型做合同审查?
Spire.Agent.Office 在 SpireToken 密钥背后连接一个大语言模型。你用自然语言描述审阅或生成任务,智能体编排底层的文档处理工具。模型负责语义理解,文档层负责格式与文件保真。
能批量生成合同吗?
能。一份合同模板加一个数据源(如 Excel 表),一条指令即可为数据表每一行产出一份合同,字段填充与占位符替换都支持。为保证智能体识别每一行,数据源首行保持为表头、每个供应商占一行、避免空行;如果生成的合同数量与数据行数不一致,先检查数据源。
AI 会改变我合同的格式吗?
只要你说不就不会。在指令中加入"保持原文档排版、样式和字体"即可;官方教程也记载了这个确切做法。
与直接用原生 LLM API 有何不同?
原生 LLM 无法可靠地自行读写 Word 和 PDF 文件,它需要一层文档处理能力。文档 AI 智能体把 LLM 的语义理解与确定性的文档 API 结合,因此输出是真实、格式正确的文件。
开始自动化你的合同工作流
合同审阅与批量生成是最快见效的两个切入点:一个模板、一个数据源、一条自然语言指令,输出真实可用的 Word 或 PDF 文件。跟随集成入门教程,在 .NET 中运行你的第一个文档工作流。
延伸阅读
- Spire.Agent.Office 产品概览 -- 面向每种 Office 文档格式的 AI 智能体 SDK
- 生成多种 Word 模板教程 -- 构建智能体可填充的模板







