为了账号安全,请及时绑定邮箱和手机立即绑定

用结构化输出把法律文本变成有序数据,让法律工作更高效

从原始文本到结构化数据:OpenAI 的 JSON 模式和结构化输出方式如何提升法律文件处理流程

想象你是一家律师事务所,正在试图简化你的合同审查过程。合同包含各种条款,每个合同都需要被组织以便突出管辖权、摘要、关键条款和法律影响等关键点。一开始,你手动阅读每份合同,但很快发现这个过程既费力又不一致。

探索自动化之路:从合同中提取结构化的数据 📑

为了加快速度,你决定这样使用AI自动从非结构化的合同内容中提取结构化数据。这将通过生成一个包含所有关键信息的JSON输出来节省你团队数小时的工作时间。

第一次试用:JSON

你从JSON 模式开始。这看起来很有希望——它保证了有效的 JSON 结果,这正是你需要的,是吧?你的 JSON 模式的设置可能如下所示:

    from openai import OpenAI  
    import json  

    client = OpenAI()  

    # 定义合同文本  
    contract_text = """  
    标题:ABC Corp 与 XYZ Inc. 之间的服务协议  

    前言:此服务协议(“协议”)于 2024 年 1 月 15 日由加利福尼亚州的 ABC Corp 和德克萨斯州的 XYZ Inc. 签订。  

    服务范围:XYZ Inc. 将根据附录 A 所述向 ABC Corp 提供软件开发和维护服务。  

    合同期限:该合同将于 2024 年 1 月 15 日开始,持续一年,并在双方同意的情况下可以续签。  

    保密性:双方同意对交换的所有信息保密。  

    终止性:任何一方可以在符合第 9 节规定的条件下,提前 30 天发出书面通知终止合同。  

    法律管辖:本合同受加利福尼亚州法律管辖。  

    签署:本合同由 ABC Corp 和 XYZ Inc. 的代表签署。  
    """  

    # 设置 JSON 模式的请求  
    completion = client.chat.completions.create(  
        model="gpt-4o",  
        messages=[  
            {"role": "system", "content": "你是一个法律助理,负责帮忙将合同总结为 JSON 格式。"},  
            {  
                "role": "user",  
                "content": f"""分析以下合同,并以 JSON 格式返回标题、摘要、关键条款、法律管辖和法律后果。确保所有返回内容都是有效的 JSON 格式。  

                合同文本:  
                {contract_text}  
                """  
            }  
        ],  
        response_format={"type": "json_object"}  
    )  

    # 解析并打印 JSON 回应  
    json_response = completion.choices[0].message.content  
    parsed_response = json.loads(json_response)  
    print(json.dumps(parsed_response, indent=4))

这将返回以下对象:

{
    "title": "ABC Corp与XYZ Inc.服务协议",
    "summary": "本服务协议由ABC Corp和XYZ Inc.共同订立,用于由XYZ Inc.为ABC Corp提供的软件开发和维护服务。该协议自2024年1月15日起生效,为期一年,有续约可能。双方均需保守所有交流信息的秘密,任一方均可以在提前30天通知的情况下终止协议。适用法律为加利福尼亚州法律。",
    "key_terms": {
        "parties": [
            "ABC Corp",
            "XYZ Inc."
        ],
        "effective_date": "自2024年1月15日起",
        "duration": "1年",
        "renewal": "双方一致同意后可续约",
        "services": "提供软件开发和维护服务",
        "confidentiality": "双方同意保守所有交换信息的秘密",
        "termination": "30天书面通知",
        "signatures": "由ABC Corp和XYZ Inc.的代表签署"
    },
    "jurisdiction": "加利福尼亚州法律管辖",
    "legal_implications": "双方必须遵守保密协议,承认适用法律限于加利福尼亚州法律。终止条款允许任一方在提前30天书面通知的情况下终止合同,为不可预见的情形提供了灵活性。"
}

输出是有效的JSON!但是在进行几次测试后,你发现了一个问题:输出结构不一致。有时字段稍有不同,或者某些关键术语缺失了。你发现JSON模式并不强制特定格式,它仅保证输出的有效性,从而导致不一致。

结构化输出解决方案 🛠️

然后,你发现了结构化输出。与 JSON 模式不同,结构化输出强制使用严格的模式,确保每个响应都符合你定义的结构,所有必需的字段也都存在。

你为你的合同摘要定义一个结构。

    import json  
    from openai import OpenAI  

    client = OpenAI()  

    # 合同摘要提示和模式设定  
    contract_summarizer_prompt = '''  
        您是一个AI法律助手。给定一份法律合同,将其关键点以结构化的JSON格式进行总结。  
        包括标题、简要总结、关键法律术语列表、管辖地以及任何法律影响或重要条款。  
    '''  

    MODEL = "gpt-4o"  

    def get_contract_summary(contract_text):  
        response = client.chat.completions.create(  
            model=MODEL,  
            messages=[  
                {  
                    "role": "system",   
                    "content": contract_summarizer_prompt  
                },  
                {  
                    "role": "user",   
                    "content": contract_text  
                }  
            ],  
            response_format={  
                "type": "json_schema",  
                "json_schema": {  
                    "name": "legal_summary",  
                    "schema": {  
                        "type": "object",  
                        "properties": {  
                            "title": {"type": "string"},  
                            "summary": {"type": "string"},  
                            "key_terms": {"type": "array", "items": {"type": "string"}},  
                            "jurisdiction": {"type": "string"},  
                            "implications": {"type": "string"}  
                        },  
                        "required": ["title", "summary", "key_terms", "jurisdiction", "implications"],  
                        "additionalProperties": False  
                    },  
                    "strict": True  
                }  
            }  
        )  
        return response.choices[0].message  

    # 示例合同文本  
    contract_text = """  
    标题:ABC Corp和XYZ Inc之间的服务协议  

    引言:本服务协议("协议")由加州公司ABC Corp和德克萨斯公司XYZ Inc于2024年1月15日签订。  

    服务范围:XYZ Inc将按照附录A中概述的要求为ABC Corp提供软件开发和维护服务。  

    合同期限:本协议自2024年1月15日起生效,期限为一年,双方同意的情况下可续约。  

    保密条款:双方同意对交换的信息保密,  

    终止条款:任一方可在满足第9条规定的条件下,提前30天以书面形式通知另一方终止协议。  

    管辖法律:本协议受加利福尼亚州法律管辖。  

    签署:本协议由ABC Corp和XYZ Inc的代表签署。  
    """  

    # 运行函数并打印结构化输出  
    result = get_contract_summary(contract_text)  

    # 解析JSON内容  
    parsed_content = json.loads(result.content)  

    # 以易于阅读的格式打印解析后的结果  
    print(json.dumps(parsed_content, indent=4))

这将返回如下 JSON 对象,并且每次运行此完成请求都会返回相同的 JSON 结构。

{  
    "title": "ABC Corp与XYZ Inc.服务协议",  
    "summary": "本服务协议是ABC Corp与XYZ Inc.之间关于软件开发和维护服务的协议。协议自2024年1月15日起生效,为期一年,且包含续约选项。该协议包括保密义务,并允许在提前30天通知的情况下终止。该协议受加州法律管辖。",  
    "key_terms": [  
        "服务协议",  
        "服务范围",  
        "期限",  
        "保密义务",  
        "终止",  
        "管辖权"  
    ],  
    "jurisdiction": "加州",  
    "implications": "协议要求保密,并包含续约选项,允许任何一方在提前30天通知的情况下终止协议。这意味着任何法律争议都将依据加州法律解决。"  
}  

有了结构化的输出,每个回复都会严格按照格式生成,从而提供一致且可靠的摘要。每份合同审查都包含 标题、摘要、关键条款、管辖权和法律影响 —— 确保没有意外或缺失的字段。你和你的法律团队对这种可预测的格式非常满意,这使得自动搜索和分类合同变得简单。🎉

这里简单总结一下JSON模式下和结构化输出方式之间的主要区别

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消