系列文章目录
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相关的内容,详情可参阅一下博客:
二、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相关的内容,详情可参阅一下博客:
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格式的情况。表现十分之优异。