Open Interpreter法务文书:合同生成脚本部署案例

张开发
2026/4/11 6:40:07 15 分钟阅读

分享文章

Open Interpreter法务文书:合同生成脚本部署案例
Open Interpreter法务文书合同生成脚本部署案例1. 引言想象一下你是一名法务人员或创业者每天需要处理大量格式相似但细节各异的合同文书。从保密协议到采购合同每一份都需要根据具体情况进行条款调整和内容填充。传统方式下要么手动复制粘贴、逐条修改要么依赖昂贵的专业软件。这个过程不仅耗时费力还容易出错。现在有一个更聪明的办法让AI帮你写代码自动生成合同脚本。听起来很酷对吧今天要聊的Open Interpreter就是这样一个能听懂人话、帮你写代码的工具。它就像一个会编程的助手你告诉它“帮我写一个生成采购合同的Python脚本”它就能在本地电脑上把代码写出来、跑起来。更棒的是我们这次用的是内置了Qwen3-4B-Instruct-2507模型的方案完全在本地运行你的合同模板和敏感数据都不用上传到云端安全又私密。这篇文章我就带你一步步部署这个AI编码应用打造你自己的合同生成自动化工具。2. Open Interpreter是什么简单来说Open Interpreter是一个开源的本地代码解释器。它的核心能力是让你用平常说话的方式指挥大语言模型在你的电脑上直接写代码、运行代码、修改代码。2.1 核心特点完全本地运行这是最大的优势。所有的代码生成和执行都在你的电脑上完成没有文件大小限制没有运行时间限制最重要的是你的数据不会离开本地环境。对于处理包含商业机密或客户信息的合同文书这一点至关重要。多模型支持它很灵活既可以用OpenAI、Claude这些云端模型也可以用Ollama、LM Studio托管的本地模型。我们今天要用的就是内置的Qwen3-4B-Instruct-2507模型一个专门优化过的代码生成模型。所见即所得Open Interpreter采用“先显示后执行”的安全模式。它会先把生成的代码展示给你看等你确认没问题了再运行。如果运行出错它还能自动分析错误、修改代码、重新尝试直到成功为止。功能强大别看它只是个代码解释器能做的事情可不少。从简单的数据清洗、文件处理到复杂的浏览器自动化、图形界面控制它都能胜任。我们今天要做的合同生成只是它众多应用场景中的一个。2.2 为什么适合合同生成合同文书有几个特点格式固定、条款模块化、变量需要替换。这正好是代码自动化最擅长处理的问题。格式固定每类合同都有标准的结构和条款顺序这可以用模板来实现条款模块化保密条款、付款条款、违约责任条款等都可以写成独立的函数或模块变量替换甲方乙方信息、金额、日期等是每次都需要替换的内容这用代码处理再合适不过用Open Interpreter你可以这样工作告诉它“帮我创建一个Python脚本读取Excel表格中的客户信息生成对应的保密协议”它生成代码你确认后运行脚本自动读取数据、填充模板、生成PDF文件如果有问题告诉它怎么修改它会自动调整代码整个过程就像在和一个懂编程的同事对话只不过这个同事不知疲倦、不会抱怨而且完全听从你的指挥。3. 环境准备与快速部署好了理论说再多不如动手试试。下面我就带你一步步搭建这个AI编码环境重点是用内置的Qwen模型这样你就不用操心API密钥和网络问题了。3.1 系统要求首先确认你的电脑环境操作系统Windows 10/11、macOS 10.15 或 LinuxUbuntu 18.04内存至少8GB推荐16GB以上运行模型需要一定内存存储空间至少10GB可用空间Python版本Python 3.8 - 3.11推荐3.9或3.10如果你的电脑符合这些要求我们就可以开始了。3.2 安装Open Interpreter打开你的终端Windows用PowerShell或CMDmacOS/Linux用Terminal输入以下命令# 使用pip安装Open Interpreter pip install open-interpreter # 如果你遇到权限问题可以加上--user参数 pip install --user open-interpreter # 或者使用conda环境推荐 conda create -n interpreter python3.10 conda activate interpreter pip install open-interpreter安装过程大概需要1-2分钟取决于你的网络速度。安装完成后可以验证一下# 查看版本 interpreter --version # 或者直接运行看看是否正常启动 interpreter如果看到类似下面的提示说明安装成功了Open Interpreter 0.2.0 Type /help for commands3.3 配置内置模型现在到了关键步骤配置我们内置的Qwen模型。这个模型已经针对代码生成做了专门优化而且完全本地运行不需要联网。# 使用内置的Qwen3-4B-Instruct-2507模型 interpreter --api_base http://localhost:8000/v1 --model Qwen3-4B-Instruct-2507这里解释一下参数--api_base指定模型服务的地址我们用的是本地服务--model指定使用的模型名称这里就是优化过的Qwen代码模型运行这个命令后Open Interpreter会自动加载模型。第一次运行可能需要下载模型文件时间会稍长一些大概5-10分钟取决于你的网速。下载完成后模型就会缓存在本地下次启动就快了。3.4 验证安装模型加载完成后我们来做个简单的测试确认一切正常# 在Open Interpreter的交互界面中输入 帮我写一个Python函数计算两个数的和如果看到类似下面的输出说明你的环境已经准备好了def add_numbers(a, b): 计算两个数的和 参数: a (int/float): 第一个数 b (int/float): 第二个数 返回: int/float: 两个数的和 return a b # 示例用法 result add_numbers(5, 3) print(f5 3 {result})看到代码成功生成并且语法正确、有注释、有示例就说明Open Interpreter和Qwen模型都工作正常了。4. 合同生成脚本实战环境准备好了现在我们来解决实际问题创建一个自动生成合同的Python脚本。我会带你从最简单的开始逐步完善功能。4.1 基础合同模板首先我们需要一个合同模板。这里以最常见的《保密协议》为例创建一个简单的文本模板# 保密协议模板 confidentiality_template 保密协议 本协议由以下双方于{date}签订 甲方披露方{party_a} 地址{address_a} 联系人{contact_a} 乙方接收方{party_b} 地址{address_b} 联系人{contact_b} 鉴于甲方拥有某些保密信息并愿意向乙方披露 鉴于乙方同意对甲方披露的保密信息予以保密 双方经友好协商达成协议如下 第一条 保密信息的定义 1.1 本协议所称“保密信息”是指甲方以书面、口头或电子方式提供给乙方的任何技术信息、商业信息及其他信息。 第二条 保密义务 2.1 乙方同意对保密信息予以严格保密除为履行本协议目的外不得使用保密信息。 2.2 保密期限自本协议签订之日起{confidentiality_period}年。 第三条 违约责任 3.1 如乙方违反本协议项下的保密义务应向甲方支付违约金金额为人民币{penalty_amount}元。 第四条 法律适用与争议解决 4.1 本协议适用中华人民共和国法律。 4.2 因本协议引起的或与本协议有关的任何争议双方应友好协商解决协商不成的任何一方均有权向甲方所在地人民法院提起诉讼。 本协议一式两份甲乙双方各执一份具有同等法律效力。 甲方盖章_______________ 代表签字__________________ 日期{date} 乙方盖章_______________ 代表签字__________________ 日期{date} 这是一个最简单的模板用花括号{}标注了需要替换的变量。在实际工作中你的模板可能会更复杂但原理是一样的。4.2 让AI写生成脚本现在我们请Open Interpreter帮我们写一个完整的合同生成脚本。在Open Interpreter界面中输入帮我写一个完整的Python脚本功能是 1. 读取一个包含合同信息的CSV文件 2. 根据模板生成保密协议 3. 将生成的合同保存为PDF文件 4. 添加基本的错误处理和日志记录 要求 - 使用上面提供的保密协议模板 - CSV文件包含以下字段party_a, address_a, contact_a, party_b, address_b, contact_b, date, confidentiality_period, penalty_amount - 生成的PDF文件名格式为保密协议_{party_a}_to_{party_b}_{date}.pdf - 添加进度显示和错误处理Open Interpreter会生成一个完整的脚本。我在这里展示一个简化版本方便你理解import pandas as pd from datetime import datetime import os import logging from fpdf import FPDF import csv # 设置日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(contract_generator.log), logging.StreamHandler() ] ) logger logging.getLogger(__name__) # 合同模板同上这里省略以节省篇幅 confidentiality_template ... [模板内容同上] ... class ContractGenerator: 合同生成器类 def __init__(self, template): self.template template logger.info(合同生成器初始化完成) def read_contract_data(self, csv_file): 读取CSV文件中的合同数据 try: df pd.read_csv(csv_file) logger.info(f成功读取CSV文件共{len(df)}条记录) return df except Exception as e: logger.error(f读取CSV文件失败: {e}) raise def generate_contract_text(self, data): 根据模板和数据生成合同文本 try: contract_text self.template.format(**data) logger.debug(f合同文本生成成功: {data.get(party_a, )} - {data.get(party_b, )}) return contract_text except KeyError as e: logger.error(f模板变量缺失: {e}) raise except Exception as e: logger.error(f生成合同文本失败: {e}) raise def save_as_pdf(self, text, filename): 将合同文本保存为PDF try: pdf FPDF() pdf.add_page() pdf.add_font(SimSun, , simsun.ttc, uniTrue) # 中文字体 pdf.set_font(SimSun, size12) # 处理中文换行 lines text.split(\n) for line in lines: # PDF单元格自动换行 pdf.multi_cell(0, 10, line) pdf.output(filename) logger.info(fPDF文件保存成功: {filename}) return True except Exception as e: logger.error(f保存PDF失败: {e}) return False def process_batch(self, csv_file, output_diroutput_contracts): 批量处理合同生成 # 创建输出目录 os.makedirs(output_dir, exist_okTrue) # 读取数据 df self.read_contract_data(csv_file) success_count 0 fail_count 0 for index, row in df.iterrows(): try: logger.info(f正在处理第 {index 1}/{len(df)} 条记录...) # 转换为字典 data row.to_dict() # 生成合同文本 contract_text self.generate_contract_text(data) # 生成文件名 filename f保密协议_{data[party_a]}_to_{data[party_b]}_{data[date]}.pdf filepath os.path.join(output_dir, filename) # 保存为PDF if self.save_as_pdf(contract_text, filepath): success_count 1 logger.info(f✓ 成功生成: {filename}) else: fail_count 1 logger.error(f✗ 生成失败: {filename}) except Exception as e: fail_count 1 logger.error(f处理记录 {index 1} 时出错: {e}) continue # 输出统计信息 logger.info(f处理完成成功: {success_count}, 失败: {fail_count}) return success_count, fail_count def main(): 主函数 logger.info( 合同批量生成程序开始 ) # 初始化生成器 generator ContractGenerator(confidentiality_template) # 指定CSV文件路径 csv_file contract_data.csv # 修改为你的CSV文件路径 # 批量处理 if os.path.exists(csv_file): success, fail generator.process_batch(csv_file) logger.info(f程序结束。成功生成 {success} 份合同失败 {fail} 份。) else: logger.error(fCSV文件不存在: {csv_file}) # 创建示例CSV文件 create_example_csv(csv_file) logger.info(f已创建示例CSV文件: {csv_file}请填写数据后重新运行。) def create_example_csv(filename): 创建示例CSV文件 data [ { party_a: 北京科技有限公司, address_a: 北京市海淀区中关村大街1号, contact_a: 张三, party_b: 上海信息技术有限公司, address_b: 上海市浦东新区张江路100号, contact_b: 李四, date: 2024-01-15, confidentiality_period: 3, penalty_amount: 100000 }, { party_a: 广州制造有限公司, address_a: 广州市天河区珠江新城, contact_a: 王五, party_b: 深圳贸易有限公司, address_b: 深圳市南山区科技园, contact_b: 赵六, date: 2024-01-16, confidentiality_period: 2, penalty_amount: 50000 } ] with open(filename, w, newline, encodingutf-8-sig) as f: writer csv.DictWriter(f, fieldnamesdata[0].keys()) writer.writeheader() writer.writerows(data) logger.info(f示例CSV文件已创建: {filename}) if __name__ __main__: main()这个脚本已经具备了完整的功能读取CSV、填充模板、生成PDF、错误处理、日志记录。你可以直接使用也可以根据Open Interpreter生成的版本进行调整。4.3 准备数据文件脚本需要CSV格式的数据文件。创建一个contract_data.csv文件内容如下party_a,address_a,contact_a,party_b,address_b,contact_b,date,confidentiality_period,penalty_amount 北京科技有限公司,北京市海淀区中关村大街1号,张三,上海信息技术有限公司,上海市浦东新区张江路100号,李四,2024-01-15,3,100000 广州制造有限公司,广州市天河区珠江新城,王五,深圳贸易有限公司,深圳市南山区科技园,赵六,2024-01-16,2,50000 杭州电子商务有限公司,杭州市西湖区文三路,孙七,南京物流有限公司,南京市鼓楼区中山路,周八,2024-01-17,5,200000你可以用Excel或任何文本编辑器创建这个文件确保编码是UTF-8。4.4 安装依赖库运行脚本前需要安装几个Python库# 在终端中运行 pip install pandas fpdf # 如果你需要更复杂的PDF格式可以安装reportlab pip install reportlab4.5 运行脚本一切准备就绪后运行脚本python contract_generator.py如果一切正常你会看到类似这样的输出2024-01-15 10:30:00 - INFO - 合同批量生成程序开始 2024-01-15 10:30:00 - INFO - 合同生成器初始化完成 2024-01-15 10:30:00 - INFO - 成功读取CSV文件共3条记录 2024-01-15 10:30:00 - INFO - 正在处理第 1/3 条记录... 2024-01-15 10:30:01 - INFO - PDF文件保存成功: output_contracts/保密协议_北京科技有限公司_to_上海信息技术有限公司_2024-01-15.pdf 2024-01-15 10:30:01 - INFO - ✓ 成功生成: 保密协议_北京科技有限公司_to_上海信息技术有限公司_2024-01-15.pdf ... [更多日志] ... 2024-01-15 10:30:03 - INFO - 处理完成成功: 3, 失败: 0生成的PDF文件会保存在output_contracts文件夹中。打开看看是不是已经有模有样了5. 进阶功能与优化基础功能有了但实际工作中我们可能需要更强大的功能。别担心Open Interpreter可以帮我们一步步完善。5.1 多类型合同支持现实中不可能只有一种合同。我们可以让脚本支持多种合同类型。在Open Interpreter中输入帮我修改合同生成脚本让它支持多种合同类型 1. 保密协议Confidentiality Agreement 2. 采购合同Purchase Contract 3. 服务协议Service Agreement 要求 - 每种合同有独立的模板 - CSV文件中增加一个contract_type字段来指定合同类型 - 根据contract_type字段自动选择对应的模板 - 每种合同的变量可能不同需要灵活处理Open Interpreter会生成支持多合同类型的版本。核心思路是创建一个模板管理器class TemplateManager: 模板管理器 def __init__(self): self.templates { confidentiality: confidentiality_template, purchase: purchase_template, service: service_template } def get_template(self, contract_type): 获取指定类型的模板 template self.templates.get(contract_type) if not template: raise ValueError(f不支持的合同类型: {contract_type}) return template def get_required_fields(self, contract_type): 获取模板所需的字段列表 # 通过分析模板中的{}来动态获取所需字段 template self.get_template(contract_type) import re fields re.findall(r\{(.*?)\}, template) return list(set(fields)) # 去重5.2 添加电子签名功能如果需要更正式的文件可以添加电子签名功能。告诉Open Interpreter帮我添加电子签名功能到合同生成脚本 1. 在PDF的签名处添加数字签名图片 2. 支持自动从指定文件夹加载公司Logo和签名图片 3. 根据合同类型和公司自动选择对应的签名 4. 在PDF底部添加签名日期和位置生成的代码可能会包含这样的功能from PIL import Image def add_signature_to_pdf(pdf, signature_path, position(150, 250), size(80, 40)): 在PDF中添加签名图片 if os.path.exists(signature_path): pdf.image(signature_path, xposition[0], yposition[1], wsize[0], hsize[1]) return True return False def add_company_logo(pdf, logo_path, position(20, 20), size(60, 60)): 在PDF左上角添加公司Logo if os.path.exists(logo_path): pdf.image(logo_path, xposition[0], yposition[1], wsize[0], hsize[1]) return True return False5.3 批量处理与进度监控当有上百份合同需要生成时我们需要更好的进度监控。可以让Open Interpreter添加from tqdm import tqdm import time def process_large_batch(self, csv_file, output_dir, batch_size50): 处理大批量合同支持分批和进度显示 total_records len(pd.read_csv(csv_file)) logger.info(f开始处理 {total_records} 条记录分批大小: {batch_size}) # 使用tqdm显示进度条 with tqdm(totaltotal_records, desc生成进度) as pbar: for start_idx in range(0, total_records, batch_size): # 分批读取数据 batch_df pd.read_csv(csv_file, skiprowsstart_idx, nrowsbatch_size) for _, row in batch_df.iterrows(): try: # 处理单条记录 self.process_single_contract(row, output_dir) pbar.update(1) pbar.set_postfix({成功: self.success_count, 失败: self.fail_count}) except Exception as e: self.fail_count 1 logger.error(f处理失败: {e}) continue # 每批处理完成后暂停一下避免资源占用过高 time.sleep(0.5) logger.info(f批量处理完成总计: {total_records}, 成功: {self.success_count}, 失败: {self.fail_count})5.4 错误处理与重试机制在实际运行中可能会遇到各种问题文件被占用、内存不足、网络问题等。我们可以让Open Interpreter帮我们添加健壮的错误处理import traceback from tenacity import retry, stop_after_attempt, wait_exponential class RobustContractGenerator(ContractGenerator): 增强版的合同生成器带有重试机制 retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def save_as_pdf_with_retry(self, text, filename): 带重试机制的PDF保存 try: return self.save_as_pdf(text, filename) except Exception as e: logger.warning(fPDF保存失败准备重试: {e}) raise def safe_process_contract(self, data, output_dir): 安全的合同处理包含完整的错误捕获 try: # 验证必要字段 self.validate_required_fields(data) # 生成合同文本 contract_text self.generate_contract_text(data) # 生成文件名 filename self.generate_filename(data) filepath os.path.join(output_dir, filename) # 带重试的保存 success self.save_as_pdf_with_retry(contract_text, filepath) if success: # 记录成功信息 self.log_success(data, filepath) return True else: # 记录失败信息 self.log_failure(data, PDF保存失败) return False except ValueError as e: logger.error(f数据验证失败: {e}) self.log_failure(data, f数据错误: {e}) return False except Exception as e: logger.error(f未知错误: {e}\n{traceback.format_exc()}) self.log_failure(data, f系统错误: {e}) return False6. 实际应用场景这个合同生成脚本不仅仅是个技术演示它在实际工作中有很多应用场景。让我给你举几个真实的例子6.1 法务部门批量处理大型企业的法务部门每天要处理大量标准合同。使用这个脚本入职流程新员工入职时自动生成保密协议、劳动合同供应商管理新供应商注册时批量生成采购合同、服务协议合作伙伴与新合作伙伴签约时快速生成合作协议以前法务人员需要手动修改每个合同的甲方乙方信息、金额、日期现在只需要准备一个Excel表格运行脚本几分钟就全部搞定。6.2 创业公司文档自动化创业公司资源有限但文档工作一点不少投资协议与不同投资人谈判时快速生成不同版本的Term Sheet员工期权为员工生成期权授予协议顾问合同与外部顾问签订服务协议NDA管理对所有接触公司机密的人员生成保密协议创始人或行政人员自己就能处理不用每次都找律师当然重要文件还是需要律师审核。6.3 律师事务所效率工具律师事务所可以用这个脚本客户信息录入客户填写在线表单自动生成合同初稿模板管理维护各种合同模板库随时调用批量修订法律条款更新时批量更新所有模板版本控制自动记录每次生成的合同版本律师可以专注于法律条款的审阅和谈判而不是复制粘贴的基础工作。6.4 电商平台商家服务电商平台可以为商家提供采购合同商家与供应商的采购协议分销协议品牌方与分销商的合作协议物流合同与物流服务商的运输协议平台服务协议标准化平台使用协议商家在后台上传信息系统自动生成合同双方电子签名全程数字化。7. 使用技巧与注意事项在实际使用中有几个技巧和注意事项想分享给你7.1 与Open Interpreter高效协作明确你的需求和Open Interpreter对话时越具体越好。不要说“帮我写个合同脚本”而要说“帮我写一个Python脚本读取Excel中的客户信息填充保密协议模板保存为PDF并添加日志功能”。迭代开发不要指望一次就得到完美代码。先让AI生成基础版本运行测试发现问题后再让AI修改。比如先生成基础脚本测试发现中文PDF乱码告诉AI“生成的PDF中文显示乱码请添加中文字体支持”AI修改代码问题解决学习AI的思考方式观察AI生成的代码学习它的编程风格和解决问题的思路。这能帮你提高自己的编程能力。7.2 合同生成的最佳实践模板设计要点使用明确的变量标记如{company_name}、{contract_date}保留版本信息在模板注释中注明版本号和更新日期为不同合同类型设计不同的模板文件便于维护添加必要的法律免责声明数据准备建议CSV文件使用UTF-8编码避免中文乱码日期字段统一格式如YYYY-MM-DD金额字段明确币种和单位必填字段做好验证避免生成不完整的合同安全注意事项合同模板和生成脚本要定期备份生成的合同文件要妥善存储设置访问权限涉及敏感信息的合同考虑添加水印或加密重要合同仍需人工审核AI生成的是初稿7.3 性能优化建议如果合同数量很大比如上千份可以考虑以下优化分批处理# 不要一次性读取所有数据 def process_in_batches(csv_file, batch_size100): for chunk in pd.read_csv(csv_file, chunksizebatch_size): process_batch(chunk)并行处理from concurrent.futures import ThreadPoolExecutor def parallel_process(self, csv_file, max_workers4): 使用多线程并行处理 df self.read_contract_data(csv_file) with ThreadPoolExecutor(max_workersmax_workers) as executor: futures [] for _, row in df.iterrows(): future executor.submit(self.process_single_contract, row.to_dict()) futures.append(future) # 等待所有任务完成 results [f.result() for f in futures] return results内存管理及时关闭文件句柄使用生成器而不是列表存储大量数据定期清理临时文件8. 总结通过这个案例我们看到了Open Interpreter在实际工作中的应用价值。它不仅仅是一个代码生成工具更是一个能够理解业务需求、提供解决方案的智能助手。8.1 核心价值回顾效率提升从手动修改到自动生成合同处理时间从几小时缩短到几分钟。法务人员可以从繁琐的重复劳动中解放出来专注于更有价值的工作。准确性保障自动化生成避免了人工复制粘贴可能出现的错误如信息错位、遗漏条款等。统一的模板确保了合同格式和条款的一致性。灵活扩展基于Open Interpreter的解决方案非常灵活。今天生成的是保密协议明天就可以扩展到采购合同、服务协议、租赁合同等任何文档类型。安全可控所有操作都在本地完成敏感的商业信息和合同数据不会上传到云端符合企业的数据安全要求。8.2 下一步建议如果你对这个方案感兴趣我建议你可以从简单开始不要一开始就追求完美。先实现最基本的功能生成一份能用的合同然后再逐步添加更多功能。结合实际需求根据你所在行业和公司的具体需求调整合同模板和生成逻辑。每个行业的合同都有其特殊性。建立模板库逐步积累各种合同模板形成自己的知识库。这样以后遇到类似需求可以直接调用。团队协作如果你在团队中可以考虑将这个工具分享给同事。大家一起完善模板共同提高工作效率。持续学习Open Interpreter和AI编码工具在快速发展保持学习的心态关注新的功能和应用场景。8.3 最后的思考技术最终要服务于业务。Open Interpreter这样的工具最大的价值不是技术本身有多先进而是它如何帮助人们解决实际问题。合同生成只是一个起点。同样的思路可以应用到很多场景报告生成、数据分析、自动化测试、系统监控等等。关键是要有“用自然语言描述需求让AI帮忙实现”的思维模式。希望这个案例能给你带来启发。技术不难难的是找到技术的应用场景。当你把技术和实际工作结合起来就能创造出真正的价值。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章