企业合同 AIGC 生成 + 区块链存证:智能合约化的工作流
企业合同 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_factorylist) 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 {i1}. {clause} for i, clause in enumerate(elements.special_clauses) ) if elements.special_clauses else 无 # 填充模板 contract_text template.format( party_aelements.party_a, party_belements.party_b, amountelements.amount, currencyelements.currency, service_scopeelements.service_scope or 详见附件, start_dateelements.start_date or 合同签订之日, end_dateelements.end_date or 服务完成之日, payment_termselements.payment_terms or 按约定支付, special_clauses_textspecial_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_idcontract_id, statusContractStatus.DRAFT, content_hashcontent_hash, created_atint(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: ftx_{int(time.time()):08d}, } def legal_review( self, contract_id: str, reviewer: str, approved: bool ) - bool: 法务审核存证 record ContractRecord( contract_idcontract_id, statusContractStatus.LEGAL_REVIEW, content_hash, # 审核不改变内容沿用之前哈希 created_atint(time.time()), legal_reviewed_atint(time.time()), legal_reviewerreviewer, legal_approvedapproved, ) 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_idcontract_id, statusContractStatus.SIGNED, content_hashcontent_hash, created_atint(time.time()), signed_atint(time.time()), signer_a_hashsigner_hash if 甲 in signer else None, signer_b_hashsigner_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 fCONTRACT-{hashlib.md5(raw.encode()).hexdigest()[:12].upper()}四、边界分析与 Trade-offsAIGC 生成 vs 人工审核的边界AI 可以生成合同的 80%——标准条款、金额、日期、双方信息。但剩余 20% 的关键条款违约责任、知识产权归属、保密条款必须人审。AIGC 应做一个条款风险提示功能——对每个自动生成的条款打风险分如违约金比例高于行业标准 2 倍 → 高风险提示辅助法务快速定位需要重点看的段落。区块链上存什么、不存什么只存哈希 时间戳 签名不存合同原文。合同原文可能包含商业机密不适合公开上链。验证时用户本地持有合同文件重新计算哈希与链上比对即可。这种方案既满足存证需求又保护商业隐私。合同模板的版本管理AIGC 依赖模板模板一旦更新如法律条款调整之前用旧模板生成的合同和之后用新模板生成的合同可能不一致。模板应该版本化管理v1.0/v2.0链上存证时附带模板版本号方便事后追溯当时的条款依据是什么版本的模板。多签流程的并发甲方和乙方可能同时签署链上存证需要处理并发写入。可以使用乐观锁——只有当 contracts 最新状态是 PENDING_SIGN 时才写入 SIGNED。如果状态已被对方修改如一方签约后另一方拒绝需要回滚处理。五、总结合同 AIGC 生成 区块链存证的工程价值不在于替代法务而在于加速非关键环节聚焦人工审核在关键条款上。AIGC 负责模板填充80% 标准内容法务负责风险审核20% 关键条款区块链负责全链路存证生成、审核、签署三个阶段全部上链。代码实现上合同的哈希计算要覆盖完整内容不能只算模板部分链上不存原文但存模板版本号验证链路从当前内容哈希 → 链上记录两个点比对。这个方案在新合同法的框架下为电子合同提供了可验证的原件证明。