■ PydanticOutputParser 클래스의 parse 메소드를 사용해 명령 문자열을 파싱하고 객체를 구하는 방법을 보여준다.
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import os from typing import List from langchain_experimental.synthetic_data import DatasetGenerator from langchain_openai import ChatOpenAI from langchain_core.output_parsers import PydanticOutputParser from pydantic import BaseModel, Field from langchain_core.prompts import PromptTemplate from langchain_openai import OpenAI os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>" sourceList = [ { "Actor" : "Tom Hanks", "Film" : ["Forrest Gump", "Saving Private Ryan", "The Green Mile", "Toy Story", "Catch Me If You Can"] }, { "Actor" : "Tom Hardy", "Film" : ["Inception", "The Dark Knight Rises", "Mad Max: Fury Road", "The Revenant", "Dunkirk"] } ] chatOpenAI = ChatOpenAI(model = "gpt-3.5-turbo", temperature = 0.7) datasetGenerator = DatasetGenerator(chatOpenAI, {"style" : "informal", "minimal length" : 500}) targetList = datasetGenerator(sourceList) class Actor(BaseModel): Actor : str = Field(description = "name of an actor" ) Film : List[str] = Field(description = "list of names of films they starred in") pydanticOutputParser = PydanticOutputParser(pydantic_object = Actor) instructionFormatString = pydanticOutputParser.get_format_instructions() promptTemplate = PromptTemplate( template = "Extract fields from a given text.\n{format_instructions}\n{text}\n", input_variables = ["text"], partial_variables = {"format_instructions" : instructionFormatString}, ) stringPromptValue = promptTemplate.format_prompt(text = targetList[0]["text"]) instructionString = stringPromptValue.to_string() openAI = OpenAI() resultString = openAI(instructionString) actor = pydanticOutputParser.parse(resultString) print(actor) """ Actor='Tom Hanks' Film=['Forrest Gump', 'Saving Private Ryan', 'The Green Mile', 'Toy Story', 'Catch Me If You Can'] """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 anyio==4.4.0 async-timeout==4.0.3 attrs==23.2.0 certifi==2024.6.2 charset-normalizer==3.3.2 dataclasses-json==0.6.7 distro==1.9.0 exceptiongroup==1.2.1 frozenlist==1.4.1 greenlet==3.0.3 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.5 langchain-community==0.2.5 langchain-core==0.2.7 langchain-experimental==0.0.61 langchain-openai==0.1.8 langchain-text-splitters==0.2.1 langsmith==0.1.77 marshmallow==3.21.3 multidict==6.0.5 mypy-extensions==1.0.0 numpy==1.26.4 openai==1.34.0 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 sniffio==1.3.1 SQLAlchemy==2.0.30 tenacity==8.3.0 tiktoken==0.7.0 tqdm==4.66.4 typing-inspect==0.9.0 typing_extensions==4.12.2 urllib3==2.2.1 yarl==1.9.4 |
※ pip install langchain langchain_experimental langchain-openai 명령을 실행했다.