结构化输出(TypedDict/Pydantic/Annotated)
使用Pydantic + Field约束
from typing import Annotated
from pydantic import BaseModel, Field, ValidationError
Age=Annotated[int,Field(ge=0,le=150,description="年龄,范围0-150")]
class Man(BaseModel):
name:str
age:int
sex:bool
age2:Age
try:
man=Man(name="zhangsan",age=11,sex=1,age2=188)
print(man)
except ValidationError as e:
print("数据校验失败")
print(e)
TypedDict
from typing import Annotated,TypedDict
Age = Anotated[int,"年龄,范围0-150"]
Class Man(TypedDict):
name: str
age: int
sex: bool
age2: Age
man=Man(name="test",age="1111")
输出解析器
from langchain_core.output_parses import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from loguru import logger
from pydantic import BaseModel,Field
load_dotenv(encoding="utf-8")
class Man(BaseModel):
time:str=Field(description="时间")
person:str=Field(description="人物")
event:str=Field(description="事件")
parser=JsonOutputParser(pydantic_object=Person)
fromat_instructions=parser.get_format_instructions()
chat_prompt=ChatPromptTemplate.from_messages(
[
("system","你是一个输出结构化Json数据的AI助手"),
("human","请生成一个关于{topic}的新闻。{format_instructions}"),
]
)]
prompt=chat_prompt_format_messages(
topic="AI竞赛",format_instructions=
)