llm.with_structured_output结构化输出为None
问题描述:
按课程代码结构化llm输出结果为None
相关代码:
from typing import Literal
import dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
class RouteQuery(BaseModel):
"""将用户查询映射到对应的数据源上"""
datasource: Literal["python_docs", "js_docs", "golang_docs"] = Field(
description="根据用户的问题,选择哪个数据源最相关以回答用户的问题"
)
#
def choose_route(result: RouteQuery) -> str:
print('----:', result)
"""根据不同的传递结果选择不同的检索器"""
if "python_docs" in result.datasource:
return 'chain in python_docs'
elif "js_docs" in result.datasource:
return 'chain in js_docs'
else:
return 'chain in golang_docs'
llm = ChatOpenAI(model="gpt-3.5-turbo-16k", temperature=5)
structured_llm = llm.with_structured_output(RouteQuery)
prompt = ChatPromptTemplate.from_messages([
('system', '你是一个擅长将用户问题路由到适应数据源的专家。\n请根据问题涉及的编程语言,将其路由到相关数据源'),
('human', '{question}')
])
router = {'question': RunnablePassthrough()} | prompt
question = """下面的代码为什么不工作了,请帮我检查下:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages(['human','speak in {language}'])
prompt.invoke('中文')
"""
res = router.invoke(question)
print(res)
res_s = structured_llm.invoke(res)
print(res_s)输出如下:对应最后两行print
相关截图:

36
收起
正在回答 回答被采纳积分+1
2回答
AI Agent 全栈开发工程师
- 参与学习 500 人
- 解答问题 404 个
全流程打造你自己的(Coze/Dify)低代码智能体开发平台;2025年入行正当时,企业急需,人才稀缺,竞争小;无论入行还是转行,首选口碑好课,门槛低、成长高
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星