본문 바로가기

공부/AI

[chatGPT] 커스텀 GPTs : actions 활용하여 GPT에 외부 API 연결하는 방법 (구글 스프레드 시트 연동)

GPTs actions 활용하여 외부 API 연결하는 방법, GPT에 구글 스프레드 시트 연결하여 주식 포트폴리오 분석해보기


이번 포스팅에서는 GPT를 커스터마이징할 때 action 기능을 사용하여 외부 API에 연결하는 방법을 다루고자 한다. 참고로 코드 없이 프롬프트만으로 나만의 커스텀 GPTs 만드는 방법은 지난 포스팅에서 다루었다.
 
 

📌 목차

1. 주식 포트폴리오 스프레드 시트 만들기
2. Sheety API (구글 스프레드 시트를 연동할 수 있는 외부 API) 사용 방법
3. 주식 포트폴리오를 분석할 GPT configuration 
4. GPTs의 actions 기능을 통해 외부 API를 연결 (OpenAI schema 설계) 
5. 나만의 GPT로 주식 포트폴리오 분석하기
 
 

📌 주식 포트폴리오 스프레드 시트 만들기 

주식 투자 포트폴리오는 원활한 실습을 위해 간단한 예시를 들 예정이다.
이를 위하여 구글 스프레드 시트로 가상의 미국 주식 포트폴리오 요약 데이터를 만들어 두었다.
(포스팅 하단에서 다룰 OpenAI schema를 이 데이터에 맞게 설계해두었기 때문에 원활한 실습을 위해서 일단은 이 구글 스프레드 시트를 복제하여 사용하는 것을 권장한다.)
 
데이터의 예시는 다음과 같다.

 
 
구글 스프레드 시트 주소 : https://docs.google.com/spreadsheets/d/1ryJYwClyqWcyRGir-q6VbGkCaOUlUyaD0nTf5m59wYA/edit#gid=0

 

stock portfolio for gpt

요약 주식명,TICKER,수량,매수가 (단위당),현재가 (단위당),평가손익,수익률,비중 구글,GOOGL,100,$95.00,$143.94,$4,894.00,51.52%,23.71% 프로페트로,PUMP,100,$2.06,$7.66,$560.00,271.84%,1.26% 엔비디아,NVDA,20,$298.92,$569.87

docs.google.com

(링크에 접속하여 파일→사본 만들기 버튼을 클릭하면 스프레드 시트가 복제된다.)
 
 
✔ 참고사항
1. 이 데이터는 본인의 실제 투자 포트폴리오가 아니며 실습을 편하게 하기 위해 가상으로 간단하게 만든 포트폴리오 요약 버전이다. 
2. 시트의 분홍색 부분(주식명, ticker, 수량, 매수가)은 사용자가 입력하는 값이며 하늘색 부분은 각종 수식과 구글 파이낸스 함수 등을 사용하여 사용자 입력 값을 기반으로 자동 산출되게끔 해두었다. (구글 파이낸스 함수에 의한 값은 20분에 한번씩 갱신되어 정확하게 실시간은 아니지만 포트폴리오 분석 용도라면 이 정도의 시간차는 괜찮다고 판단하여 사용하였다.)
3. 이 데이터는 특정 종목에 대한 추천이나 권고가 아니며, 투자에 대한 결정은 개인의 선택과 책임에 따른다.
 
 

📌 Sheety API (구글 스프레드 시트를 연동할 수 있는 외부 API) 사용 방법

 
  Sheety API란?
구글 스프레드 시트를 RESTful JSON API로 변환하는 서비스이며, GPT에도 actions 기능을 통해 이 API를 적용하여 구글 스프레드 시트를 연동할 수 있다. 참고로 무료로 한 시트당 100개 행, 한달에 200번 호출이 가능하다.
 
  Sheety API에 구글 스프레드 시트 연결 
Sheety API를 GPT에 적용하기에 앞서, 우선 해당 서비스에서 프로젝트를 만들고 구글 스프레드 시트를 연결해보고자 한다.
 
1. Sheety 홈페이지에 접속한다. https://sheety.co/

 

Sheety - Turn your Google Sheet into an API

Turn any Google Sheet into an API instantly. Power websites, apps, or whatever you like, all from a spreadsheet.

sheety.co

 
2. 처음 로그인을 하면 Google 계정에 대한 액세스를 허용한다. 

'액세스할 수 있는 항목'에서 '모든 Google Sheets 스프레드시트 확인, 수정, 생성, 삭제'를 설정하고 계속한다. 
 
 3. 메인페이지에서 Dashboard 버튼을 클릭한다. 



4. Dashboard 버튼을 클릭하면 기본적으로 Project 화면이 뜨는데 여기에서 New Project 버튼을 클릭한다.


5. From Google Sheet… 버튼을 클릭한다.

 
6. 그러면 이렇게 Create a new project 창이 뜬다.

여기에서 구글 시트의 URL을 입력해주어야 하는데, 참고로 구글 시트의 URL은 여기에 있다. 

 

7.  URL을 입력하면 Project Name과 시트가 자동으로 뜬다. 프로젝트명을 바꿔주고 싶으면 바꿔도 된다. 그리고 Create Project 를 클릭한다. 

 

8. 그러면 이렇게 내 스프레드 시트에 대한 API 세팅 창이 뜬다. 여기에서 요약 시트에 대한 GET 요청만 실행할 것이므로 GET 요청을 Enabled로 토글해주고 나머지는 Disabled로 놔둔다.

 

9. 다음으로는 Authentication을 설정한다. 나는 Basic으로 설정하였다. Username, Password를 입력하고 Authorization Header 부분에서 Authorization: Basic 다음에 적혀있는 API 키를 사용할 예정이다. 참고로 API 키가 외부에 노출되면 제3자가 해당 API에 접근할 수 있으므로 보안을 위해 비공개로 유지하여야 한다. 

 

이렇게 하면 Sheety API에 구글 스프레드 시트를 연결하는 작업이 완료된다. 다음으로는 Sheety API를 통해 구글 스프레드 시트를 연동하여 주식 포트폴리오를 분석하는 GPT를 빌드해볼 차례이다.
 
 

📌 주식 포트폴리오를 분석할 GPT configuration 

우선 Custom GPTs를 빌드해야 한다. 
 
1. 계정명을 클릭하고 My GPTs를 클릭한다.

 
 
2. Create a GPT를 클릭한다.

 
 
3. Configure 탭에서 GPT 설정을 한다.

 
일단 임의로 GPT의 이름은 Portfolio Insight로 정해두었다.
 
그리고 GPT에 대한 instructions를 입력하기 전에, 일단 이번 포스팅에서 만들고자 하는 GPT의 특징을 대략적으로 정의해보고자 한다.
1. Sheety API를 통해 주식 포트폴리오 데이터에 대한 구글 스프레드시트에 연동하고, GET 요청을 통해 시트 데이터를 가져오는 기능을 추가할 예정이다. 
2. 사용자가 주식 포트폴리오 데이터 관련 질문을 하면 연동된 시트의 데이터를 기반으로 답변하게끔 한다.
3. 사용자가 특정 주식에 대한 분석을 요청하면 웹 검색을 진행하여 답변하게끔 한다.  
4. 사용자와 한국어로 소통하는 것을 디폴트로 설정해둔다.
 
이러한 특징을 반영하여 Configure 탭의 instructions 항목에 다음과 같이 입력해주었다.

1. Overview: Portfolio Insight is a sophisticated, detail-oriented stock and market analysis tool. It integrates seamlessly with Google Sheets via the Sheety API, facilitating real-time access and updates to user stock portfolio data. This tool excels in providing accurate and comprehensive analyses of stock and market trends.

2. Functionalities:
1) Google Sheets Integration: Connects with a Google Sheet that contains the user's stock portfolio. Key columns in the Sheet include: Stock Name, Ticker Symbol, Quantity, Purchase Price per Unit, Current Price per Unit, Unrealized Gain/Loss, Rate of Return, and Portfolio Proportion.
2) Stock Analysis: Upon receiving a user's request for stock analysis, expertly navigate the user's Google Spreadsheet portfolio to extract key data about the specified stock. Leveraging this information, conduct a thorough analysis by employing Bing Search to gather a wide array of relevant data, including prevailing market trends, critical economic indicators, as well as insights from financial experts and the latest news pertaining to the stock. Sources information from trustworthy and authoritative financial news platforms. Then, present the user with well-considered, strategic advice and practical insights. These recommendations are customized based on the stock's present market value in relation to the user's initial purchase cost and the number of shares owned, guiding the user towards informed and effective investment decisions.

3. User Interaction and Communication: Engage users in a professional yet friendly manner. Always prioritize providing current and factual information in your analyses. Steer clear of speculation, focusing instead on insights derived from data. Regularly emphasize the reliability of your information by using phrases such as "based on current data" and "according to reliable sources." Communicate with users primarily in Korean. Ask clear and specific questions to better understand user queries and offer customized advice.

 
위 내용을 한국어로 입력한 버전은 다음과 같다. (모델이 영어를 더 잘 이해하므로 프롬프트는 기본적으로 영어로 입력하는 것을 추천한다. 한국어로 입력한 후 GPT-4에게 번역해달라고 하면 잘 번역해준다.)

1. 개요: 포트폴리오 인사이트는 정교하고 세밀한 주식 및 시장 분석 도구입니다. Sheety API를 통해 Google 시트와 연동되어 사용자의 주식 포트폴리오 데이터에 실시간으로 접근하고 업데이트할 수 있습니다. 이 도구는 주식 및 시장 동향에 대한 정확하고 포괄적인 분석을 제공하는 데 뛰어납니다.

2. 기능:
1) Google 시트 연동: 사용자의 주식 포트폴리오가 포함된 Google 시트와 연결합니다. 시트의 주요 컬럼으로는 주식명, TICKER, 수량, 매수가 (단위당), 현재가 (단위당), 평가손익, 수익률, 비중 등이 있습니다.
2) 주식 분석: 사용자의 주식 분석 요청을 받으면 사용자의 Google 스프레드시트 포트폴리오를 탐색하여 지정된 주식에 대한 핵심 데이터를 추출합니다. 이 정보를 활용하여 Bing 검색을 사용하여 시장 동향, 중요한 경제 지표, 재무 전문가의 통찰력 및 해당 주식과 관련된 최신 뉴스를 포함한 다양한 관련 데이터를 수집합니다. 신뢰할 수 있고 권위 있는 재무 뉴스 플랫폼에서 정보를 수집합니다. 그런 다음 사용자에게 잘 고려된 전략적 조언과 실용적인 통찰력을 제공합니다. 이러한 권장 사항은 주식의 현재 시장 가치를 사용자의 초기 구매가 및 보유 수량과 비교하여 맞춤화되며, 사용자가 정보에 입각한 효과적인 투자 결정을 내리도록 안내합니다.

3. 사용자 상호작용 및 커뮤니케이션: 사용자와 전문적이면서도 친근한 방식으로 소통합니다. 분석에서 항상 최신이고 사실에 기반한 정보를 제공하는 것을 우선시합니다. 추측보다는 데이터에서 파생된 통찰력에 집중합니다. "현재 데이터에 기반한" 및 "신뢰할 수 있는 출처에 따르면"과 같은 문구를 사용하여 정보의 신뢰성을 규칙적으로 강조합니다. 주로 한국어로 사용자와 소통합니다. 사용자의 질문을 더 잘 이해하고 맞춤형 조언을 제공하기 위해 명확하고 구체적인 질문을 합니다.

 
주식 포트폴리오를 분석하는 커스텀 GPT 설정을 완료하였으므로, 이제 GPT의 actions 기능을 통해 Sheety API를 연결해볼 차례이다. 
 
 

📌 GPT의 actions 기능을 통해 외부 API를 연결 (OpenAI schema 설계)

 
1. Configure 탭의 하단으로 내려가면 Actions 항목이 있다. Create new action 버튼을 클릭한다.

 
2. Add actions 창에서 우선 Authentication 을 설정한다.

Authentication Type은 API Key로 클릭한다.
API Key 부분에는 위에서 Sheety 홈페이지의 Authentication에서 나왔던 API Key를 입력한다.
Auth Type은 Basic으로 두면 된다.
Save를 한다.
 
3. Add actions 창에서 OpenAI schema를 적용하여 외부 API를 연결할 수 있다. 
Sheety API를 통해 구글 스프레드 시트를 연동하기 위하여 스키마를 다음과 같이 입력하였다. 이 때 servers의 url에는 Sheety에서 API url을 입력하면 된다. 그리고 만약 위에서 공유한 구글 스프레드 시트를 그대로 연결할 경우 스키마에서 수정할 사항이 없지만 만약 시트명(요약)이나 컬럼명(주식명, TICKER, 수량 등)을 수정하여 연결할 경우 스키마에서 관련된 부분을 그에 맞게 변경해야 한다.

openapi: 3.0.0
info:
  title: Stock Portfolio Data API
  description: This API retrieves stock data from a Google spreadsheet through the Sheety API
  version: "1.0.0"

servers:
  - url: 'https://api.sheety.co/719f738133f6fea86207ca907150b1ef/stockPortfolioForGpt/'

paths:
  /요약:
    get:
      summary: Retrieve data from the spreadsheet
      description: Fetches data from the specified sheet in the spreadsheet.
      operationId: getSheetData
      responses:
        '200':
          description: Data retrieved successfully from the spreadsheet.
          content:
            application/json:
              schema:
                type: object
                properties:
                  요약:
                    type: array
                    items:
                      type: object
                      properties:
                        주식명:
                          type: string
                          description: The name of the stock holding.
                        TICKER:
                          type: string
                          description: Stock ticker symbol.
                        수량:
                          type: integer
                          description: Quantity of the stock purchased.
                        매수가 (단위당):
                          type: float
                          description: Purchase price per unit.
                        현재가 (단위당):
                          type: float
                          description: Current price per unit.
                        평가손익:
                          type: float
                          description: Unrealized gain or loss.
                        수익률:
                          type: float
                          description: Rate of return on the stock.
                        비중:
                          type: float
                          description: Proportion of the stock in the portfolio.
              example:
                요약:
                  - 주식명: "마이크로소프트"
                    TICKER: "MSFT"
                    수량: 32
                    매수가 (단위당): "$281.88"
                    현재가 (단위당): "$391.60"
                    평가손익: "$3,511.12"
                    수익률: "38.93%"
                    비중: "20.75%"

                  - 주식명: "엔비디아"
                    TICKER: "NVDA"
                    수량: 20
                    매수가 (단위당): "$298.92"
                    현재가 (단위당): "$567.01"
                    평가손익: "$5,361.84"
                    수익률: "89.69%"
                    비중: "18.77%"
        '400':
          description: Bad request. The request was invalid or cannot be otherwise served.
        '404':
          description: The specified row was not found.
        '401':
          description: Unauthorized. The request requires user authentication.

 스키마에 대해 간단히 설명하자면, API에 대한 설명을 포함하고 서버를 API의 기본 url으로 설정한다.
그리고 현재 주식 포트폴리오 데이터를 ‘요약’ 시트에 만들어두었기 때문에 경로를 ‘/요약’으로 설정하였고, 해당 시트에서 데이터를 가져오는 GET 요청을 수행할 것이므로 이 기능에 대한 설명도 명시하였다. 성공적으로 응답(’200’)한 경우 스프레드 시트에서 데이터가 성공적으로 검색된 것이므로 해당 정보를 어떻게 반환하는지에 대한 설명과 예시를 명시하고, 에러 응답에 대한 정보도 포함하였다.
 
참고로 API 관련 문서를 제공하고 GPT-4에게 스키마 설계를 요청하면 GPT-4가 도움을 주기 때문에, 스키마 설계가 익숙치 않다면 GPT-4에게 질문하는 것을 추천한다.
 
4. 배포한다. 

Save 버튼을 클릭한다. 개인적인 용도로 사용할 API이므로 Publish to Only me로 설정하여 배포하면 된다. 만약 공개적으로 배포할 경우에는 Add actions 창에서 Privacy Policy 부분도 채워주어야 배포가 가능하다.
 
 

📌 나만의 GPT로 주식 포트폴리오 분석하기  

 
나만의 커스텀 GPT, Portfolio Insight가 완성되었다. 이제 제대로 작동하는지 데모를 해보자.
 
우선 보유 주식에 대해 브리핑해달라고 요청하였다. 

GPT가 API와 연결할 수 있도록 Allow를 해준다. 매번 Allow를 하기 귀찮다면 Always Allow를 클릭해준다.
 

내용이 길어서 생략되었지만, 일단 구글 스프레드 시트에서 주식 포트폴리오의 모든 종목에 있는 브리핑해주는 것을 확인할 수 있다.
 
 
수익률이 가장 낮은 종목에 대해서도 분석해달라고 요청해보았다. 

수익률이 가장 낮은 종목이 TQQ인데, GPT가 데이터를 분석하여 수익률이 가장 낮은 종목을 찾아서 분석해주는 것을 확인할 수 있었다. instructions에 지시한 대로 웹 서치를 통하여 여러 관점으로 분석해주고 있다. 
 
 
현재 포트폴리오 비중이 가장 높은 종목에 대한 비중 수정에 대한 질문도 해보았다. 

 
 
물론 GPT 분석 내용만 고려하여 투자를 해서는 안되겠지만, 투자를 위해서 사용하는 다양한 지표들 중 'GPT 분석 결과'를 포함해볼만한 가치가 있는 것 같다. 또한 프롬프트를 더 구체화하거나, 개인이 가지고 있는 데이터를 knowledge로 업로드하거나, 여러 종류의 API도 함께 적용하는 방식으로 커스텀 GPT을 더 활용도 있게 사용할 수 있을 것 같다. 
 
 


 
내용이 도움이 되셨다면 댓글 또는 좋아요 부탁드립니다. 감사합니다. 😀
 
 

반응형