之前老版本引用的包:
from langchain_core.documents import Document from langchain_core.prompts import ChatPromptTemplate from langchain.chains.combine_documents import create_stuff_documents_chain from langchain.chains import create_extraction_chain新版引用:
from langchain_core.prompts import ChatPromptTemplate通过内容提取指定的模版需要的信息,格式化输出
import os from typing import List, Optional from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate OPENAI_API_KEY = os.environ.get("API_KEY") class Person(BaseModel): """人物信息""" name: str = Field(description="人的姓名") height: int = Field(description="身高,单位厘米") clothing_color: Optional[str] = Field(description="衣服颜色") class PeopleExtraction(BaseModel): """从文本中提取的所有人的信息""" people: List[Person] = Field(description="所有人的信息列表") llm = ChatOpenAI( api_key=OPENAI_API_KEY, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-max", temperature=0 ) structured_llm = llm.with_structured_output(PeopleExtraction) prompt = ChatPromptTemplate.from_template(""" 请从以下文本中提取所有人的信息: {text} 请提取每个人的姓名、身高和衣服颜色。 """) chain = prompt | structured_llm inp = """小美身高165cm。小丽比小美高 10cm,并且比她胖5斤。小丽喜欢穿蓝色外套,小美喜欢穿绿色上衣,小兰说她去年150cm,但是今年就穿不了去年的衣服了,大一号就会长5cm,买了大一号的紫色裙子才能穿。""" result = chain.invoke({"text": inp}) print("提取结果:") print("=" * 50) for i, person in enumerate(result.people, 1): print(f"\n人物 {i}:") print(f" 姓名: {person.name}") print(f" 身高: {person.height} 厘米") print(f" 衣服颜色: {person.clothing_color}") print("\n" + "=" * 50) print("原始 JSON 结构:") print(result.model_dump_json(indent=2, ensure_ascii=False))输出结果如下:
C:\Windows\python12\python.exe E:\project\py\alipy\src\语义提取.py 提取结果: ================================================== 人物 1: 姓名: 小美 身高: 165 厘米 衣服颜色: 绿色 人物 2: 姓名: 小丽 身高: 175 厘米 衣服颜色: 蓝色 人物 3: 姓名: 小兰 身高: 155 厘米 衣服颜色: 紫色 ================================================== 原始 JSON 结构: { "people": [ { "name": "小美", "height": 165, "clothing_color": "绿色" }, { "name": "小丽", "height": 175, "clothing_color": "蓝色" }, { "name": "小兰", "height": 155, "clothing_color": "紫色" } ] } Process finished with exit code 0