# OpenAI LLM

## LangChain: OpenAI LLM

* OpenAI key 발급: https://platform.openai.com/docs/guides/gpt/completions-api
* OpenAI saftey protection

```python
!echo "OPENAI_API_KEY=YOUR_OPENAI_API_KEY" >> .env

import os
from dotenv import load_dotenv  

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
```

```python
#%pip install langchain
#%pip install openai
#%pip install python-dotenv
```

```
Requirement already satisfied: python-dotenv in /home/kubwa/anaconda3/envs/langchain/lib/python3.9/site-packages (1.0.0)
Note: you may need to restart the kernel to use updated packages.
```

```python
!echo "OPENAI_API_KEY=<Your_OpenAI_Key" >> .env
```

```python
import os
from dotenv import load_dotenv  

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
```

### 1. LangChain OpenAI

```python
from langchain.llms import OpenAI

gpt_inst = OpenAI(
    model_name="gpt-3.5-turbo-instruct", 
    openai_api_key=api_key,
)
gpt_inst.predict('why python is the most popular language? answer in Korean')
```

```
'\n\n파이썬은 다양한 분야에서 사용할 수 있는 범용 프로그래밍 언어이기 때문입니다. 먼저, 파이썬은 배우기 쉽고 읽기 쉬운 문법을 가지고 있어 입문자들에게 매우 적합합니다. 또한, 파이썬은 다양한 라이브러리와 프레임워크를 제공하여 빠르고 효율적인 개발을 가능하게 합니다. 이를 통해 많은 개발자들이 파이썬을 선호하고 있습니다.\n\n또한, 파이썬은 데이터 분석, 인공지능, 웹 개발 등 다양한 분야에서 활용되고 있어 유연하게 사용할 수 있습니다. 또한, 파이썬은 오픈 소스이며 무료로 사용할 수 있'
```

```python
from langchain.chat_models import ChatOpenAI

chatgpt = ChatOpenAI(model_name="gpt-3.5-turbo")
answer = chatgpt.predict("why python is the most popular language? answer in Korean")

print(answer)
```

```
파이썬이 가장 인기 있는 언어인 이유는 다양한 이유가 있습니다. 

첫째로, 파이썬은 배우기 쉽고 사용하기 간편한 언어입니다. 문법이 간결하고 직관적이어서 초보자도 쉽게 익힐 수 있습니다. 

둘째로, 파이썬은 다양한 분야에서 사용될 수 있는 범용 언어이기 때문에 다양한 프로젝트나 작업에 적합합니다. 데이터 분석, 인공지능, 웹 개발 등 다양한 분야에서 활용되고 있습니다.

또한, 파이썬은 커뮤니티가 활발하고 다양한 라이브러리와 모듈이 지원되기 때문에 개발을 빠르고 효율적으로 할 수 있습니다.

이러한 이유들로 인해 파이썬은 가장 인기 있는 프로그래밍 언어 중 하나로 자리잡게 되었습니다.
```

### 2. Paramter 조절

#### Temperarure

```python
chatgpt = ChatOpenAI(
    model_name="gpt-3.5-turbo", 
    temperature = 0
)

answer = chatgpt.predict("why python is the most popular language? answer in Korean")
print(answer)
```

```
파이썬이 가장 인기 있는 언어인 이유는 다양한 이유가 있습니다. 먼저 파이썬은 문법이 간단하고 읽기 쉬워 초보자도 쉽게 배울 수 있습니다. 또한 다양한 라이브러리와 프레임워크가 있어 다양한 분야에서 활용할 수 있습니다. 또한 데이터 과학, 인공지능, 웹 개발 등 다양한 분야에서 사용되는 범용 언어이기도 합니다. 이러한 이유들로 파이썬은 많은 사람들에게 선호되는 언어가 되었습니다.
```

```python
chatgpt = ChatOpenAI(
    model_name="gpt-3.5-turbo", 
    temperature = 0.9
)

answer = chatgpt.predict("why python is the most popular language? answer in Korean")
print(answer)
```

```
파이썬이 가장 인기 있는 프로그래밍 언어인 이유는 여러 가지가 있습니다. 먼저, 파이썬은 배우기 쉽고 사용하기 편리한 문법을 가지고 있어 초보자도 쉽게 프로그래밍을 시작할 수 있습니다. 또한 다양한 분야에서 사용되는 범용 언어로서 데이터 분석, 인공지능, 웹 개발 등 다양한 분야에서 활용되고 있습니다. 또한 파이썬은 오픈 소스이기 때문에 무료로 사용할 수 있고 커뮤니티도 활발하여 다양한 라이브러리와 모듈을 활용할 수 있습니다. 이러한 이유들로 파이썬은 많은 사람들에게 사랑받고 있고 가장 인기 있는 프로그래밍 언어 중 하나로 자리 잡았습니다.
```

#### Streaming

```python
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

chatgpt = ChatOpenAI(
    model_name="gpt-3.5-turbo", 
    streaming=True, 
    callbacks=[StreamingStdOutCallbackHandler()], 
    temperature = 1
)
answer = chatgpt.predict("why python is the most popular language? answer in Korean")
```

```
파이썬은 간결하고 읽기 쉬운 코드를 작성할 수 있어서 프로그래밍을 처음 배우는 사람들에게 적합하다. 또한 다양한 분야에서 사용되며, 데이터 분석, 인공지능, 웹 개발 등의 다양한 작업을 할 수 있기 때문에 다양한 개발 환경에서 사용되고 있다. 또한 파이썬 커뮤니티가 활발하고 다양한 라이브러리와 도구를 제공하기 때문에 많은 사람들이 파이썬을 선택하고 있는 것이다.
```

```python
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage

chatgpt = ChatOpenAI(
    model_name="gpt-3.5-turbo", 
    temperature = 0)

messages = [
    SystemMessage(
        content="You are a helpful assistant that translates English to Korean."
    ),
    HumanMessage(
        content="I love langchain."
    ),
]
response_langchain = chatgpt(messages)
response_langchain
```

```
AIMessage(content='저는 랭체인을 좋아해요.')
```

```python
response_langchain.content
```

```
'저는 랭체인을 좋아해요.'
```

### 3. Prompt 실습

* SystemMessage: ChatGPT에게 역할을 부여하여, 대화의 맥락을 설정하는 메세지
* HumanMessage: 사용자가 ChatGPT에게 대화 또는 요청을 위해 보내는 메세지

```python
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage

chat = ChatOpenAI(
    temperature=1, 
    streaming=True, 
    callbacks=[StreamingStdOutCallbackHandler()])

answer = chat(
  [
    SystemMessage(content="당신은 공부 계획을 세워주는 스터디 플래너 머신입니다. 사용자의 공부 주제를 입력 받으면, 이를 학습하기 위한 공부 계획을 작성합니다."),
    HumanMessage(content="Large Language Model에 대해서 공부하고 싶어요.")
  ]
)
```

```
좋습니다! Large Language Model에 대해 공부하기 위한 계획을 세워보겠습니다.

**주제: Large Language Model 공부 계획**

1. **이해하기**
   - Large Language Model이란 무엇인지에 대한 기본 개념 이해
   - Large Language Model이 어떻게 작동하는지에 대한 이해
   - Large Language Model의 주요 응용 분야

2. **관련 논문 조사**
   - 대표적인 Large Language Model 관련 논문들을 살펴보면서 선행 연구 리뷰
   - BERT, GPT 등의 모델들에 대해 자세히 파악

3. **실제 구현 및 실험**
   - Large Language Model을 실제로 구현해보며 학습시켜보기
   - 특정 데이터셋을 활용하여 실험을 통해 모델 성능 평가

4. **깊이있는 이해 추구**
   - Large Language Model 관련해서 최신 트렌드나 업데이트된 정보들을 주기적으로 습득
   - 관련 커뮤니티나 웹사이트를 통해 연구 동향을 계속해서 살펴보기

5. **정리 및 공유**
   - 학습한 내용을 정리하고 개념을 완전히 이해하도록 함
   - 다른 사람과 토론하거나 블로그 등을 통해 공유

위의 공부 계획을 참고하여 Large Language Model에 대한 깊이 있는 이해를 목표로 열심히 공부해 보시기 바랍니다. 언제든지 질문이나 도움이 필요하시면 말씀해주세요!
```

```python
#ChatGPT의 대답은 AIMessage라는 딕셔너리 형태로 제공
answer
```

```
AIMessageChunk(content='좋습니다! Large Language Model에 대해 공부하기 위한 계획을 세워보겠습니다.\n\n**주제: Large Language Model 공부 계획**\n\n1. **이해하기**\n   - Large Language Model이란 무엇인지에 대한 기본 개념 이해\n   - Large Language Model이 어떻게 작동하는지에 대한 이해\n   - Large Language Model의 주요 응용 분야\n\n2. **관련 논문 조사**\n   - 대표적인 Large Language Model 관련 논문들을 살펴보면서 선행 연구 리뷰\n   - BERT, GPT 등의 모델들에 대해 자세히 파악\n\n3. **실제 구현 및 실험**\n   - Large Language Model을 실제로 구현해보며 학습시켜보기\n   - 특정 데이터셋을 활용하여 실험을 통해 모델 성능 평가\n\n4. **깊이있는 이해 추구**\n   - Large Language Model 관련해서 최신 트렌드나 업데이트된 정보들을 주기적으로 습득\n   - 관련 커뮤니티나 웹사이트를 통해 연구 동향을 계속해서 살펴보기\n\n5. **정리 및 공유**\n   - 학습한 내용을 정리하고 개념을 완전히 이해하도록 함\n   - 다른 사람과 토론하거나 블로그 등을 통해 공유\n\n위의 공부 계획을 참고하여 Large Language Model에 대한 깊이 있는 이해를 목표로 열심히 공부해 보시기 바랍니다. 언제든지 질문이나 도움이 필요하시면 말씀해주세요!')
```

```python
#content를 key값으로 호출하여 를 통해 text만 출력
print(answer.content)
```

```
좋습니다! Large Language Model에 대해 공부하기 위한 계획을 세워보겠습니다.

**주제: Large Language Model 공부 계획**

1. **이해하기**
   - Large Language Model이란 무엇인지에 대한 기본 개념 이해
   - Large Language Model이 어떻게 작동하는지에 대한 이해
   - Large Language Model의 주요 응용 분야

2. **관련 논문 조사**
   - 대표적인 Large Language Model 관련 논문들을 살펴보면서 선행 연구 리뷰
   - BERT, GPT 등의 모델들에 대해 자세히 파악

3. **실제 구현 및 실험**
   - Large Language Model을 실제로 구현해보며 학습시켜보기
   - 특정 데이터셋을 활용하여 실험을 통해 모델 성능 평가

4. **깊이있는 이해 추구**
   - Large Language Model 관련해서 최신 트렌드나 업데이트된 정보들을 주기적으로 습득
   - 관련 커뮤니티나 웹사이트를 통해 연구 동향을 계속해서 살펴보기

5. **정리 및 공유**
   - 학습한 내용을 정리하고 개념을 완전히 이해하도록 함
   - 다른 사람과 토론하거나 블로그 등을 통해 공유

위의 공부 계획을 참고하여 Large Language Model에 대한 깊이 있는 이해를 목표로 열심히 공부해 보시기 바랍니다. 언제든지 질문이나 도움이 필요하시면 말씀해주세요!
```
