欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > LangChain(九)让大模型稳定返回JSON格式的方法!

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

2024/10/24 14:26:00 来源:https://blog.csdn.net/qiantianye/article/details/140958303  浏览:    关键词:LangChain(九)让大模型稳定返回JSON格式的方法!

系列文章目录

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

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

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

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

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

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

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


文章目录

系列文章目录

前言

一、JSON Schema

二、promt定义

1.引入库

2.构建输出类并JSON Schema化

3.构建分类chain

总结


前言

最近在验证系统功能的时候,分类大模型总是没法返回正式的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: strname: strage: 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 JsonOutputParserchain = (PromptTemplate.from_template("""
根据下面提供的信息输入,将其分类为:`中年人`或`老年人`.
如果输入年龄大于60岁,则分类为老年人,否则分类为中年人Return your response as a JSON blob
json格式如下:
{json_schema}你只需要回复一个json格式的数据即可,不要返回其他格式的数据,否则你会被批评!<question>
{question}
</question>
""")| llm| JsonOutputParser()
)

总结

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com