学习Langchain笔记三——输出格式化

import re
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain_core.prompts import PromptTemplate
from langchain_ollama import ChatOllama  # 1. 导入 ChatOllama

# 2. 实例化模型对象 chat
chat = ChatOllama(model="deepseek-r1:1.5b")

response_schema = [
    ResponseSchema(name="name", description="人的姓名", type="string"),
    ResponseSchema(name="age", description="人的年龄", type="integer")
]

output_parsers = StructuredOutputParser.from_response_schemas(response_schema)

template = "你是一个信息提取助手,请从以下文本中提取姓名和年龄:\n文本:{input_text}\n{format_instructions}"

prompt = PromptTemplate(
    template=template,
    input_variables=["input_text"],
    partial_variables={"format_instructions": output_parsers.get_format_instructions()}
)

input_text = "张三今年18岁,来自北京"
filled_prompt = prompt.format(input_text=input_text)

# 3. 获取模型的原始回答
raw_response = chat.invoke(filled_prompt).content

# 4. 关键点:用正则过滤掉 DeepSeek-R1 的 <think> 标签,只留 JSON
clean_response = re.sub(r'<think>.*?</think>', '', raw_response, flags=re.DOTALL).strip()

# 5. 解析过滤后的纯 JSON 字符串
parsed_output = output_parsers.parse(clean_response)
print(parsed_output)

 

 

 

{'name': '张三', 'age': 18}

 

posted @ 2026-07-31 00:20  喵喵2023  阅读(5)  评论(0)    收藏  举报