💬 "삼성전자랑 NAVER를 5회로 나눠서 매수하고 싶은데… 어떤 가격에 얼마씩 살까?"
이걸 누구한테 물어볼까요?
- 친구? "몰라. 난 코인 함."
- 애널리스트? "컨퍼런스콜 듣고 연락드릴게요."
- AI? "5초면 됩니다."
그래서 오늘은 바로 이 질문을 Google Gemini + LangChain을 이용해 AI에게 물어보는 시스템 트레이딩 예제를 소개하려고 해요.
게다가 AI에게 “예전에 이런 요청에는 이렇게 대답했었지~” 라고 **예시(Few-shot Example)**도 보여주고,
비슷한 스타일로 똑같이 답변해달라고 요청하는 방식, 바로 Few-shot Prompting을 사용합니다!
🧠 Few-shot Prompting이 뭐냐고요?
말 그대로 **“몇 개의 예제(Few Shots)”**를 보여주고, AI가 비슷한 스타일로 새로운 요청에 답변하도록 유도하는 방식입니다.
예를 들면 이런 거죠:
Q: 강아지로 삼행시 지어줘
A: 강: 강하게! 아: 아침마다! 지: 지져댄다!
Q: 고양이로 삼행시 지어줘
A: 고: 고운 눈망울~ 양: 양탄자 위에서~ 이: 이불 안 파고든다~
👉 이렇게 예제를 보여주면,
Q: 햄스터로 삼행시 지어줘
➡ AI가 자동으로 센스 있게 이어서 삼행시 지어줍니다!
오늘 우리가 만들 건 이것의 주식 매수 전략 버전입니다.
🎯 목표
고객이 말합니다:
“삼성전자, NAVER를 5회 분할 매수하고 싶어요. 총 1,000만 원이 있습니다.”
👉 그러면 AI가 다음과 같은 전략 테이블을 자동으로 만들어줍니다!
종목명 | 회차 | 매수가(예상) | 매수금액 (원) |
삼성전자 | 1 | 75,000원 | 100,000 |
... | ... | ... | ... |
NAVER | 5 | 206,000원 | 100,000 |
🛠 Step 1. 필요한 도구를 불러옵니다
import os
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.prompts import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
ChatPromptTemplate,
)
from langchain.prompts.prompt import PromptTemplate
- os: API 키를 숨기기 위해!
- langchain_google_genai: Google Gemini와 대화하기 위해!
- PromptTemplate: AI에게 말 걸기 위한 말풍선 템플릿입니다.
🔐 Step 2. Gemini와 연결하기
os.environ["GOOGLE_API_KEY"] = "YOUR_GOOGLE_API_KEY"
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0.4)
여기서 temperature는 AI의 창의성 온도입니다.
0.4 정도면 살짝 유연하면서도 안정적인 스타일!
🧾 Step 3. 예시를 준비합니다 (Few-shot 핵심!)
examples = [
{
"question": "삼성전자, 카카오를 5회 분할 매수하고 싶어요. 총 투자금은 1000만 원입니다.",
"answer": """ ... <표 형식> ... """
}
]
예전에 누가 이런 요청을 했고,
AI는 이렇게 답했다는 샘플 대화를 넣어주는 겁니다.
👉 이게 바로 Few-shot Prompting!
✍️ Step 4. 예시 포맷을 정의합니다
example_prompt = PromptTemplate(
input_variables=["question", "answer"],
template="고객 요청: {question}\n응답:\n{answer}"
)
사람이 하는 말 → AI의 대답 형식으로 정리합니다.
여기서 "고객 요청"이라는 말이 들어가면 AI도 뭔가 증권사 느낌으로 응답하게 돼요 😎
🧱 Step 5. 프롬프트 조립하기
formatted_examples = "\n\n".join([example_prompt.format(**ex) for ex in examples])
예제들을 싹 다 문자열로 붙입니다.
new_question = "삼성전자, NAVER를 5회 분할 매수하고 싶어요. 총 투자금은 1000만 원입니다."
이게 오늘 고객이 실제로 묻는 질문!
🧠 Step 6. AI에게 전체 프롬프트를 던집니다
full_prompt = f"""아래는 고객의 주식 분할 매수 요청에 대한 예시입니다:
{formatted_examples}
이제 아래 요청에 따라 각 종목별로 분할 매수 전략을 표로 작성해주세요:
고객 요청: {new_question}
응답:
"""
🎩 Step 7. AI 역할 설정
system_message_prompt = SystemMessagePromptTemplate.from_template(
"너는 투자 전략을 분석해 표로 작성하는 AI 트레이딩 어시스턴트야. 요청에 따라 종목별 분할 매수 전략을 테이블로 제안해줘."
)
👉 "넌 이제부터 말 잘 듣는 증권사 어시스턴트야"
역할을 부여해줘야 AI가 딴소리 안 합니다.
🤖 Step 8. Gemini에게 질문하고, 답변받기
chat_prompt = ChatPromptTemplate.from_messages([
system_message_prompt,
HumanMessagePromptTemplate.from_template("{input}")
])
messages = chat_prompt.format_prompt(input=full_prompt).to_messages()
response = gemini(messages)
print(response.content)
✅ 전체 코드 (Gemini + LangChain + Few-shot 방식)
import os
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.prompts import (
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
ChatPromptTemplate,
)
from langchain.prompts.prompt import PromptTemplate
# 1. API 키 설정
os.environ["GOOGLE_API_KEY"] = "YOUR_GOOGLE_API_KEY" # 실제 키로 교체
# 2. Gemini 모델 로드
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0.4)
# 3. Few-shot 예시
examples = [
{
"question": "삼성전자, 카카오를 5회 분할 매수하고 싶어요. 총 투자금은 1000만 원입니다.",
"answer": """
| 종목명 | 회차 | 매수가(예상) | 매수금액 (원) |
|----------|------|---------------|----------------|
| 삼성전자 | 1 | 74,500원 | 100,000 |
| 삼성전자 | 2 | 74,000원 | 100,000 |
| 삼성전자 | 3 | 73,500원 | 100,000 |
| 삼성전자 | 4 | 73,000원 | 100,000 |
| 삼성전자 | 5 | 72,500원 | 100,000 |
| 카카오 | 1 | 45,000원 | 100,000 |
| 카카오 | 2 | 44,500원 | 100,000 |
| 카카오 | 3 | 44,000원 | 100,000 |
| 카카오 | 4 | 43,500원 | 100,000 |
| 카카오 | 5 | 43,000원 | 100,000 |
※ 각 종목에 500만 원씩 균등 분배했고, 매수가는 시장 등락을 감안해 회차별로 하향 조정했습니다.
"""
}
]
# 4. 프롬프트 포맷
example_prompt = PromptTemplate(
input_variables=["question", "answer"],
template="고객 요청: {question}\n응답:\n{answer}"
)
# 5. 예제 조합
formatted_examples = "\n\n".join([example_prompt.format(**ex) for ex in examples])
# 6. 새로운 요청
new_question = "삼성전자, NAVER를 5회 분할 매수하고 싶어요. 총 투자금은 1000만 원입니다."
# 7. 최종 프롬프트 조립
full_prompt = f"""아래는 고객의 주식 분할 매수 요청에 대한 예시입니다:
{formatted_examples}
이제 아래 요청에 따라 각 종목별로 분할 매수 전략을 표로 작성해주세요:
고객 요청: {new_question}
응답:
"""
# 8. 시스템 메시지 (역할 부여)
system_message_prompt = SystemMessagePromptTemplate.from_template(
"너는 투자 전략을 분석해 표로 작성하는 AI 트레이딩 어시스턴트야. 요청에 따라 종목별 분할 매수 전략을 테이블로 제안해줘."
)
# 9. 사용자 메시지 템플릿
human_message_prompt = HumanMessagePromptTemplate.from_template("{input}")
# 10. ChatPromptTemplate 조립
chat_prompt = ChatPromptTemplate.from_messages([
system_message_prompt,
human_message_prompt
])
# 11. 메시지 생성 및 Gemini 호출
messages = chat_prompt.format_prompt(input=full_prompt).to_messages()
response = gemini(messages)
# 12. 결과 출력
print(response.content)
✨ 그리고 드디어 나온 결과는?!
🧾 예시 출력 (Gemini의 답변 예)
| 종목명 | 회차 | 매수가(예상) | 매수금액 (원) |
|----------|------|---------------|----------------|
| 삼성전자 | 1 | 75,000원 | 100,000 |
| 삼성전자 | 2 | 74,500원 | 100,000 |
| 삼성전자 | 3 | 74,000원 | 100,000 |
| 삼성전자 | 4 | 73,500원 | 100,000 |
| 삼성전자 | 5 | 73,000원 | 100,000 |
| NAVER | 1 | 210,000원 | 100,000 |
| NAVER | 2 | 209,000원 | 100,000 |
| NAVER | 3 | 208,000원 | 100,000 |
| NAVER | 4 | 207,000원 | 100,000 |
| NAVER | 5 | 206,000원 | 100,000 |
※ 각 종목에 500만 원씩 분산 투자했으며, 회차별로 매수가를 낮춰 분할 매수 전략을 구성했습니다.
💡 마무리: 이것만 기억하세요!
Few-shot Prompting | 예시를 보여주고 비슷한 스타일로 AI가 응답하도록 유도 |
LangChain + Gemini | 고급 AI 대화 설계에 최적 |
시스템 트레이딩 응용 | 매수 전략, 분할 타이밍, 금액 계산까지 가능! |
'인공지능 > 랭체인' 카테고리의 다른 글
Gemini에게 주식 매수 맡겨봤습니다 (2) | 2025.07.01 |
---|---|
Gemini 에 사전 지식을 알려주자 (5) | 2025.06.28 |
Colab에서 LangChain + Gemini 실행하기 (2) | 2025.06.28 |
무료 Gemini API 사용법 (7) | 2025.06.25 |
인공지능 API 중에 무료로 써볼 수 있는것은? (9) | 2025.06.23 |