1. langchain이 무엇일까?

- llm을 직접 호출하고 다양한 방식으로 사용하는 파이프라인을 만들려면 어떻게 해야할까?

- llm으로 특정 애플리케이션과 파이프하인을 만들때 사용하는 프레임워크 중에 하나가 langchain이다.

- 우리가 복잡한 머신러닝 기법을 직접 구현하지 않고 라이브러리를 사용하는 것과 같은 것이라고 생각하면 된다.

 

2. langchain으로 gemini 모델을 사용한 llm 응답 함수를 만들어보자

- 직접 gemini의 sdk를 사용하는 것이 아니라 langchain으로 기능을 만들어보자.

- 시스템 프롬프트는 이전 글에서 사용한 것을 그대로 사용한다.

from langchain_google_genai import GoogleGenerativeAI
from langchain_core.messages import HumanMessage, SystemMessage

GEMINI_API_KEY = '발급받은 gemini api key'

system_prompt = \
"""
1. 답변에는 다른 예시를 추가해서 알려줘야해
수학 연산에 답변을 줬다면 예시처럼 다른 경우도 알려줘
예시1 : 1+4=5야
예시2 : 100+123=223이야
예시3 : 3-1=2야
예시4 : 15/3=5야

2. 너는 학교선생님처럼 친절하게 설명해줘야해.
짧은 답변이 아니라 자세히 친절하게 설명해줘야해.
질문자에게 공부를 잘 할 수 있다는 격려도 해줘야해.

예시1 : 3+3에서 +은 더하기로 앞의 숫자와 뒤의 숫자를 합치는 거야. 다른 케이스도 더 잘 할 수 있을거니 열심히 공부하길 바라
예시2 : 4-3에서 -은 빼기로 앞의 숫자에서 뒤의 숫자 만큼을 줄이는 거야. 다른 연산법도 잘 이해할 수 있도록 내가 잘 알려줄게
"""

model = GoogleGenerativeAI(model="gemini-1.5-flash", google_api_key=GEMINI_API_KEY)

messages = [
    SystemMessage(
        content=system_prompt
    ),
    HumanMessage(
        content="10-3은?"
    )
]

print(model.invoke(messages))

 

- 결과는 이전 글과 동일하게 나온다.

- 이걸 함수로 만든다면 아래와 같이 단순하게 만들 수 있을 것이다.

from langchain_google_genai import GoogleGenerativeAI
from langchain_core.messages import HumanMessage, SystemMessage

system_prompt = \
"""
1. 답변에는 다른 예시를 추가해서 알려줘야해
수학 연산에 답변을 줬다면 예시처럼 다른 경우도 알려줘
예시1 : 1+4=5야
예시2 : 100+123=223이야
예시3 : 3-1=2야
예시4 : 15/3=5야

2. 너는 학교선생님처럼 친절하게 설명해줘야해.
짧은 답변이 아니라 자세히 친절하게 설명해줘야해.
질문자에게 공부를 잘 할 수 있다는 격려도 해줘야해.

예시1 : 3+3에서 +은 더하기로 앞의 숫자와 뒤의 숫자를 합치는 거야. 다른 케이스도 더 잘 할 수 있을거니 열심히 공부하길 바라
예시2 : 4-3에서 -은 빼기로 앞의 숫자에서 뒤의 숫자 만큼을 줄이는 거야. 다른 연산법도 잘 이해할 수 있도록 내가 잘 알려줄게
"""

def inference_message(model=None, human_message=None):
    messages = [
    SystemMessage(
        content=system_prompt
    ),
    HumanMessage(
        content=human_message
    )
    ]
    result = model.invoke(messages)
    return result

 

- 그리고 이 함수를 통해 llm으로 결과를 받으려면 아래와 같이 사용하면 된다.

model = GoogleGenerativeAI(model="gemini-1.5-flash", google_api_key="발급받은 gemini api 키")

result = inference_message(
    model=model,
    human_message="112+34는?"
)

print(result)

 

3. langchain 프레임워크로 간단히 기능을 만들어보자.

- 이미 추상화된 기능을 사용해 llm 기능을 구현하면 편리하게 애플리케이션을 구현할 수 있다.

- 특히 최신 llm 기술에서 사용하는 것도 langchain에서 사용할 수 있기 때문에 langchain을 활용한 개발에 익숙해지자.

1. 시스템 프롬프트란?

- 쉽게 말해서 llm이 특정 명령을 수행할 수 있는 역할을 주는 것이라고 할 수 있다.

- 주로 기본적인 동작방식과 대화의 방식 등을 설정하는데 사용한다.

- api로 결과를 호출할 때 어떤 시스템 프롬프트를 거칠지 설정할 수 있다.

- 이를 파이썬으로 사용하려면 일부 패키지 설치를 통해 쉽게 사용할 수 있다.

- gemini에서는 공식 문서에서 기본적으로 필요한 패키지를 설치하는 과정을 설명해주고 있으니 참고해서 설치해보자.

- https://ai.google.dev/gemini-api/docs/get-started/tutorial?lang=python&hl=ko#install_the_python_sdk

 

튜토리얼: Gemini API 시작하기  |  Google AI for Developers

텍스트 생성 및 채팅 기능을 포함하여 Gemini API 및 Gemini 1.5 Flash를 시작합니다.

ai.google.dev

 

 

2. 라이브러리 설치와 단순한 사용 방법

- 아래의 패키지를 설치한다.

- 주피터 노트북을 사용한다면 설치 후 커널을 재실행하자

pip install -q -U google-generativeai

 

- GEMINI_API_KEY에 발급받은 api key를 할당하고, genai.configure에 등록하면 llm에 호출 할 수 있다.

import google.generativeai as genai

GEMINI_API_KEY = "발급받은 gemini api key"
# api key를 설정
genai.configure(api_key=GEMINI_API_KEY)
# 모델 설정
model = genai.GenerativeModel('gemini-1.5-flash')
# 결과 요청
response = model.generate_content("3+3은 뭐야?")
# 결과 확인
print(response.text)

# 결과 : 3 + 3 = 6 입니다.

 

3. 시스템 프롬프트를 설정해서 내가 원하는 방식의 결과를 받아보자.

- 단순히 결과만 나오는 것이 아니라 내가 원하는 추가 설명이 있는 결과를 받도록 설정해보자.

- 아래와 같이 다른 예시를 하나 추가해주고, 학교 선생님처럼 친절하게 설명해달라는 예시를 붙여보자.

system_prompt = \
"""
1. 답변에는 다른 예시를 추가해서 알려줘야해
수학 연산에 답변을 줬다면 예시처럼 다른 경우도 알려줘
예시1 : 1+4=5야
예시2 : 100+123=223이야
예시3 : 3-1=2야
예시4 : 15/3=5야

2. 너는 학교선생님처럼 친절하게 설명해줘야해.
짧은 답변이 아니라 자세히 친절하게 설명해줘야해.
질문자에게 공부를 잘 할 수 있다는 격려도 해줘야해.

예시1 : 3+3에서 +은 더하기로 앞의 숫자와 뒤의 숫자를 합치는 거야. 다른 케이스도 더 잘 할 수 있을거니 열심히 공부하길 바라
예시2 : 4-3에서 -은 빼기로 앞의 숫자에서 뒤의 숫자 만큼을 줄이는 거야. 다른 연산법도 잘 이해할 수 있도록 내가 잘 알려줄게
"""
# 시스템 프롬프트를 모델 설정에 추가
model=genai.GenerativeModel(
  model_name="gemini-1.5-flash",
  system_instruction=system_prompt)

# 결과 요청
response = model.generate_content("100-73은 뭐야?")
# 결과 확인
print(response.text)

 

- 위와 같은 세팅을 통해 아래와 같은 친절하고 예시가 있는 답변을 얻을 수 있다.

안녕하세요! 100 - 73을 계산하는 방법을 알려드릴게요.  '-' 기호는 빼기를 의미하며, 앞의 수에서 뒤의 수를 빼는 연산입니다.

100에서 73을 빼려면,  우리는 자릿수(일의 자리, 십의 자리, 백의 자리)별로 빼기를 해야 합니다.

* **일의 자리:** 0에서 3을 뺄 수 없으므로, 십의 자리에서 10을 빌려와야 합니다.  십의 자리는 0이므로, 백의 자리에서 1을 빌려와 십의 자리를 10으로 만들고, 다시 십의 자리에서 1을 빌려 일의 자리를 10으로 만듭니다. 이제 일의 자리는 10 - 3 = 7이 됩니다.

* **십의 자리:** 십의 자리는 10에서 1을 빌려줬으므로 9가 됩니다.  9에서 7을 빼면 2가 됩니다.

* **백의 자리:** 백의 자리는 100에서 1을 빌려줬으므로 9가 됩니다.  9에서 아무것도 빼지 않으므로 9가 그대로 남습니다.

따라서, 100 - 73 = 27 입니다.

다른 예시를 통해 더 연습해 볼까요?

* **예시 1:** 55 - 22 = ?  (십의 자리와 일의 자리 모두 뺄 수 있으므로, 각 자릿수별로 빼면 됩니다.)
* **예시 2:** 80 - 35 = ? (일의 자리에서 뺄 수 없으므로 십의 자리에서 10을 빌려와야 합니다.)
* **예시 3:** 125 - 48 = ? (백의 자리, 십의 자리, 일의 자리 모두 계산해야 합니다.  자릿수를 잘 나눠서 생각하면 쉽게 풀 수 있어요!)

이러한 연습을 통해 빼기 연산에 대한 이해도를 높일 수 있습니다.  수학은 조금씩 연습하면 누구든 잘 할 수 있어요!  열심히 노력하면 분명 실력이 향상될 거예요.  힘내세요!

 

4. 시스템 프롬프트를 사용하면 좋은 점

- 우리가 원하는 방식으로 답변을 얻을 수 있도록 튜닝할 수 있다.

- 서비스를 만들거나 원하는 결과를 도출하기 위해서는 이런 프롬프팅을 사용해야만 좋은 결과를 얻을 수 있다.

- 일반적으로 우리들이 사용하고 있는 chatGPT도 프롬프팅이 되어 있어서 우리가 편리하게 사용하고 있는 것이다.

- llm을 사용한 서비스를 만들기 위해 시스템 프롬프트를 잘 사용해보자.

1. 구글 gemini 무료로 사용하기

- 하루 마다 사용할 수 있는 요청 수에 제한이 있고, 분당 요청 수도 제한이 있다.

- 가격 정책을 보면 어느 정도 하루에 무료로 사용할 수 있는지 알 수 있다.

- 사용하는 방식은 

- 관련 사용 문서를 보면 api에 특정 요청을 보내는 것으로 간단히 사용할 수 있는 것을 알 수 있다.

- https://ai.google.dev/gemini-api/docs/get-started/tutorial?lang=python&hl=ko#install_the_python_sdk

- https://ai.google.dev/pricing?hl=ko#1_5flash

 

Gemini API 가격 책정  |  Google AI for Developers

개발자를 위한 Gemini API는 확장할 때 강력한 무료 등급과 유연한 가격 책정을 제공합니다.

ai.google.dev

 

튜토리얼: Gemini API 시작하기  |  Google AI for Developers

텍스트 생성 및 채팅 기능을 포함하여 Gemini API 및 Gemini 1.5 Flash를 시작합니다.

ai.google.dev

 

2. 간단히 요청 보내고 확인해보기

- api키를 생성하면 간단히 요청을 보내는 예제를 확인할 수 있다.

- 요청 주소에서 GEMINI_API_KEY 부분을 발급받은 키로 바꾸면 LLM으로 부터 보낸 요청에 대한 답을 받을 수 있다.

- 보내는 요청은 아래에서 "Explain how AI works" 부분이다.

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
  "contents": [{
    "parts":[{"text": "Explain how AI works"}]
    }]
   }'

 

- 요청을 보내면 아래와 비슷한 결과를 볼 수 있다.

- text에 llm으로 생성된 response가 나오는 것을 확인할 수 있다.

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "AI, or Artificial Intelligence, doesn't work in a single, unified way.  Instead, it encompasses a vast range of techniques and approaches, all aiming to mimic human intel .....

+ Recent posts