Python + LangChain:开发智能合同生成器

云信安装大师
90
AI 质量分
2 5 月, 2025
2 分钟阅读
0 阅读

Python + LangChain:开发智能合同生成器

引言

在商业和法律领域,合同起草是一项耗时且容易出错的工作。本文将教你如何使用Python和LangChain框架开发一个智能合同生成器,它能根据用户输入自动生成专业合同文档。这个工具特别适合需要频繁处理标准合同的法务人员、自由职业者和中小企业主。

准备工作

环境要求

  • Python 3.8+
  • pip包管理工具
  • 文本编辑器或IDE(推荐VS Code或PyCharm)

安装依赖

首先创建一个新的Python虚拟环境并安装必要的包:

代码片段
python -m venv contract-env
source contract-env/bin/activate  # Linux/Mac
# Windows使用: contract-env\Scripts\activate

pip install langchain openai python-docx

API密钥准备

本项目需要OpenAI API密钥(或其他LLM提供商的API)。如果你还没有:
1. 访问OpenAI平台
2. 创建账号并获取API密钥

代码片段
# 将你的API密钥保存为环境变量
import os
os.environ["OPENAI_API_KEY"] = "你的-api-key-在这里"

项目结构设计

我们的智能合同生成器将包含以下核心组件:
1. 用户输入处理器:收集合同关键信息
2. 模板系统:存储常见合同条款模板
3. LLM集成:使用LangChain与语言模型交互
4. 文档生成器:输出格式化的Word文档

实现步骤

1. 创建基础模板系统

首先,我们定义一些常见的合同条款模板:

代码片段
contract_templates = {
    "nda": {
        "parties": "本保密协议(以下简称'协议')由{party_a}(以下简称'披露方')与{party_b}(以下简称'接收方')共同订立。",
        "purpose": "双方同意就{purpose}进行讨论,接收方同意对披露方提供的保密信息严格保密。",
        "confidentiality": "接收方同意:(a)仅将保密信息用于上述目的;(b)采取合理措施保护保密信息;(c)未经披露方书面同意,不得向第三方披露。",
        "term": "本协议自{effective_date}起生效,有效期{duration}年。"
    },
    # 可以添加更多模板类型...
}

2. 构建LangChain链

我们将使用LangChain的LLMChain来增强模板的灵活性:

代码片段
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain

def create_contract_chain():
    # 初始化语言模型(使用gpt-3.5-turbo性价比高)
    llm = ChatOpenAI(temperature=0.3, model="gpt-3.5-turbo")

    # 定义提示模板
    prompt = ChatPromptTemplate.from_template(
        """你是一位专业的法律顾问。请根据以下信息完善合同条款:

        模板内容: {template}
        补充说明: {additional_notes}

        请用专业、清晰的法律语言完善上述条款,保持原有格式不变。
        只需返回完善后的条款内容,不要添加额外解释。"""
    )

    return LLMChain(llm=llm, prompt=prompt)

3. 用户输入收集函数

代码片段
def get_user_input():
    print("=== 智能合同生成器 ===")

    contract_type = input("请输入合同类型(如nda, service等): ").lower()
    if contract_type not in contract_templates:
        print("暂不支持该类型合同,将使用默认NDA模板")
        contract_type = "nda"

    details = {}
    print("\n请提供以下合同细节:")
    details["party_a"] = input("甲方名称: ")
    details["party_b"] = input("乙方名称: ")
    details["purpose"] = input("合作目的: ")
    details["effective_date"] = input("生效日期(YYYY-MM-DD): ")
    details["duration"] = input("有效期(年): ")

    additional_notes = input("\n其他特殊要求(可选): ")

    return contract_type, details, additional_notes

4. 文档生成模块

我们将使用python-docx库生成Word文档:

代码片段
from docx import Document

def generate_document(contract_content, filename="generated_contract.docx"):
    doc = Document()

    # 添加标题
    doc.add_heading('正式合同', level=1)

    # 添加内容段落
    for section, text in contract_content.items():
        doc.add_heading(section.capitalize(), level=2)
        doc.add_paragraph(text)

    # 保存文档
    doc.save(filename)
    print(f"\n合同已成功生成并保存为 {filename}")

5. 主程序整合

将所有组件整合在一起:

代码片段
def main():
    # 初始化LangChain组件
    chain = create_contract_chain()

    # 获取用户输入
    contract_type, details, additional_notes = get_user_input()

    print("\n正在生成合同中...")

    generated_sections = {}

    # 处理每个条款部分
    for section_name, template in contract_templates[contract_type].items():
        filled_template = template.format(**details)

        # 使用LLM完善条款内容(实际应用中可添加错误处理)
        result = chain.run({
            "template": filled_template,
            "additional_notes": additional_notes if section_name == "confidentiality" else ""
        })

        generated_sections[section_name] = result

    # 生成最终文档
    generate_document(generated_sections)

if __name__ == "__main__":
   main()

进阶优化建议

  1. 多轮对话增强:可以扩展为交互式对话系统,让LLM主动询问缺失的信息。

  2. 本地模型支持

    代码片段
    from langchain.llms import LlamaCpp
    
    llm = LlamaCpp(
        model_path="./models/llama-2-7b-chat.Q4_K_M.gguf",
        temperature=0.5,
        max_tokens=2000,
        n_ctx=2048,
    )
    
  3. 版本控制:为生成的合同添加哈希值和时间戳。

  4. PDF输出支持:使用pdfkitreportlab库增加PDF导出功能。

常见问题解决

  1. API调用限制

    • OpenAI API有速率限制,可以考虑添加重试逻辑或切换备用API密钥。
  2. 格式化问题

    • Word文档中的格式可以通过修改generate_document函数中的样式设置来调整。
  3. 法律准确性警告

    • python
      disclaimer = ("注意:本工具生成的合同仅供参考,"
      "实际使用前请咨询专业法律人士确认其有效性。")

总结

通过本文我们实现了一个基于Python和LangChain的智能合同生成器,它能够:
1. ✅收集用户输入的合同关键信息
2. ✅利用预定义模板和LLM生成专业条款
3. ✅输出格式化的Word文档

完整代码已放在GitHub仓库中。你可以进一步扩展这个项目,比如添加更多合同类型、集成电子签名功能或开发Web界面。

记住在实际法律场景中使用这类工具时,始终需要人工审核生成的合同内容以确保其合法性和准确性。

原创 高质量