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")
漫思
浙公网安备 33010602011771号