之前老版本引用的包:

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

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐