企业合同 AIGC 生成 + 区块链存证:智能合约化的工作流
2026/7/24 14:37:56 网站建设 项目流程

企业合同 AIGC 生成 + 区块链存证:智能合约化的工作流

一、"合同模板 + 填空"式生成,法务审到怀疑人生

企业合同的生成和管理是一个极度依赖模板和人工审核的流程。一个典型的合同签署流程:销售填模板 → 法务审核 → 修改 → 再审核 → 双方签字 → 扫描归档。这个过程平均耗时 3-5 个工作日。而且因为合同以 PDF 形式存储在共享文件夹中,事后查找某个条款的历史版本几乎不可能。

AIGC + 区块链的组合可以解决两个问题:AIGC 负责智能生成(根据交易背景自动起草条款,减少人工填充),区块链负责存证(合同哈希上链,防止事后篡改)。但这套方案的关键不是技术本身,而是如何将"人审核"的环节嵌入自动化的流程中。

二、智能合约化的工作流架构

核心设计是"生成-审核-签署-存证"的闭环:

每一个状态变更都在链上留下记录:合同生成的时间、法务审核的结果、签署的时间点——这些构成了完整的合规证据链。

三、Python 实现:合同 AIGC 生成 + 上链存证

import hashlib import json import time from enum import Enum from dataclasses import dataclass, asdict, field from typing import List, Dict, Optional, Any from datetime import datetime class ContractStatus(Enum): """合同状态""" DRAFT = "draft" # 草稿 LEGAL_REVIEW = "legal_review" # 法务审核中 PENDING_SIGN = "pending_sign"# 待签署 SIGNED = "signed" # 已签署 ARCHIVED = "archived" # 已归档 @dataclass class ContractElement: """合同要素""" party_a: str # 甲方 party_b: str # 乙方 amount: float # 合同金额 currency: str = "CNY" service_scope: str = "" # 服务内容 start_date: str = "" # 合同开始日期 YYYY-MM-DD end_date: str = "" # 合同结束日期 payment_terms: str = "" # 付款条件 special_clauses: List[str] = field(default_factory=list) @dataclass class ContractRecord: """合同链上记录""" contract_id: str status: ContractStatus content_hash: str # 合同内容哈希 created_at: int # Unix 时间戳 legal_reviewed_at: Optional[int] = None legal_reviewer: Optional[str] = None legal_approved: bool = False signed_at: Optional[int] = None signer_a_hash: Optional[str] = None # 甲方签名哈希 signer_b_hash: Optional[str] = None # 乙方签名哈希 class ContractChain: """简化版区块链(实际项目对接联盟链)""" def __init__(self): self._records: Dict[str, List[ContractRecord]] = {} def store(self, contract_id: str, record: ContractRecord) -> bool: """存证一条合同状态变更""" if contract_id not in self._records: self._records[contract_id] = [] self._records[contract_id].append(record) return True def query(self, contract_id: str) -> List[ContractRecord]: """查询合同全生命周期记录""" return self._records.get(contract_id, []) def verify(self, contract_id: str, content_hash: str) -> bool: """验证合同哈希是否与链上一致""" records = self.query(contract_id) if not records: return False # 检查最新的 SIGNED 状态记录的哈希 for record in reversed(records): if record.status == ContractStatus.SIGNED: return record.content_hash == content_hash return False class ContractGenerator: """AIGC 合同生成器""" TEMPLATES = { "service": """ # 服务合同 甲方:{party_a} 乙方:{party_b} ## 一、服务内容与范围 {service_scope} ## 二、合同期限 自 {start_date} 至 {end_date} ## 三、合同金额与支付方式 合同总金额:{amount:,.2f} {currency} 支付方式:{payment_terms} ## 四、双方权利与义务 1. 甲方应按约定时间支付合同款项 2. 乙方应按约定的服务质量标准完成服务 3. 任何一方变更合同内容需提前 15 个工作日书面通知对方 ## 五、违约责任 1. 甲方逾期付款,每逾期一日按未付款项的 0.05% 支付违约金 2. 乙方未按约定完成服务,应承担相应的赔偿责任 ## 六、争议解决 双方协商不成的,提交合同签订地人民法院裁决 ## 七、其他 {special_clauses_text} """.strip() } def __init__(self): self.chain = ContractChain() def generate_contract( self, elements: ContractElement, contract_type: str = "service" ) -> Dict[str, Any]: """生成合同 + 存证""" if elements.amount <= 0: raise ValueError("合同金额必须大于 0") if not elements.party_a or not elements.party_b: raise ValueError("甲乙双方名称不能为空") template = self.TEMPLATES.get(contract_type) if template is None: raise ValueError(f"不支持的合同类型: {contract_type}") # 组装特殊条款 special_text = "\n".join( f" {i+1}. {clause}" for i, clause in enumerate(elements.special_clauses) ) if elements.special_clauses else " 无" # 填充模板 contract_text = template.format( party_a=elements.party_a, party_b=elements.party_b, amount=elements.amount, currency=elements.currency, service_scope=elements.service_scope or "详见附件", start_date=elements.start_date or "合同签订之日", end_date=elements.end_date or "服务完成之日", payment_terms=elements.payment_terms or "按约定支付", special_clauses_text=special_text, ) # 生成合同 ID contract_id = self._generate_id(elements) # 计算哈希 content_hash = self._compute_hash(contract_text) # AIGC 合规检查 warnings = self._compliance_check(elements, contract_text) # 上链存证(DRAFT 状态) record = ContractRecord( contract_id=contract_id, status=ContractStatus.DRAFT, content_hash=content_hash, created_at=int(time.time()), ) self.chain.store(contract_id, record) return { 'contract_id': contract_id, 'contract_text': contract_text, 'content_hash': content_hash, 'compliance_warnings': warnings, 'status': ContractStatus.DRAFT.value, 'tx_id': f"tx_{int(time.time()):08d}", } def legal_review( self, contract_id: str, reviewer: str, approved: bool ) -> bool: """法务审核存证""" record = ContractRecord( contract_id=contract_id, status=ContractStatus.LEGAL_REVIEW, content_hash="", # 审核不改变内容,沿用之前哈希 created_at=int(time.time()), legal_reviewed_at=int(time.time()), legal_reviewer=reviewer, legal_approved=approved, ) self.chain.store(contract_id, record) return True def record_signature( self, contract_id: str, signer: str, contract_text: str, ) -> Dict[str, Any]: """签署存证""" # 模拟数字签名 signer_hash = self._compute_hash( f"{signer}_{contract_text}_{time.time()}" ) content_hash = self._compute_hash(contract_text) record = ContractRecord( contract_id=contract_id, status=ContractStatus.SIGNED, content_hash=content_hash, created_at=int(time.time()), signed_at=int(time.time()), signer_a_hash=signer_hash if "甲" in signer else None, signer_b_hash=signer_hash if "乙" in signer else None, ) self.chain.store(contract_id, record) return { 'contract_id': contract_id, 'signed_at': datetime.now().isoformat(), 'signer': signer, 'content_hash': content_hash, 'verified': self.chain.verify( contract_id, content_hash ), } def verify_contract( self, contract_id: str, contract_text: str ) -> Dict[str, Any]: """验证合同完整性""" current_hash = self._compute_hash(contract_text) chain_records = self.chain.query(contract_id) if not chain_records: return { 'verified': False, 'reason': '链上未找到该合同记录', } # 获取最近的签署记录 signed_record = None for record in reversed(chain_records): if record.status == ContractStatus.SIGNED: signed_record = record break if signed_record is None: return { 'verified': False, 'reason': '合同尚未签署', 'lifecycle': [ {'status': r.status.value, 'time': r.created_at} for r in chain_records ], } verified = signed_record.content_hash == current_hash return { 'verified': verified, 'current_hash': current_hash, 'chain_hash': signed_record.content_hash, 'lifecycle': [ { 'status': r.status.value, 'time': datetime.fromtimestamp( r.created_at ).isoformat(), 'reviewer': r.legal_reviewer, } for r in chain_records ] if verified else [], } def _compliance_check( self, elements: ContractElement, text: str ) -> List[str]: """合规性检查""" warnings = [] # 金额异常检查 if elements.amount < 1000: warnings.append("合同金额较低,建议确认是否为测试合同") if elements.amount > 10000000: warnings.append("合同金额超过 1000 万,建议高级法务审核") # 关键条款缺失检查 if not elements.payment_terms: warnings.append("未填写付款条件,建议补充") if not elements.start_date: warnings.append("未指定合同开始日期,将使用默认值") return warnings @staticmethod def _compute_hash(content: str) -> str: return hashlib.sha256(content.encode('utf-8')).hexdigest() @staticmethod def _generate_id(elements: ContractElement) -> str: raw = f"{elements.party_a}{elements.party_b}{time.time()}" return f"CONTRACT-{hashlib.md5(raw.encode()).hexdigest()[:12].upper()}"

四、边界分析与 Trade-offs

AIGC 生成 vs 人工审核的边界:AI 可以生成合同的 80%——标准条款、金额、日期、双方信息。但剩余 20% 的关键条款(违约责任、知识产权归属、保密条款)必须人审。AIGC 应做一个"条款风险提示"功能——对每个自动生成的条款打风险分(如违约金比例高于行业标准 2 倍 → 高风险提示),辅助法务快速定位需要重点看的段落。

区块链上存什么、不存什么:只存哈希 + 时间戳 + 签名,不存合同原文。合同原文可能包含商业机密,不适合公开上链。验证时,用户本地持有合同文件,重新计算哈希与链上比对即可。这种方案既满足存证需求,又保护商业隐私。

合同模板的版本管理:AIGC 依赖模板,模板一旦更新(如法律条款调整),之前用旧模板生成的合同和之后用新模板生成的合同可能不一致。模板应该版本化管理(v1.0/v2.0),链上存证时附带模板版本号,方便事后追溯"当时的条款依据是什么版本的模板"。

多签流程的并发:甲方和乙方可能同时签署,链上存证需要处理并发写入。可以使用乐观锁——只有当 contracts 最新状态是 PENDING_SIGN 时才写入 SIGNED。如果状态已被对方修改(如一方签约后另一方拒绝),需要回滚处理。

五、总结

"合同 AIGC 生成 + 区块链存证"的工程价值不在于"替代法务",而在于"加速非关键环节,聚焦人工审核在关键条款上"。AIGC 负责模板填充(80% 标准内容),法务负责风险审核(20% 关键条款),区块链负责全链路存证(生成、审核、签署三个阶段全部上链)。代码实现上,合同的哈希计算要覆盖完整内容(不能只算模板部分),链上不存原文但存模板版本号,验证链路从"当前内容哈希 → 链上记录"两个点比对。这个方案在新合同法的框架下为电子合同提供了可验证的"原件"证明。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询