!pip3 install openai langchain
1 환경설정
LangChain 에서 OpenAI chatGPT를 호출하여 원하는 작업을 수행한다. 먼저 openai
와 langchain
을 설치한다.
OPENAI_API_KEY
를 환경변수를 넣어두고 OpenAI()
함수에서 호출하여 사용할 수 있도록 한다.
import os
from langchain.llms import OpenAI
# os.environ.get('OPENAI_API_KEY')
2 헬로 월드
그리고 나서, 헬로월드를 찍어본다. model_name
을 비롯한 인수를 응답속도, 정확도, 간결함, 창의성, 비용 등을 고려하여 지정하여 원하는 결과를 얻어낸다.
= OpenAI(model_name="text-davinci-003", n=1, temperature=0.9)
llm "재미있는 농담해 주세요")
llm(#> '\n\n시간이 멈추면 어떻게 될까? 아무것도 안 될 거야.'
3개 농담을 뽑아보자.
= llm.generate(["재미있는 농담해 주세요"]*3)
llm_result = llm_result.generations
llm_jokes
llm_jokes#> [[Generation(text='\n\nQ. 뭐가 중간에 끼었나요?\n\nA. 손바닥!', generation_info={'finish_reason': 'stop', 'logprobs': None})], [Generation(text='\n\n언제부터 인간은 칩까지 먹기 시작했나?\n적어도 칩이 없었을 때는 정말 다 괴로웠겠지요.', generation_info={'finish_reason': 'stop', 'logprobs': None})], [Generation(text='\n\nQ. 배가 불러서 바나나를 먹고 싶다는 어린이가 있었는데, 어떻게 해주셨나요?\n\nA. 나는 그 어린이에게 바나나 파이를 사주고, 불을 밝혔어요!', generation_info={'finish_reason': 'stop', 'logprobs': None})]]
3 프롬프트 템플릿
프롬프트 템플릿을 작성하여 해당 작업을 수행토록 지시할 수 있다. 예를 들어 회사명을 작명하는데 대표적으로 잘 작명된 회사명을 제시하고 제약 조건을 추가로 둔 후 회사명 작명지시를 수행시킬 수 있다.
3.1 영문
from langchain import PromptTemplate
= """
template I want you to act as a naming consultant for new companies.
Here are some examples of good company names:
- search engine, Google
- social media, Facebook
- video sharing, YouTube
The name should be short, catchy and easy to remember.
What is a good name for a company that makes {product}?
"""
= PromptTemplate(
prompt = ["product"],
input_variables = template,
template
)
format(product="colorful socks")
prompt.#> '\nI want you to act as a naming consultant for new companies.\n\nHere are some examples of good company names:\n\n- search engine, Google\n- social media, Facebook\n- video sharing, YouTube\n\nThe name should be short, catchy and easy to remember.\n\nWhat is a good name for a company that makes colorful socks?\n'
앞서 프롬프트 템플릿을 지정한 후 실행을 통해 원하는 회사명 작명 작업을 수행시킨다.
from langchain.chains import LLMChain
= LLMChain(llm=llm, prompt=prompt)
chain
print(chain.run("colorful socks"))
#>
#> FunSox.
3.2 국문
앞서 제작된 영문회사 작명 템플릿을 번역하여 국내 몇가지 회사를 사례로 넣어 chatGPT에 작업을 지시한다.
= """
k_template 신규 회사명을 작명하는 컨설턴트로 활동해 주셨으면 합니다.
다음은 좋은 회사 이름 몇 가지 사례입니다:
- 케이티, 통신
- 놀부, 외식프랜차이즈
- 율도국, 브랜드제작
- 크몽, 아웃소싱 플랫폼
이름은 짧고 눈에 잘 띄며 기억하기 쉬워야 합니다.
{k_product} 제품을 잘 만드는 회사의 좋은 이름은 무엇인가요?
"""
= PromptTemplate(
k_prompt = ["k_product"],
input_variables = k_template,
template
)
format(k_product="양말")
k_prompt.#> '\n신규 회사명을 작명하는 컨설턴트로 활동해 주셨으면 합니다.\n\n다음은 좋은 회사 이름 몇 가지 사례입니다:\n\n- 케이티, 통신\n- 놀부, 외식프랜차이즈\n- 율도국, 브랜드제작\n- 크몽, 아웃소싱 플랫폼\n\n이름은 짧고 눈에 잘 띄며 기억하기 쉬워야 합니다.\n\n양말 제품을 잘 만드는 회사의 좋은 이름은 무엇인가요?\n'
앞서 프롬프트 템플릿을 지정한 후 실행을 통해 원하는 회사명 작명 작업을 수행시킨다.
from langchain.chains import LLMChain
= LLMChain(llm = llm, prompt = k_prompt)
k_chain
print(k_chain.run("양말"))
#>
#> - 솔랩, 양말 제품
#> - 메디솔, 신발과 양말
#> - 루프로, 양말 디자인
#> - 브이슬립, 양말
4 요약
한글은 영어에 비해 토큰 크기가 크다. 이를 위해서 text-davinci-003
모델이 소화할 수 있는 토큰보다 크기를 줄여야한다. 대한민국 대통령 취임사 중 박근혜 대통령 취임사에서 대략 2,000 토큰 크기를 대상으로 문서 요약을 수행해보자.
from langchain import OpenAI, PromptTemplate, LLMChain
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains.mapreduce import MapReduceChain
from langchain.prompts import PromptTemplate
= OpenAI(temperature=0)
llm
= CharacterTextSplitter()
text_splitter
with open('data/state_of_the_union.txt') as f:
# with open('data/취임사.txt') as f:
= f.read()
inaugural_address
= text_splitter.split_text(inaugural_address)
texts
from langchain.docstore.document import Document
= [Document(page_content=t) for t in texts[:]]
docs
from langchain.chains.summarize import load_summarize_chain
= load_summarize_chain(llm, chain_type="map_reduce")
chain
chain.run(docs)#> Error: RuntimeError: Failed to import transformers.models.gpt2.configuration_gpt2 because of the following error (look up to see its traceback):
#> Failed to import transformers.onnx.config because of the following error (look up to see its traceback):
#> DLL load failed while importing _imaging: 지정된 모듈을 찾을 수 없습니다.