LangChain(九)让大模型稳定返回JSON格式的方法!

系列文章目录

LangChain(二)基础问答大模型,纯新手向-CSDN博客

LangChain(三)基础问答大模型,从LLMchain开始了解chain!纯新手向-CSDN博客

LangChain(四)工具调用的底层原理!给大模型按上双手吧!(新手向)-CSDN博客

LangChain(五)工具调用的底层原理进阶!依旧纯新手向~-CSDN博客

LangChain(六)LLMRouteChain的基本原理和构建方式-新手向-CSDN博客

LangChain(七)让大模型拥有记忆!新手向_chatprompttemplate是什么-CSDN博客

LangChain(八)构建多Agent的AI系统-实战!-CSDN博客


文章目录


前言

最近在验证系统功能的时候,分类大模型总是没法返回正式的JSON格式输出导致信息解析失败。

查阅了有关知识,Prompt工程还挺复杂。相关的内容就有:

  • CRISPE框架
  • Zero-Shot
  • Few-Shots
  • COT SC
  • TOT
  • Step-Back

等多种方法。但是实际上我尝试后发现效果均不佳。总是有偶尔几次,大模型没有按照要求返回。

一次偶然的机会,我发现JSON Schema这种东西,这个是针对JSON格式的数据格式进行的格式化描述。更关键的是几乎所有大模型都针对这个东西进行了专门的训练。所以我想着,与其给大模型传入JSON格式的样例,还不如直接给大模型传入预期的JSON Schema描述!

遂有此文!

预备知识需求:

本文 的阅读需要一定的langchain开发基础,详细可以阅读我上面的链接


一、JSON Schema

        JSON Schema 是一种用于描述和验证 JSON 数据结构的规范。它定义了 JSON 数据中各个元素的类型、格式、约束和关系,确保了数据的一致性和可靠性。在软件开发、API 设计以及数据交换过程中,JSON Schema 发挥着重要作用。

有关于JSON Schema相关的内容,详情可参阅一下博客:

JSON Schema详解!JSON格式-CSDN博客

二、promt定义

1.引入库

from pydantic import BaseModel

2.构建输出类并JSON Schema化

本处我直接构建了一个输出格式类,为什么要这么定义呢?

因为pydantic库中的BaseModel类有函数model_json_schema,可以直接返回类的JSON Schema数据。只能说非常之方便,无敌之优雅。

class Output_cls_JSON(BaseModel):
    Classification: str
    name: str
    age: int
json_schema = Output_cls_JSON.model_json_schema()

此时输出为:

{
    'properties': {
        'Classification': {
            'title': 'Classification', 
            'type': 'string'
        }, 
        'name': {
            'title': 'Name', 
            'type': 'string'
        }, 
        'age': {
            'title': 'Age', 
            'type': 'integer'
        }
    }, 
    'required': ['Classification', 'name', 'age'], 
    'title': 'Output_cls_JSON', 
    'type': 'object'
}

 有关于JSON Schema相关的内容,详情可参阅一下博客:

JSON Schema详解!JSON格式-CSDN博客

 

3.构建分类chain

此处采用PromptTemplate.from_template函数直接构建prompt。

from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import JsonOutputParser

chain = (
    PromptTemplate.from_template("""
根据下面提供的信息输入,将其分类为:`中年人`或`老年人`.
如果输入年龄大于60岁,则分类为老年人,否则分类为中年人


Return your response as a JSON blob
json格式如下:
{json_schema}

你只需要回复一个json格式的数据即可,不要返回其他格式的数据,否则你会被批评!

<question>
{question}
</question>
"""
    )
    | llm
    | JsonOutputParser()
)

总结

通过上诉的方式,通过JSON Schema格式的输入,大模型还没有出现过返回不为JSON格式的情况。表现十分之优异。

  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千天夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值