💬 "삼성전자랑 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 대화 설계에 최적
시스템 트레이딩 응용 매수 전략, 분할 타이밍, 금액 계산까지 가능!
Posted by 제이브레인
,