💬 "삼성전자랑 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 제이브레인
,

Google Gemini를 활용해서 마치 AI 증권사 직원처럼 행동하도록 만들고,
사용자가 입력한 주식 정보로 매수 전략을 제안받는 시스템 트레이딩 예제를 만들어볼 거예요.

말만 해도 설레죠?


🧾 예제 시나리오

"삼성전자 80%, 카카오 20% 비중으로 매수하고 싶어"
👉 그러면 Gemini가 "좋아요. 삼성전자는 현재 시장 흐름에 비춰볼 때... 카카오는..." 이렇게 전략을 세워주는 겁니다!


✅ Step 1. 필요한 라이브러리 호출

import os
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.prompts import (
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
    ChatPromptTemplate,
)

이건 마치 AI 증권사 오피스를 차리는 과정입니다.

  • os: API 키 등록용
  • ChatGoogleGenerativeAI: Gemini 모델 불러오기
  • PromptTemplate 시리즈: Gemini에게 업무를 시킬 말풍선들

🔐 Step 2. API 키 등록

os.environ["GOOGLE_API_KEY"] = "YOUR_GOOGLE_API_KEY"

Gemini와 연결할 수 있도록 **열쇠(API 키)**를 등록합니다.
증권사 직원도 보안 카드 찍어야 입장하잖아요? 😉


👨‍💼 Step 3. AI 증권맨 호출

gemini = ChatGoogleGenerativeAI(model="gemini-2.0-flash", temperature=0)

드디어 등장한 우리의 AI 트레이더!
temperature=0은 신중하고 일관된 판단을 원할 때 사용합니다.
(우린 아무래도 주식이라... 신중해야죠?)


🎓 Step 4. 역할을 부여합니다 – "너는 증권사 주식 매매 전문가야!"

template = (
    "너는 경험 많은 증권사 직원이야. "
    "사용자가 입력한 종목과 비중을 보고 매수 전략을 제안해줘. "
    "시장 상황도 간단히 고려해서 설명해줘."
)
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
 

Gemini에게 역할을 줘야 혼란스럽지 않아요.
“너는 그냥 챗봇이 아니고, 증권사 직원이야!” 라고 딱 못을 박습니다.


💬 Step 5. 사용자의 매수 의도 입력 템플릿 만들기

human_template = "{매수요청}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

사용자는 다음처럼 말할 수 있어요:

"삼성전자 80%, 카카오 20% 비중으로 1천만 원 매수하고 싶습니다."
"삼성전자 80%, 카카오 20% 비중으로 1천만 원 매수하고 싶습니다."

그걸 그대로 Gemini에게 전달할 템플릿입니다.


🧠 Step 6. 대화 프롬프트 조합하기

chat_prompt = ChatPromptTemplate.from_messages([
    system_message_prompt, human_message_prompt
])

이제 역할 설정사용자 질문을 하나로 묶어줍니다.
AI 트레이더가 고객의 요청을 정확히 이해할 수 있도록요.


🚀 Step 7. 요청 실행 – AI에게 주식 매수 전략 요청!

answer = gemini(chat_prompt.format_prompt(
    매수요청="삼성전자 80%, 카카오 20% 비중으로 1천만 원 매수하고 싶습니다."
).to_messages())

print(answer.content)

Gemini에게 요청을 보내면, 다음처럼 말해줄 수 있어요:

"현재 삼성전자는 반도체 업황 회복 기대감으로 강세를 보이고 있으며, 80% 집중 투자 전략은 유효합니다. 카카오는 기술적 반등 구간이지만 리스크 관리가 필요하므로 20% 비중은 적절합니다..."

와우! AI가 시장까지 고려한 전략을 말해줍니다. 😮


📦 Step 8. 전체 코드 보기

# 1. API KEY 저장을 위한 os 라이브러리 호출
import os

# 2. Google Gemini LLM 로드를 위한 라이브러리 호출
from langchain_google_genai import ChatGoogleGenerativeAI

# 3. 프롬프트 템플릿 관련 라이브러리 호출
from langchain.prompts import (
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
    ChatPromptTemplate,
)

# 4. Google Gemini API 키 환경변수에 저장
os.environ["GOOGLE_API_KEY"] = "YOUR_GOOGLE_API_KEY"  # 실제 API 키로 변경

# 5. Gemini 모델을 로드합니다.
gemini = ChatGoogleGenerativeAI(model="gemini-2.0-flash", temperature=0)

# 6. 역할 프롬프트 템플릿 정의
template = (
    "너는 경험 많은 증권사 직원이야. "
    "사용자가 입력한 종목과 비중을 보고 매수 전략을 제안해줘. "
    "시장 상황도 간단히 고려해서 설명해줘."
)
system_message_prompt = SystemMessagePromptTemplate.from_template(template)

# 7. 사용자가 입력할 매개변수 템플릿 선언
human_template = "{매수요청}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

# 8. ChatPromptTemplate에 system + human 메시지를 결합
chat_prompt = ChatPromptTemplate.from_messages([
    system_message_prompt, human_message_prompt
])

# 9. Gemini에게 매수 전략 요청!
answer = gemini(chat_prompt.format_prompt(
    매수요청="삼성전자 80%, 카카오 20% 비중으로 1천만 원 매수하고 싶습니다."
).to_messages())

# 10. 결과 출력
print(answer.content)
 

두구 두구 두둥~~ 결과는 다음과 같습니다.

## 삼성전자 80%, 카카오 20% 매수 전략 (1천만 원)

**현재 시장 상황:**

최근 시장은 금리 인상, 인플레이션 우려, 지정학적 리스크 등 다양한 요인으로 인해 변동성이 큰 상황입니다. 특히, 기술주 중심의 성장주들은 금리 인상에 민감하게 반응하며 조정세를 보이기도 합니다. 하지만 장기적인 관점에서 볼 때, 한국 경제를 이끄는 대장주인 삼성전자와 플랫폼 기업인 카카오는 여전히 매력적인 투자 대상입니다.

**매수 전략:**

1.  **분할 매수:** 현재 시장 변동성이 크므로, 1천만 원을 한 번에 모두 투자하기보다는 분할 매수를 통해 리스크를 관리하는 것이 좋습니다. 예를 들어, 3~4회에 걸쳐 나누어 매수하는 것을 고려해볼 수 있습니다.
2.  **삼성전자 (800만 원):**
    *   **장점:** 반도체 업황 회복 기대감, 안정적인 실적, 높은 배당 수익률
    *   **매수 시점:** 단기적인 주가 조정 시 매수 기회로 활용
    *   **투자 포인트:** 삼성전자는 메모리 반도체 시장의 선두 주자이며, 파운드리 사업 확장, 인공지능, 전장 등 미래 성장 동력 확보에 적극적으로 나서고 있습니다. 장기적인 관점에서 꾸준히 모아간다면 안정적인 수익을 기대할 수 있습니다.
3.  **카카오 (200만 원):**
    *   **장점:** 플랫폼 경쟁력, 다양한 사업 포트폴리오 (광고, 커머스, 모빌리티, 금융 등), 성장 가능성
    *   **매수 시점:** 규제 이슈 완화, 실적 개선 추세 확인 후 매수 고려
    *   **투자 포인트:** 카카오는 국민 메신저 카카오톡을 기반으로 다양한 서비스를 제공하며 성장해왔습니다. 최근 플랫폼 규제 이슈로 주가가 조정을 받았지만, 장기적인 관점에서 디지털 전환 시대에 더욱 성장할 가능성이 높습니다. 다만, 카카오의 경우 성장주로 분류되어 시장 변동성에 민감하게 반응할 수 있으므로 투자에 유의해야 합니다.

**추가 조언:**

*   **투자 목표 설정:** 투자 기간, 목표 수익률 등을 명확히 설정하고 투자 전략을 수립하는 것이 중요합니다.
*   **포트폴리오 다변화:** 삼성전자와 카카오 외에도 다양한 종목에 분산 투자하여 리스크를 줄이는 것을 고려해볼 수 있습니다.
*   **정기적인 점검:** 시장 상황과 투자 종목의 변화를 꾸준히 점검하고 필요에 따라 투자 전략을 수정해야 합니다.
*   **전문가 활용:** 투자에 어려움을 느낀다면 증권사 PB나 투자 전문가의 도움을 받는 것도 좋은 방법입니다.

**Disclaimer:**

본 정보는 투자 자문이 아니며, 투자 결정은 본인의 판단과 책임 하에 이루어져야 합니다. 투자에는 항상 위험이 따르므로 신중하게 결정하시기 바랍니다.

💡 마무리

이처럼 LangChain과 Gemini를 조합하면 AI 주식 상담사, 트레이딩 어시스턴트, 심지어 포트폴리오 추천 시스템까지 만들 수 있습니다!

Posted by 제이브레인
,

🧠 LangChain + Gemini: SystemMessage를 우회하는 재미있는 여정

LangChain을 이용해 Gemini API와 대화할 때, 우리는 중요한 문제가 하나 생깁니다.

"Gemini는 SystemMessage를 지원하지 않아요!"

하지만 걱정 마세요. LangChain은 마치 똑똑한 연출가처럼 대본 첫 줄에 시스템 지시사항을 몰래 적어두는 방식으로 이를 우회할 수 있죠.

지금부터 그 과정을 역할극처럼 스텝 바이 스텝으로 알아봅시다!


🎭 Step 1: 등장인물 소개

  • 👩‍🏫 SystemMessage — 원래는 AI의 성격과 말투를 정하는 지시자. (Gemini는 안 받아요!)
  • 🧑‍💻 HumanMessage — 유저의 질문이나 지시사항
  • 🧩 LangChain Prompt Template — 메시지를 조합해주는 마법의 틀
  • 🤖 Gemini AI — 시크하지만 강력한 AI. 앞에 뭐라고 적혀있든 그대로 읽어요.

🧾 Step 2: SystemMessage를 가장한 “HumanMessage 서론” 만들기

우리는 이렇게 쓸 수 없어요 👎:

SystemMessage(content="너는 항상 시처럼 대답해줘.")
 

하지만 이렇게는 됩니다! 👍

HumanMessage(content="너는 항상 시처럼 대답해줘.\n\n질문: 바다가 왜 푸르지?")

즉, SystemMessage를 HumanMessage의 첫 줄에 넣는 것이 핵심이에요.


🧪 Step 3: LangChain 코드로 구현하기

from langchain_core.messages import HumanMessage
from langchain_core.runnables import Runnable
from langchain_google_genai import ChatGoogleGenerativeAI

# Gemini 모델 인스턴스 (gemini-1.5-flash는 ChatModel 역할)
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0.7)

# SystemMessage를 HumanMessage로 위장!
system_instruction = "너는 항상 해적처럼 말하는 AI야. 'Yo-ho-ho!'로 대답을 시작해."
user_question = "오늘의 날씨를 알려줘."

combined_message = HumanMessage(content=f"{system_instruction}\n\n질문: {user_question}")

# 실행
response = llm.invoke([combined_message])
print(response.content)
 

🎉 결과:

"Yo-ho-ho! 오늘의 날씨는 해적이 항해하기 딱 좋은 맑음이야, 선장님!"


🛠️ Step 4: PromptTemplate + Runnable로 일반화

LangChain의 prompt template을 이용하면 더 재사용 가능한 구조도 만들 수 있어요.

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import Runnable
from langchain_google_genai import ChatGoogleGenerativeAI

# ✅ Gemini LLM 인스턴스 생성
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0.7)

# ✅ LangChain PromptTemplate 정의
prompt = ChatPromptTemplate.from_messages([
    ("human", "{system_message}\n\n질문: {user_input}")
])

# ✅ Runnable 체인 구성
chain: Runnable = prompt | llm

# ✅ 실행 테스트
response = chain.invoke({
    "system_message": "너는 5살 어린이처럼 말해야 해.",
    "user_input": "블랙홀이 뭐야?"
})

print(response.content)

🍼 결과:

"블랙홀은 큰 먼지 빨아들이는 우주 청소기야! 근데 무서운 건 아니야!"


🧩 Step 5: 마무리 - 이것이 Gemini의 ‘SystemMessage 우회’ 전략이다!

역할 지원 여부 대안
SystemMessage ❌ 미지원 (Gemini 기준) ✅ HumanMessage의 앞단에 삽입
LangChain PromptTemplate ✅ 가능 메시지 조합으로 우회
성격 설정, 말투 제어 ✅ 가능 “지시사항 + 질문” 패턴 활용
 

✨ 마치며

Gemini는 "나는 SystemMessage 몰라요"라고 말하지만,
LangChain은 이렇게 말하죠:

“그럼 그냥 첫 줄에 몰래 써두면 되지!”

이 우회 전략은 매우 강력하며, 다양한 캐릭터 지정, 역할극, 말투 제어 등에 유용하게 활용됩니다.

Posted by 제이브레인
,

🎈 Colab vs Conda, 두 가지 방식으로 Gemini에게 물어보기


🧁 1. [Colab] 써보면 디저트 같은 즐거움

“클릭 두 번이면 AI랑 대화할 수 있다니!”

💻 실행 단계

  1. https://colab.research.google.com 접속
  2. 새 노트북 열기
  3. 다음 코드 셀 실행:
!pip install -q langchain-google-genai google-generativeai

API 키 설정:

import os
os.environ["GOOGLE_API_KEY"] = "여기에_당신의_API_키를_입력하세요"

사용 가능한 모델 확인

import google.generativeai as genai

from _settings.config import GEMINI_KEY

# API 키 설정
genai.configure(api_key=GEMINI_KEY)

# 모델 목록 확인 (이걸로 어떤 모델이 가능한지 확인 가능)
for model in genai.list_models():
    print(model.name)

위 코드 실행 시 다음과 같은 결과를 얻었습니다.

이는 사용자 마다 요금제에 따라 다를 수 있습니다.

models/embedding-gecko-001
models/gemini-1.0-pro-vision-latest
models/gemini-pro-vision
models/gemini-1.5-pro-latest
models/gemini-1.5-pro-002
models/gemini-1.5-pro
models/gemini-1.5-flash-latest
models/gemini-1.5-flash
models/gemini-1.5-flash-002
models/gemini-1.5-flash-8b
models/gemini-1.5-flash-8b-001
models/gemini-1.5-flash-8b-latest
models/gemini-2.5-pro-preview-03-25
models/gemini-2.5-flash-preview-04-17
models/gemini-2.5-flash-preview-05-20
models/gemini-2.5-flash
models/gemini-2.5-flash-preview-04-17-thinking
models/gemini-2.5-flash-lite-preview-06-17
models/gemini-2.5-pro-preview-05-06
models/gemini-2.5-pro-preview-06-05
models/gemini-2.5-pro
models/gemini-2.0-flash-exp
models/gemini-2.0-flash
models/gemini-2.0-flash-001
models/gemini-2.0-flash-exp-image-generation
models/gemini-2.0-flash-lite-001
models/gemini-2.0-flash-lite
models/gemini-2.0-flash-preview-image-generation
models/gemini-2.0-flash-lite-preview-02-05
models/gemini-2.0-flash-lite-preview
models/gemini-2.0-pro-exp
models/gemini-2.0-pro-exp-02-05
models/gemini-exp-1206
models/gemini-2.0-flash-thinking-exp-01-21
models/gemini-2.0-flash-thinking-exp
models/gemini-2.0-flash-thinking-exp-1219
models/gemini-2.5-flash-preview-tts
models/gemini-2.5-pro-preview-tts
models/learnlm-2.0-flash-experimental
models/gemma-3-1b-it
models/gemma-3-4b-it
models/gemma-3-12b-it
models/gemma-3-27b-it
models/gemma-3n-e4b-it
models/gemma-3n-e2b-it
models/embedding-001
models/text-embedding-004
models/gemini-embedding-exp-03-07
models/gemini-embedding-exp
models/aqa
models/imagen-3.0-generate-002
models/imagen-4.0-generate-preview-06-06
models/imagen-4.0-ultra-generate-preview-06-06
models/veo-2.0-generate-001
models/gemini-2.5-flash-preview-native-audio-dialog
models/gemini-2.5-flash-exp-native-audio-thinking-dialog
models/gemini-2.0-flash-live-001
models/gemini-live-2.5-flash-preview

질문하기:

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage

chat = ChatGoogleGenerativeAI(model="models/gemini-2.5-pro", google_api_key=os.environ["GOOGLE_API_KEY"])
response = chat.invoke([HumanMessage(content="대한민국의 수도는 어디인가요?")])
print(response.content)
 

저는 실행해보니 다음과 같은 에러가 발생하네요.

ResourceExhausted: 429 You exceeded your current quota, please check your plan and billing details.

즉, 무료 요금제에서 할당된 API 호출량(쿼터)를 다 써버려서 발생한 에러입니다.


왜 이런 일이 생길까요?

  • Gemini API 무료 티어는 하루, 분 단위로 호출량과 토큰 사용량 제한이 있습니다.
  • 이 제한을 초과하면 429 에러가 나오며, 일정 시간 후 다시 시도해야 합니다.
  • 구글 클라우드 콘솔에서 할당량(Quota)을 확인하거나, 요금제 업그레이드가 필요합니다.

해결 방법

1️⃣ 쿼터 초기화까지 기다리기

  • 일반적으로 하루 기준이므로, 하루가 지나면 다시 사용 가능해집니다.

2️⃣ 쿼터 확인 및 업그레이드

3️⃣ 호출량 줄이기

  • 테스트용 짧은 문장으로 API 호출 횟수 줄이기
  • 불필요한 반복 호출 자제

4️⃣ 경량화된 flash 모델 사용하기

  • gemini-2.5-flash 같은 경량 모델은 쿼터 부담이 적고, 무료 티어 할당량이 더 넉넉할 수 있습니다.
  • 동일한 API 키로도 pro 모델 대신 flash 모델을 사용하면 쿼터 초과 문제를 완화할 수 있습니다.

다음은 flash 모델을 사용한 예입니다.

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage

chat = ChatGoogleGenerativeAI(model="models/gemini-2.5-flash", google_api_key=os.environ["GOOGLE_API_KEY"])
response = chat.invoke([HumanMessage(content="대한민국의 수도는 어디인가요?")])
print(response.content)

 

결과는 다음과 같습니다.

대한민국의 수도는 **서울**입니다.

참고 링크


요약

에러 코드 의미 대처법
429 할당량(쿼터) 초과 기다리거나 업그레이드 필요
 

 


🧱 2. [PC + Conda] 본격 연구소 느낌!

“이건 내 실험실이다!”

🧪 Conda 기반 환경 구축 및 실행


✅ Step 1. Conda 가상환경 만들기

conda create -n gemini_env python=3.10 -y conda activate gemini_env
 

✅ Step 2. 필요한 패키지 설치

pip install langchain-google-genai google-generativeai
 

✅ Step 3. API 키 설정 및 실행 코드 작성

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.messages import HumanMessage

chat = ChatGoogleGenerativeAI(model="models/gemini-2.5-flash", google_api_key=os.environ["GOOGLE_API_KEY"])
response = chat.invoke([HumanMessage(content="대한민국의 수도는 어디인가요?")])
print(response.content)

위 코드를 gemini_test.py로 저장한 후, 터미널에서 실행하면 됩니다:

python gemini_test.py
 

🎭 Colab vs Conda 재미 비교

항목 🍰 Google Colab 🔬 Conda 가상환경 (PC)
설치 없음 (브라우저만 필요) Anaconda 설치 필수
가상환경 자동 관리 수동 생성 (conda create)
시작 속도 매우 빠름 다소 설정 시간 필요
리소스 제한 Google 제한 (시간, 메모리) 있음 내 PC 성능만큼 무제한
사용 장소 인터넷 연결된 어디서나 가능 해당 PC에서만 가능
유지보수 코드 유지 및 파일 관리 어려움 장기 프로젝트에 유리 (버전 고정 등)
감성 한 줄 평 “앗 귀여워! 바로 실행되네?” “으음… 깔끔하게 환경 관리하자”
 

✅ 결론

  • 처음 써보거나 빠르게 테스트하고 싶을 때 👉 Colab
  • 꾸준히 개발하고 버전 관리하며 프로젝트화하고 싶을 때 👉 Conda
Posted by 제이브레인
,

ChatGPT API 를 사용하려고 했으나 2024년 이후 무료 API 사용이 불가능해서 다른 LLM 을 찾다보니 성능도 좋고 무료로 어느 정도 사용가능한 것이 Gemini 라는 것을 알게 되었습니다.

다음은 Gemini API 사용법입니다.

✅ 1. Google 계정 준비

Gemini API를 사용하려면 Google 계정이 필요합니다.


✅ 2. Google AI Studio 가입 및 API 키 발급

  1. Google AI Studio 접속
  2. 약관 동의 및 프로젝트 생성
    • 처음 접속 시, Google Cloud 계정에 로그인 후 프로젝트 생성/선택
    • 이름: 예를 들어 gemini-test-project 같은 이름 사용
  3. API 키 생성
    • 상단 메뉴에서 API Key 또는 Get API Key 클릭
    • 자동으로 API 키가 생성되고 복사할 수 있음
    • 이 키는 나중에 REST API나 Python SDK에서 사용

Get API Key 를 클릭

 

약관 동의를 체크합니다.
상단의 API 키 만들기를 클릭합니다.
새 프로젝트에서 API 키 만들기 또는 기존 프로젝트를 선택합니다.


✅ 3. Gemini API 문서 참고


✅ 4. Python 환경에서 Gemini API 사용하기

🔹 설치

저는 python 3.11 64 bit 를 설치했습니다.

conda 로 python 3.11 가상 환경을 만들어서 설치했습니다.

conda create -y -n pygem311 python=3.11
conda activate pygem311
pip install google-genai

🔹 예제 코드

from google import genai

from _settings.config import GEMINI_KEY

client = genai.Client(api_key=GEMINI_KEY)

response = client.models.generate_content(
    model="gemini-2.0-flash",  # or "gemini-1.5-pro" or other available models
    contents="한국의 수도는 어디인가요?"
)
print(response.text)

🔹 실행 결과

답변은 간단하지만 gemini api 를 사용했다는 것에 의미를 더 두고 싶습니다.

오~~ 대단하지 않나요?

한국의 수도는 서울입니다.

 


✅ 5. 모델 종류

모델 이름 설명
gemini-pro 텍스트 전용, 대화형 API
gemini-pro-vision 이미지 + 텍스트 멀티모달 처리 가능
gemini-1.5-pro 최신 모델, 대용량 context 지원 (1M 토큰 등)
 

✅ 6. 가격 및 요금제

 

Posted by 제이브레인
,

ChatGPT API 를 사용해볼려고 했는데 꼭 유료 결제를 해야하더군요.

그래서 인공지능 API 중에 무료로 사용가능한 것을 찾아보았습니다.

✅ 1. OpenAI (ChatGPT API)

ChatGPT 는 무료 요금제로는 API 는 사용이 안되네요.

이전에는 무료도 얼마 정도 사용이 가능했는데 2024년 이후는 안된다고 합니다.

역시~ 뭐든 초기에만 인심이 후하고 장사가 되면 인심이 박해지네요.

항목 내용
무료 요금제 없음 (API는 유료 계정만 사용 가능)
무료 사용량 ❌ 없음 (결제 수단 등록 후 사용 가능)
비고 ChatGPT 웹에서는 GPT-3.5 무료 사용 가능
 

✅ 2. Google Gemini API (기존 Bard)

Gemini 가 무료 요금제도 하루 사용량이 있다고 하네요.

오~~ 이 것도 무료가 막히기 전에 Gemini API 를 써봐야겠어요.

항목 내용
무료 요금제 있음 (Maker Plan)
하루 사용량 60 요청/일 (일반)
초과 시 유료 요금제 필요
비고 Google Cloud 계정 필요, API 키 발급 필수
 

📌 모델: gemini-pro (텍스트), gemini-pro-vision (이미지 입력)


✅ 3. Anthropic Claude API

항목 내용
무료 요금제 ❌ 없음
무료 사용량 ❌ 없음
비고 API 사용하려면 유료 가입 필요 (웹에서는 일부 무료 사용 가능)
 

✅ 4. Perplexity AI API

Perplexity AI 는 NH투자증권 고객은 퍼플렉서티 Pro 1년 무료 사용을 할 수 있다고 합니다.

기한은 2025년 12월 31일 인데 물량 소신되면 이벤트 종료된다고 합니다.

관심이 있는 분들은 NH투자증권 계좌를 만들고 퍼플렉서티 Pro 1년 무료 사용권을 받으세요.

저도 NH투자증권 계좌를 만든 후에 퍼플렉서티 Pro 1년 무료 사용권을 받았습니다.

증권 계좌만 만들어도 됩니다.

그런데 API 의 경우 Pro 요금제도 월 5달러 크레딧을 충전해주네요.

그런데 이월은 안돼요. 다음달이 되면 크레딧은 사라진다는 말입니다.

항목 내용
무료 요금제 ❌ (API는 Pro 요금제 이상만 가능)
무료 사용량 Pro 요금제에 월 $5 크레딧 포함
비고 하루 제한은 없고 월 단위 크레딧 기준
 

✅ 5. Mistral (via platforms like Fireworks AI)

  • 일부 제공처에서 무료 요금제 있음
  • 예: Fireworks.ai – 무료 요금제 하루 100~200 요청 제공
  • 모델: mistral-7b, mixtral, llama-3 등

✅ 6. Hugging Face Inference API

항목 내용
무료 요금제 있음 (Free Tier)
하루 사용량 30분 compute/day 기준
비고 느릴 수 있고, 대기 시간 존재
 

✅ 요약 테이블

Google Gemini 또는 Fireworks.ai 가 한번 써볼만하네요.

Fireworks.ai 는 잘 모르겠지만 Google Gemini 는 성능도 괜찮다고 하네요.

서비스 무료 사용량 (일 기준) 조건 비고
Google Gemini 약 60 요청/일 Maker 요금제 API 키 필요
Fireworks.ai 약 100~200 요청/일 가입만 하면 무료 사용 가능 Mistral 등 제공
HuggingFace 30분 compute 시간/일 Free Tier 속도 느릴 수 있음
OpenAI ❌ 없음 API는 유료만 웹에서는 GPT-3.5 무료
Perplexity ❌ (월 $5 크레딧 제공) Pro 요금제부터 하루 제한은 없음
 

🧠 추천

  • 가볍게 실험해보고 싶다면: Google Gemini 또는 Fireworks.ai
  • 오픈소스 기반 모델을 써보고 싶다면: Hugging Face, Mistral
  • 꾸준한 사용을 원한다면: Perplexity Pro나 OpenAI 유료 요금제 추천

 

암튼 Gemini 를 한번 사용해보겠습니다.

랭체인은 인공지능 서비스를 파라미터로 변경만 하면 코드 재사용이 가능합니다.

그러므로 본인이 사용 가능한 인공지능 서비스로 테스트 후에 괜찮다 싶으면 결제를 해서 쓰면 될 것 같아요.

시간이 되고 돈이 된다면 오픈소스 LLM 도 설치해서 테스트 해보겠습니다.

하하~~ 할일은 많고 돈도 없고 시간도 없네요. 불쌍한 스트롱 하드워크 코리안 개발자 입니다.

일은 빡세게 하고 여유는 없는 개발자라는 말입니다~~~ 하하~ 

여러분 힘내세요~ 저도 진짜~ 진짜~ 시간을 쪼개서 저 나름의 인공지능을 공부하고 개발하고 있습니다.

화이팅~ 입니다.

 

Posted by 제이브레인
,

✅ 1. OpenAI API Key 발급 방법

🔹 1단계: OpenAI 회원가입 및 로그인

🔹 2단계: 결제 수단 등록 (유료 API 사용 시)

  • 로그인 후 우측 상단 [Personal or Org 이름 → Manage Account] 클릭
  • 좌측 메뉴에서 Billing > Payment methods로 가서 결제 수단(카드) 등록

💡 무료 체험 크레딧이 제공될 수 있으나, 신규 정책에 따라 다를 수 있습니다.

🔹 3단계: API Key 생성

  1. https://platform.openai.com/api-keys로 이동
  2. [+ Create new secret key] 클릭
  3. 생성된 Key는 한 번만 복사 가능 → 따로 안전하게 저장하세요. 

✅ 2. API Key 연동 방법 (예: Python)

🔹 기본적인 Python 사용 예시

우선 openai 패키지를 설치합니다.

pip install openai

 

다음은 Hello 라고 ChatGPT 에 메시지를 보내는 예시입니다.

import openai

openai.api_key = "your-api-key-here"

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"},
    ]
)

print(response['choices'][0]['message']['content'])

 

사용 가능한 model 의 경우 다음 URL 에 접속하거나 openai 문서 페이지에서 models 를 클릭하면 됩니다.

https://platform.openai.com/docs/models

 

✅ 3. 무료 계정 API Key 연동은 안됨(2024년 이후 막힘)

실제 무료 계정의 경우 사용이 2024년 이후 불가능합니다.

즉 지금은 안된다는 말이죠~  돈내야 된다는 말입니다.

무료 계정 가입만 하고 API 를 사용하려고 하면 다음과 같은 에러가 발생합니다.

openai.error.RateLimitError: You exceeded your current quota, 
please check your plan and billing details. For more information on this error, 
read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.

✅ 4. 유료 계정 OpenAI API 요금

유료 계정을 결제해도 토큰 기반으로 요금을 내야 합니다.

토큰 별 요금은 정책 변경이 되면 변경이 될 수 있습니다.

그러나 내용을 보면 쓴만큼 내라는 정책입니다.

함부로 막쓰다가는 요금 폭탄을 맞을 수 있다는 말입니다.

조심~ 조심 해야 합니다.

나의 API Key 가 외부로 노출되면 신용카드를 잃어버린 것과 같게됩니다.

잘 보면 최신 모델이 토큰별 비용이 높게 책정되어 있습니다.

뭐 당연한 거겠죠. 렌트할 때도 페라리를 빌리느냐 모닝을 빌리느냐에 따라 하루 요금이 다르잖아요~~

모델 입력(Input) 출력(Output)
GPT‑4o (Omni) $5.00 $20.00
GPT‑4o mini $0.60 $2.40
GPT‑4.1 $2.00 $8.00
GPT‑4.1 mini $0.40 $1.60
GPT‑4.1 nano $0.10 $0.40
OpenAI o3 $2.00 $8.00
o4‑mini $1.10 $4.40
GPT‑3.5‑turbo ~$0.0005/$0.0015 (입력/출력)  
GPT‑4.5 (Orion) $75.00 $150.00
Posted by 제이브레인
,

LM(Large Language Model)은 **오픈소스(Open-source)**와 **클로즈드소스(Closed-source)**로 구분할 수 있으며, 각 유형은 라이선스, 접근 방식, 확장성 등에서 차이를 보입니다.

 


🧠 LLM의 분류: 오픈소스 vs 클로즈드소스

구분 오픈소스 LLM (Open-source) 클로즈드소스 LLM (Closed-source)
정의 누구나 다운로드/수정/재학습 가능한 LLM API 형태로만 접근 가능한 사유 모델
라이선스 Apache 2.0, MIT, Llama 2 Community 등 상업적 사용 제한 가능 (기업 독점 소유)
접근 방식 모델 파일 자체 다운로드 가능 API 요청을 통해서만 사용 가능
튜닝(Fine-tuning) 로컬 환경에서 가능 대부분 불가능 또는 제한적 (비용 多)
비용 대부분 무료 (인프라만 필요) API 사용량 기반 과금
유연성 완전한 커스터마이징 가능 제한적 (프롬프트나 설정만 가능)
보안/프라이버시 내부 데이터 유출 없이 사용 가능 데이터를 외부 서버로 보내야 함
 

📘 대표 LLM 목록

✅ 오픈소스 LLM

모델 이름 개발사 라이선스 특징
LLaMA 2 / 3 Meta Llama License 강력한 성능, 상업적 사용 가능
Mistral / Mixtral Mistral.ai Apache 2.0 빠르고 경량, 높은 정확도
Falcon TII (UAE) Apache 2.0 대규모 학습, 실전 배치 적합
Phi-2 Microsoft MIT 소형 모델, 빠른 반응
OpenHermes, Nous, Orca 커뮤니티 기반 다양 Fine-tuning 실험에 적합
 

🔒 클로즈드소스 LLM

모델 이름 개발사 특징
GPT-3.5 / GPT-4 / GPT-4o OpenAI ChatGPT 서비스 기반, 매우 강력함
Claude 3 Anthropic 대화 중심 설계, 문서 분석에 강점
Gemini (Bard) Google 검색 기반 연동, 웹통합 기능
Command R+ Cohere 검색 기반 응답 최적화
Jurassic-2 AI21 Labs 상업적 API 제공
 

✅ 사용 시 선택 기준

고려 항목 오픈소스 LLM 클로즈드소스 LLM
개인화 튜닝 ⭕ 자유롭게 가능 ❌ 대부분 제한됨
비용 절감 ⭕ 가능 (자체 운영) ❌ 사용량 과금
배포 제어 ⭕ 가능 (로컬 배포) ❌ 불가 (API 의존)
최고 성능 🔸 아직 약간 낮은 경우 있음 ⭕ GPT-4, Claude 등 최고 수준
보안/내부 데이터 활용 ⭕ 기업 내에서 자체 처리 ❌ 민감 데이터 외부 전송 우려
 

🧾 정리

구분 오픈소스 LLM 클로즈드소스 LLM
사용 방식 직접 실행, 커스터마이징 API 호출
예시 LLaMA 2/3, Mistral, Falcon GPT-4, Claude 3, Gemini
자유도 높음 (튜닝/배포 가능) 낮음 (사용 제약 있음)
성능 상위권 모델 많음 최고 성능 모델 사용 가능
보안성 로컬 처리 가능 외부 전송 필요
 

⚔️ 오픈소스 LLM vs 클로즈드소스 LLM

🎯 시스템 트레이딩에서 두 영웅의 차이점!

항목 🧙 오픈소스 LLM (마법사형 트레이더) 🤖 클로즈드소스 LLM (슈퍼컴 트레이더)
성격 자급자족형 개발자!
“내 손으로 다 만든다!”
외부 의존형 전문가!
“API만 주면 모든 걸 해줄게!”
성능 충분히 똑똑함!
세팅 잘하면 강력한 로직 구사 가능
최첨단 인공지능!
언어 이해도와 요약력 최상급
유연성 전략 수정, 로직 튜닝, 문체 교정까지
“내가 원하는 대로 개조!”
API가 허용하는 선에서만 조정 가능
“프롬프트만 잘 짜면 돼요”
비용 클라우드 없으면 공짜
“GPU만 있으면 무한 개발!”
쓸수록 요금 올라감
“이 전략 한 번 실행하는 데 10달러?!”
보안성 회사 내부 전략도 비공개로 처리 가능
“남이 절대 못 본다!”
민감한 전략이 외부 API로 나갈 수 있음
“이거 진짜 괜찮은 거야?”
자동화 파인튜닝까지 해버리면
완전히 내 전략 전용 AI 완성!
자동화는 쉽지만
“조금은 범용적 느낌이네?”
느낌 해커톤 참가하는 천재 개발자 전문 어시스턴트 붙은 퀀트 매니저
 

🎮 비유로 표현하면?

비교 요소 오픈소스 LLM 클로즈드소스 LLM
자동차 수동 조작이 가능한 레이싱카
– 커스터마이징 끝판왕
풀옵션 자율주행 테슬라
– 빠르고 부드럽지만 룰 안에서만 운전
요리사 재료부터 레시피까지 내가 정하는 셰프
– 마늘도, 고추도 내 맘대로
셰프 추천 메뉴만 고를 수 있는 고급 레스토랑
– 메뉴 외 주문은 어려움
트레이딩 캐릭터 튜닝 가능한 알고리즘 마법사
– 스킬 커스터마이징 자유!
고성능 퀀트 AI 로봇
– 버튼만 누르면 즉시 분석!
 

💡 시스템 트레이딩에서 언제 뭘 써야 할까?

  • 🎯 오픈소스 LLM 추천:
    • 회사 내부 전략을 AI화하고 싶다
    • 내 전략에 딱 맞는 조건과 문장 구조를 만들고 싶다
    • GPU나 서버 자원이 있다
    • 비용을 줄이면서도 자율성은 높이고 싶다
  • 🚀 클로즈드소스 LLM 추천:
    • 빠르게 고성능 AI를 붙이고 싶다
    • 자연어 응답의 품질이 최우선이다
    • 팀 내 AI 전문가가 부족하다
    • 정해진 질문/응답 구조에서 자동화하려는 경우

✅ 마무리 요약

목적 추천 LLM
개인화된 전략 AI 제작 오픈소스 LLM
빠른 MVP / 분석 보조 클로즈드소스 LLM
보안이 중요한 금융 기업용 오픈소스 LLM (내부 배포 가능)
정확한 요약과 자연어 설명 클로즈드소스 LLM (GPT-4, Claude 등)

 

아무래도 오픈 소스 LLM 으로 구축하기 위해서는 보다 하드웨어 구매 및 구축 과정이 더 필요하고

학습 과정도 필요합니다.

제가 여유시간이 많다면 시도해볼 수 있겠지만 항상~~ 매일~~~ 바쁜 직장인 입니다.

그런데 무슨 일이든지 시간~~ + 돈~~~ 이 필요 하죠.

물레방아처럼 돌아가는 시스템 트레이딩을 만들기 위해선, 처음엔 '마중물'이 필요합니다.
이 마중물은 그냥 물이 아닙니다. 바로 돈과 시간, 그리고 약간의 미친 집념이 들어간 ‘투자’의 물이지요.


🚰 마중물 없이는 펌프는 ‘텅텅’

옛날 수동 펌프 기억하시나요?
손잡이를 아무리 흔들어도, 처음엔 물이 안 나옵니다.
하지만 조금의 물, 즉 마중물을 넣고 펌프질을 시작하면,
어느 순간 콸콸콸! 지하수처럼 쏟아지죠.

시스템 트레이딩도 마찬가지입니다.
처음엔 돈이 나가고 시간도 새어 나갑니다.
그래픽 카드 사야지, 데이터 모아야지, 코드 짜야지…
“언제 수익이 나지?” 하는 불안 속에서도 계속 손잡이를 흔들어야 해요.


💸 돈이라는 마중물

예를 들어볼까요?

  • GTX 4090 그래픽카드: 약 250~300만 원
  • 서버 비용: 월 10~30만 원
  • 데이터 API / 뉴스 피드: 월 10만 원 이상
  • 시간 가치(야근, 주말 반납): 프라이슬리스…

이 돈, 그냥 쓰는 게 아닙니다.
바로 펌프에 넣는 마중물입니다.
처음엔 없어지는 것 같지만, 어느 순간
"띠링~ 자동 매수 체결 완료"
"목표 수익률 달성"
물이 콸콸 나옵니다.


🕰️ 시간도 붓는 마중물

처음엔 왜 백테스트가 틀렸는지도 모르겠고,
왜 체결이 안 되는지도 헷갈립니다.
하지만 그 시간들 덕분에,
“이 종목은 왜 이렇게 튀었지?”
“장 종료 전 15분의 패턴이 이렇구나!”
직감과 데이터가 하나로 합쳐지죠.


🚀 결론: 마중물이 없으면 물도 없다

처음부터 “수익 나면 투자하겠다”는 건,
펌프 앞에서 “물이 나오면 물을 넣겠다”는 것과 같습니다.
시스템 트레이딩의 펌프는, 정직하게 마중물을 기다립니다.
그리고 그 물은 반드시, 당신이 포기하지 않을 때 터집니다.

결론은 마중물이 필요한데 그나마 적게 비용이 드는 클로즈 소스 LLM 으로 구축 -> 오픈 소스 LLM 으로 넘어가는 것이 제일 자연스러울 것 같습니다.

어디까지나 제 개인적인 의견입니다.

나는 처음 부터 좀더 완벽한 인공지능 트레이딩을 만들고 싶으신 분들은 오픈 소스 LLM 으로 시작하는 것이 나을 수도 있습니다.

무슨일이든 사람마다 환경이 다르고 방식이 다르기 때문입니다.

 

제일 중요한 것이 지금~~~ 시작하는 것입니다.

 

Posted by 제이브레인
,

🧩 LangChain 핵심 구성요소

구성요소 역할 시스템 트레이딩 예시
1. LLM
(Language Model)
자연어를 이해하고 응답을 생성하는 중심 두뇌 GPT-4를 사용해 사용자의 질문
“5일 이동평균이 20일선을 돌파하면 매수해야 하나요?”에 대해 전략적 설명 생성
2. Prompts
(프롬프트 템플릿)
모델이 일관되게 답변하도록 질문 형식과 지침 정의 프롬프트 예시:
“아래 전략 문서를 참고하여 질문에 답하시오. 문서에 없는 내용은 추측하지 마시오.\n문서: {context}\n질문: {question}”
3. Index
(문서 인덱싱/검색)
다양한 전략 문서, 리서치 리포트 등을 벡터로 저장하고 검색 사용자가 업로드한
“피라미딩 매매 전략.pdf”를 벡터화하여
“이 전략은 RSI를 어떻게 쓰나요?”에 관련 부분 검색
4. Memory
(대화 기억)
이전 대화의 흐름이나 정보 유지, 문맥 연결 사용자: “RSI 전략 알려줘”
→ 다음에 “그 전략으로 코드를 짜줘” 했을 때,
이전 내용을 기억하고 반영
5. Chain
(처리 흐름 파이프라인)
여러 단계의 작업(프롬프트 생성, 검색, 응답 등)을 자동 연결 문서 → 분할 → 유사도 검색 → 요약 → 응답 생성 등의 과정을 하나의 체인으로 구성
예: load_qa_chain, map_reduce_chain
6. Agents
(도구 활용 컨트롤러)
LLM이 계산기, 웹 검색, 데이터 API 등을 스스로 호출하여 복잡한 문제 해결 사용자: “삼성전자 현재 RSI 값 알려줘”
→ 에이전트가 주가 API 호출 + RSI 계산기 실행
→ 응답: “현재 RSI는 67.3이며, 과매수 구간에 가까워지고 있습니다.”
 

✅ 시스템 트레이딩 예시 흐름 요약

사용자가 질문:
“이 전략에서 RSI가 70을 넘으면 매도하라고 되어 있는데, 지금 삼성전자는 어떤가요?”

LangChain 구성 요소:

  1. Index: 전략 문서에서 “RSI 70 이상 → 매도” 조건 검색
  2. Agent: 삼성전자 주가 데이터를 외부 API에서 가져옴
  3. Agent: RSI 계산 도구를 사용해 현재 값 계산
  4. Prompt: 검색된 전략 문서와 계산된 RSI를 바탕으로 질문을 구성
  5. LLM: 응답 생성
  6. Memory: 다음 대화에서 이 정보를 다시 활용 가능

🧾 최종 요약표


구성요소 기능 설명 시스템 트레이딩 적용 예
LLM 자연어 이해 및 응답 생성 전략 조건 설명, 코드 생성 등
Prompts 질문 구조와 지시 설정 문서 기반 응답, 환각 방지
Index 문서 유사도 검색 전략서에서 조건 추출
Memory 대화 내용 기억 전략 흐름 유지, 재사용 가능
Chain 작업 자동화 흐름 문서 분석 → 응답 생성 파이프라인
Agents 외부 도구 활용 API 호출, RSI 계산 등

 

LangChain을 활용한 시스템 트레이딩 분석 도구를 구축한다고 할 때, 전형적인 문서 기반 질의응답 흐름은 다음과 같은 5단계로 구성됩니다:


📊 LangChain 처리 흐름 : 문서 업로드 → 답변 생성까지

단계 설명 시스템 트레이딩 적용 예시
1. 문서 업로드
(Document Upload)
사용자가 매매 전략, 리서치 리포트, 공시 문서 등을 업로드 예: 피라미딩 매매 전략.pdf, 삼성전자 2025 1Q 실적.txt 업로드
2. 문서 분할
(Text Splitting)
문서를 토큰 수 제한에 맞게 **작은 청크(chunk)**로 나눔 전략 문서의 각 챕터나 조건을 기준으로 문단 분할 (예: 1,000자 단위)
3. 문서 임베딩
(Embedding)
각 청크를 벡터로 변환하여 Vector Store에 저장 Chroma, FAISS, Weaviate 등을 사용해 문서 벡터 저장
4. 임베딩 검색
(Similarity Search)
사용자의 질문과 가장 유사한 문서 청크를 검색 질문: “RSI 조건이 어디에 있나요?” → “3장: 기술적 지표 매매 조건” 청크 반환
5. 답변 생성
(LLM + Prompt)
검색된 문서를 기반으로 LLM이 답변 생성
프롬프트로 문서 외 환각 방지
“해당 전략에서는 RSI > 70일 때 매도합니다. 문서 3장을 참고했습니다.”
 

🔁 전체 흐름 예시

사용자가 질문:
“이 전략에서 RSI가 70 넘으면 매도하라고 되어 있는데, 정확히 어디에 나와 있나요?”

LangChain의 처리 과정:

  1. 📄 문서 업로드: 피라미딩 전략.pdf 업로드
  2. ✂️ 문서 분할: 전략 문서를 문단 단위로 분할
  3. 🧠 임베딩 저장: 각 분할된 문단을 벡터로 변환하고 Chroma에 저장
  4. 🔍 질문 → 유사 문단 검색: “RSI 70”이라는 키워드가 포함된 문단 검색
  5. 💬 LLM이 응답 생성:
    프롬프트:응답:
  6. “전략 문서 3.2절에 따르면, RSI가 70 이상일 경우 매도 신호로 간주됩니다.”
  7. "아래 문서를 참고하여 질문에 답하고, 문서에 없는 내용은 추측하지 마세요.\n문서:\n{retrieved_context}\n질문: {user_question}"

🧠 구성도 요약

[사용자 문서 업로드]
        ↓
 [문서 분할 (TextSplitter)]
        ↓
 [임베딩 생성 → VectorStore 저장]
        ↓
 [질문 입력 → 유사 문서 검색]
        ↓
 [LLM이 문서 기반 답변 생성]
 

✅ 시스템 트레이딩에 특히 유용한 활용 사례

활용 목적 질문 예시 LangChain 기능
전략 조건 추출 “이 전략의 진입 조건은?” 문서 검색 + LLM 요약
공시 기반 판단 “이번 분기 실적은 어떤가요?” 실적 보고서 임베딩 + 답변
위험 관리 규칙 확인 “손절 조건은 몇 %인가요?” 문서 중 ‘리스크 관리’ 섹션 검색
전략 자동화 코드 생성 “이 조건으로 파이썬 매매 코드 짜줘” 조건 추출 + 코드 생성 프롬프트
Posted by 제이브레인
,

🧱 ChatGPT의 한계점 3가지

📚 정보 접근 제한 (학습 데이터 범위 제한)

  • ChatGPT는 고정된 시점까지 수집된 데이터로만 학습되었기 때문에,
    최신 사건, 뉴스, 기술 변화 등에 대해 정보를 알지 못합니다.
  • 예: “2025년 6월에 출시된 아이폰 모델 알려줘” → 알 수 없음 (최신 데이터 없음)

🧠 환각 현상 (Hallucination)

  • 모델이 실제로 존재하지 않는 정보나 틀린 내용을
    그럴듯하게 생성하는 현상입니다.
  • 예: “피카소의 ‘달빛의 연인’은 어떤 의미인가요?” → 실제로 없는 그림을 만들어내 설명할 수 있음.

🧾 토큰 제한 (Token Limit)

  • 대화에 사용할 수 있는 입력 + 출력 텍스트의 총 길이가 제한되어 있음.
    (예: GPT-3.5는 약 4,096 토큰, GPT-4-turbo는 최대 128,000 토큰까지 가능)
  • 긴 문서를 넣거나 복잡한 대화를 이어가다 보면 이전 내용이 잘리거나 요약됨.

🛠 ChatGPT 개량 방식 3가지

1. 🛠 Fine-tuning (파인튜닝)

  • 모델 자체를 재학습시켜 특정 목적이나 문체, 업무에 맞춤화.
  • 대량의 도메인 특화 데이터를 넣어 모델의 가중치를 직접 수정.
  • 예: “보험 상담 전용 챗봇”을 만들기 위해 고객 상담 기록 수만 건을 학습시킴.

2. ✍️ N-shot Learning

  • 입력 프롬프트에 **N개의 예시(example)**를 포함시켜 모델이 패턴을 따라 하도록 유도.
  • 별도 학습 없이 예시만으로 유연하게 문제 해결 가능.
  • 예시 수에 따라 Zero-shot, One-shot, Few-shot 등으로 분류.
  • 예:
     
예시: Q: 파리는 어떤 나라의 수도인가요? A: 프랑스  
실제 질문: Q: 베를린은 어떤 나라의 수도인가요? → A: 독일

3. 🧩 In-context Learning (문맥 기반 학습)

  • 지금 대화 내에서 제공된 문맥을 바탕으로 적절한 행동을 유도.
  • 실제로 모델이 배우는 건 아니지만, 프롬프트 안에서 학습한 것처럼 반응.
시스템 지시: “당신은 친절한 고객센터 직원입니다.”  
사용자 질문: “배송이 언제 오나요?”  
→ 모델 답변: “고객님, 배송은 내일 도착 예정입니다!”

 

📌 시나리오

사용자는 ChatGPT 기반의 주식 자동매매 어드바이저를 만들고자 합니다.
주요 기능은 다음과 같습니다:

  • 조건부 매매 로직 생성 (예: 피라미딩 매수 전략)
  • 최신 기업 실적/공시 기반 판단
  • 과거 데이터 분석
  • 사용자 전략 문서에 기반한 판단

정보 접근 제한 (학습 데이터 범위)

📉 문제

  • ChatGPT는 실시간 증시 데이터, 최근 기업 실적 발표, 공시 문서 등을 모르거나 틀릴 수 있음.
  • 예시:
  • “삼성전자의 2025년 1분기 실적에 따라 매수할까요?”
    → ChatGPT: “죄송합니다. 해당 정보는 알 수 없습니다.”

✅ LangChain 개선 방법: Vectorstore + Retriever

💡 해결 방법

  • LangChain을 사용해 공시, 뉴스, 리서치 리포트 등을 벡터로 저장하고 유사도 기반 검색
  • 사용자가 문서를 업로드하거나, API로 수집한 후 연결

🔧 적용 예시

docs = load_documents("삼성전자_2025_Q1_실적.pdf")
split_docs = text_splitter.split_documents(docs)
db = FAISS.from_documents(split_docs, embedding)
retriever = db.as_retriever()

# 사용자 질문
query = "삼성전자 2025년 1분기 영업이익이 줄었나요?"
relevant_docs = retriever.get_relevant_documents(query)
 

토큰 제한 (Context 길이 제한)

📉 문제

  • 100페이지짜리 리서치 보고서, 전략 설명서 등은 ChatGPT에 한 번에 넣을 수 없음.
  • 특히, "이 전략 문서의 내용을 기반으로 조건부 매수 로직을 작성해줘"라는 요청에 실패 가능.

✅ LangChain 개선 방법: TextSplitter + Map-Reduce Chain

💡 해결 방법

  • 전략 문서를 챕터별/항목별 분할한 후 요약/정리.
  • 중요한 부분만 선택하여 LLM에 전달.

🔧 적용 예시

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = text_splitter.split_documents(docs)

# 각 chunk에 요약 실행
chain = load_summarize_chain(llm, chain_type="map_reduce")
summary = chain.run(chunks)
 

환각 현상 (Hallucination)

📉 문제

  • “이 전략은 RSI가 50 이하일 때만 진입한다고 되어 있어요.”
    → ChatGPT가 없는 내용을 지어내거나, 잘못된 기술 지표 조건을 생성할 수 있음.

✅ LangChain 개선 방법: PromptTemplate로 문서 기반으로만 답변 제한

💡 해결 방법

  • LangChain의 프롬프트 템플릿에 명확한 제약 조건 포함:
  • “다음 문서 내용을 기반으로만 매매 로직을 생성하세요. 문서에 없는 조건은 사용하지 마세요.”

🔧 적용 예시

prompt = PromptTemplate(
    input_variables=["context", "question"],
    template="""
    아래 문서를 기반으로 질문에 답변하세요.
    문서에 없는 정보는 추측하지 말고 "정보 없음"이라고 말하세요.

    문서 내용:
    {context}

    질문:
    {question}
    """
)
 

🧾 요약표

한계점 스템 트레이딩 예시 LangChain 도구 개선 방식
정보 제한 “삼성전자 2025년 실적 기반 판단” Vectorstore, Retriever 공시/리포트 문서 유사도 검색
토큰 제한 “100페이지 전략 문서를 분석해줘” TextSplitter, MapReduceChain 문서 분할 및 요약 처리
환각 현상 “없는 전략 조건을 만들어냄” PromptTemplate 문서 기반 응답으로 제한
 

✅ 결론

LangChain은 ChatGPT의 한계인

  • 최신 정보 부족
  • 긴 문서 처리 한계
  • 사실 오류 생성
    을 보완하며, 시스템 트레이딩과 같은 정밀한 업무에 현실적인 적용 가능성을 높여줍니다.
Posted by 제이브레인
,