google ai studio에서 제미나이 api키를 발급받고 파이썬 프레임워크인 랭체인을 사용하여 제미나이와 대화를 주고받는 방법에 대한 포스팅입니다
1.구글 ai 스튜디오 접속하기
google ai studio에 접속해 주고 차례대로 가입해 주면 해당 페이지가 나옵니다 (이미지가 지워져서 가입부터 찍은 거는 날아갔네요ㅠ) 오른쪽 상단에 API 키 만들기를 누르면 키 이름과 가져올 프로젝트 작성해주고 키를 만들어줍니다
만들고 나서 왼쪽에 키값이 나오게 되는데 클릭하면 API 키, 프로젝트 이름 등을 확인할 수 있습니다. 이제 API 키를 복사해두고 파이썬에서 사용하면 됩니다
2.LangChain 설치와 세팅
pip install python-dotenv
pip install langchain-core
pip install langchain-google-genai
위에 pip를 통해 랭체인을 설치를 진행 합니다. 각 패키지에 대한 설명은 아래와 같다 - python-dotenv:환경 변수 env관리 하는 패키지 - langchain-core:랭체인 핵심 패키지 - langchain-google-genai:Google Generative AI (Gemini) 연동 패키지
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage,SystemMessage ,AIMessage
from dotenv import load_dotenv
load_dotenv() #.env파일에 넣어두고 불러오기
# 모델 고르기
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
temperature=0.1
)
설치한 패키지들을 위에처럼 코드를 작성해 주고
ChatGoogleGenerativeAI
에 사용할 모델를 작성해줍니다
참고로 챗지피티,클로드 등 다른 모델 사용할 거면 langchain-google-genai
말고 다른 걸 설치해야 된다.
temperature
은 ai에게 창의성이나 무작위성을 조절하는 걸로
일을 받아 어떻게 처리할지 마음가짐(ai이긴하지만)을 줘서 결과에 영향을 주게 된다
값 | 설명 | 특징 |
---|---|---|
0 |
가장 보수적 | 매번 같은 입력에 거의 같은 답변을 냄 (정확성↑, 다양성↓) |
0.3~0.7 |
균형형 | 적당히 창의적이면서도 일관성 유지 |
1.0 이상 |
매우 창의적 | 답변이 다양해지고, 가끔은 비논리적이거나 실수 포함 가능 |
3.SystemMessage와 HumanMessage
랭체인에서 llm과 대화를 할 때 시스템 메시지와 휴먼 메시지가 있다 시스템 메시지는 ai에게 어떤 역할을 해야 하는지 알려주는 것으로 llm모델이 응답받은 값을 어떻게 처리해야 되는지를 적어주는 것이다. 휴먼 메시지는 실제 사용자가 llm모델한테 시킬 일을 입력하는 부분이다
#import는 생략함
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
temperature=0.1
)
msg = [
SystemMessage(content="사용자의 질문을 미국 현지인처럼 영어로 번역해 줘"),
HumanMessage(content="내일 아침 헬스장을 갈거야")
]
result = llm.invoke(msg)
#invoke:LLM(언어모델)을 한 번 호출하여 결과를 바로 반환하는 메서드
print(result.content) #content를 사용해야된다
content를 안 적으면 토큰이 얼마나 썼는지 뭔 모델인지 다양한 정보가 나옴 llm이 내가 보낸 요청에 답변만 보고 싶으면 content를 적어 확인하면 된다
4.AIMessage와 HumanMessage 조합
AI메시지는 이전에 llm모델이 대답한 내용을 적는 부분이다 대화를 맥락 있게 이어가기 위에 그전에 본인이 어떤 응답을 했는지 적어주면 된다. 일종의 채팅방 같은 것으로 휴먼메시지에 내가 llm에게 대화한 내용이 적혀있고 AI메시지에는 llm이 이야기한 내용을 적으면 된다.
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
temperature=0.1
)
msg = [
SystemMessage(content="고등학교 선생님 처럼 말해줘"),
HumanMessage(content="모의고사 수학6등급으로 망했어요 어떻게 공부해야될까요?"),
AIMessage(content="앞으로 어떻게 공부해야될지 설명해줄게")
]
result = llm.invoke(msg)
print(result.content)
예제 코드로 제미나이가 고등학교 선생님이라는 역할을 부여해 주었다 그리고 학생을 상담을 받는 과정이다.HumanMessage 뒤에 AIMessage가 이어지듯이 대화의 흐름을 마쳐주면 LLM이 아래와 같이 상황에 몰입하여 답변을 해준다. (코드 돌려 나온 결과는 아래와 같고 호출할 때마다 답변은 의미는 비슷해도 내용은 다르게 나온다.)
근데 AIMessage와 HumanMessage의 조합은 단발성으로 단순히 2~3번 테스트 느낌으로 맥락 유지가 필요할 때 사용한다.
보통 RunnableWithMessageHistory
라는 걸 사용하여 세션별로 처리가 가능하다.(llm과 대화한 내용을 채팅방 별로 여러 개를 만들어 관리하는 느낌이다... 이건 공부가 덜 돼서 다음번에..끝)
댓글 쓰기