llm应用格式化输出

from typing import List
from pydantic import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI

# 定义输出 schema
class MovieRecommendation(BaseModel):
title: str = Field(description="电影名称")
year: int = Field(description="上映年份")
genres: List[str] = Field(description="题材标签")
reason: str = Field(description="推荐理由")

class Recommendations(BaseModel):
items: List[MovieRecommendation]

parser = PydanticOutputParser(pydantic_object=Recommendations)

prompt = ChatPromptTemplate.from_messages([
("system",
"你是电影推荐助手。请严格按以下 JSON 格式输出:\n{format_instructions}"),
("user", "推荐 {n} 部关于 {topic} 的电影。"),
]).partial(format_instructions=parser.get_format_instructions())

model = ChatOpenAI(model="gpt-4o-mini", temperature=0.3)

chain = prompt | model | parser

result: Recommendations = chain.invoke({"n": 3, "topic": "时间旅行"})
for m in result.items:
print(f"《{m.title}》({m.year}) - {', '.join(m.genres)}")
print(f" 推荐理由:{m.reason}\n")
 
chain = prompt | model | StrOutputParser()

for chunk in chain.stream({"role": "讲故事的人", "question": "讲一个 50 字的小故事"}):
print(chunk, end="", flush=True)
 
 
from typing import List
from pydantic import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI

# 定义输出 schema
class MovieRecommendation(BaseModel):
title: str = Field(description="电影名称")
year: int = Field(description="上映年份")
genres: List[str] = Field(description="题材标签")
reason: str = Field(description="推荐理由")

class Recommendations(BaseModel):
items: List[MovieRecommendation]

parser = PydanticOutputParser(pydantic_object=Recommendations)

prompt = ChatPromptTemplate.from_messages([
("system",
"你是电影推荐助手。请严格按以下 JSON 格式输出:\n{format_instructions}"),
("user", "推荐 {n} 部关于 {topic} 的电影。"),
]).partial(format_instructions=parser.get_format_instructions())

model = ChatOpenAI(model="gpt-4o-mini", temperature=0.3)

chain = prompt | model | parser

result: Recommendations = chain.invoke({"n": 3, "topic": "时间旅行"})
for m in result.items:
print(f"《{m.title}》({m.year}) - {', '.join(m.genres)}")
print(f" 推荐理由:{m.reason}\n")

posted on 2026-08-24 02:44  漫思  阅读(16)  评论(0)    收藏  举报

导航