← 返回学习记录Agent / 独立笔记编写中

Ch14.输出解析器

输出解析器

结构化输出(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=
)