DatetimeOutputParser时间输出解析器示例

from langchain.output_parsers import DatetimeOutputParser#日期输出解析器
from langchain.prompts import PromptTemplate

#制定输出解析器
output_parser = DatetimeOutputParser()

#制定提示词模版
template = """回答用户的问题:
{question}

{format_instructions}"""

#时间解析器的解析格式
format_instructions = output_parser.get_format_instructions()

#补充提示词模版
prompt = PromptTemplate.from_template(
    template,
    partial_variables={"format_instructions":format_instructions}
)

API_KEY = "xxxxxxx"
model = ChatOpenAI(model="deepseek-chat",
                   openai_api_key=API_KEY,
                   openai_api_base="https://api.deepseek.com")

chain = prompt | model | output_parser
output = chain.invoke("周杰伦是什么时候出道的?")
output

一、 代码解释

1、导入依赖

from langchain.output_parsers import DatetimeOutputParser#日期输出解析器  
#导入一个 “日期格式转换器”(DatetimeOutputParser)—— 专门把大模型的回答(比如 “2000 年 11 月 7 日”)转换成计算机能识别、格式统一的日期(比如 2000-11-07)。
from langchain.prompts import PromptTemplate
#导入 “提示词模板工具”(PromptTemplate)—— 就是之前说的 “固定提问套路”,避免每次提问都写重复内容。

2、定义解析器

#制定输出解析器
output_parser = DatetimeOutputParser()
#把刚才 “拿” 来的日期转换器 “开机”,随时准备处理大模型的回答。比如:后续大模型回答 “2000 年 11 月 7 日”,这个工具会自动转成 2000-11-07

3、定义提示词模板(含输出解析格式)

#制定提示词模版
template = """回答用户的问题:
{question}

{format_instructions}"""

#时间解析器的解析格式
format_instructions = output_parser.get_format_instructions()
  • 这是给大模型的 “提问框架”,里面有两个 “空白位”:
    • {question}:留给用户的具体问题(比如 “周杰伦是什么时候出道的?”);
    • {format_instructions}:留给 “日期格式要求”(比如 “必须用 YYYY-MM-DD 格式输出”)。
  • 意思是:每次提问都按这个框架来,只需要填用户的问题,格式要求会自动加上,不用重复写。

4、提取日期格式要求(相当于 “问转换器‘要什么格式’”)

 

format_instructions = output_parser.get_format_instructions()

  • 刚才启用的 “日期转换器” 有自己的 “规矩”(比如必须输出 YYYY-MM-DD 格式,不能乱改),这行代码就是 “问转换器这些规矩是什么”,然后把规矩记下来(存到 format_instructions 里)。
  • 比如:format_instructions 最终会是类似 “请输出标准日期格式,例如 2023-12-31” 的文字,大模型能看懂并遵守

5. 生成最终提问模板(相当于 “把话术和格式要求拼好”)

prompt = PromptTemplate.from_template(
    template,
    partial_variables={"format_instructions": format_instructions}
)
  • 这步是把之前的 “提问框架” 和 “日期格式要求” 结合起来,做成一个 “最终可用的提问模板”。
  • 相当于:把模板里的 {format_instructions} 空白位,替换成刚才从转换器里拿到的 “格式规矩”。现在模板变成了:
回答用户的问题:
{question}

请输出标准日期格式,例如 2023-12-31
  • 后续只要填 {question}(用户问题),就能直接发给大模型了。

6. 连接大模型(相当于 “打开大模型,准备对话”)

API_KEY = "xxxxxxx"
model = ChatOpenAI(model="deepseek-chat",
                   openai_api_key=API_KEY,
                   openai_api_base="https://api.deepseek.com")
  • API_KEY:访问 deepseek-chat 大模型的 “钥匙”(没有钥匙进不去);
  • 后面三行:“用钥匙连接到 deepseek-chat 大模型,告诉它‘我要用车了’”,相当于打通和大模型的沟通通道。

7. 搭建工作流水线(相当于 “把设备按顺序连起来”)

| 可以理解成 “然后”,这条 “流水线” 的逻辑是:
先把用户问题放进 prompt 模板(生成 “带格式要求的提问”);
然后把这个提问发给 model(大模型根据要求回答);
最后把大模型的回答传给 output_parser(转换成标准日期格式)。
举个流水线实例:
输入问题 → 模板生成 “回答周杰伦出道时间,输出 YYYY-MM-DD 格式” → 大模型回答 “2000 年 11 月 7 日” → 解析器转成 2000-11-07。

8. 启动流水线,得到结果

output = chain.invoke("周杰伦是什么时候出道的?")
output
  • invoke 就是 “触发 / 启动”,输入用户问题 “周杰伦是什么时候出道的?”,流水线会自动完成:
    模板整理提问 → 发给 deepseek 模型 → 解析器转格式;
  • 最终 output 会输出标准日期:2000-11-07(而不是杂乱的日期表述)。
posted @ 2025-11-05 22:04  星火撩原  阅读(14)  评论(0)    收藏  举报