LangChain Chat Chain调用未返回结构化AIMessage对象如何解决?
LangChain Runnables返回内容格式不符预期的解决方法
问题场景
按照LangChain文档编写的Runnables示例代码:
from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI model = ChatOpenAI(model="gpt-4") prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}") chain = prompt | model print(chain.invoke({"topic": "chickens"}))
预期输出(结构化AIMessage对象的简洁展示):
AIMessage(content="Why don't bears wear shoes? Because they have bear feet!")
实际输出(包含完整对象属性的原始打印结果):
content="Why don't bears wear shoes? Because they have bear feet!" response_metadata={'token_usage': {'completion_tokens': 19, 'prompt_tokens': 13, 'total_tokens': 32}, 'model_name': 'gpt-4-0613', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-bd7cda7e-dee2-4107-af3f-97282faa9fa4-0' usage_metadata={'input_tokens': 13, 'output_tokens': 19, 'total_tokens': 32}
解决方法
返回的结果确实是结构化的AIMessage对象,只是默认打印行为会输出对象的所有属性。以下两种方式可以得到符合预期的输出:
方法1:仅提取AI生成的文本内容
如果只需要核心的文本结果,直接访问对象的content属性即可:
from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI model = ChatOpenAI(model="gpt-4") prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}") chain = prompt | model result = chain.invoke({"topic": "chickens"}) # 仅打印内容部分 print(result.content)
输出结果:
Why don't bears wear shoes? Because they have bear feet!
方法2:模拟文档中的结构化展示格式
如果需要和文档示例一致的对象结构展示,手动构造输出格式:
result = chain.invoke({"topic": "chickens"}) # 构造与文档一致的输出格式 print(f"AIMessage(content=\"{result.content}\")")
输出结果:
AIMessage(content="Why don't bears wear shoes? Because they have bear feet!")
内容的提问来源于stack exchange,提问作者barteloma
相关产品推荐
相关产品推荐

