LangChain学习笔记之ChatPromptTemplate
·
之前老版本引用的包:
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
更多推荐
所有评论(0)