|
1 | | -# from openai import OpenAI |
2 | | -# import os |
3 | | -# from dotenv import load_dotenv |
4 | | -# import pandas as pd |
5 | | - |
6 | | -# # 1. API 키 설정 |
7 | | -# load_dotenv() |
8 | | -# client = OpenAI(api_key=os.getenv("OPEN_API_KEY")) |
9 | | - |
10 | | -# # 2. 엑셀 데이터 불러오기 |
11 | | -# df = pd.read_excel("../data/financialData.xlsx") |
12 | | - |
13 | | -# # 3. 전체 상품 데이터 간결 요약 (token 최적화) |
14 | | -# def summarize_product(row): |
15 | | -# title = row['제목'] |
16 | | -# category = row['분류'] |
17 | | -# target = row['지원대상'] |
18 | | -# agency = row['주관기관'] |
19 | | -# method = row.get('신청방법(절차)', '신청 방법 정보 없음') |
20 | | -# contact = row.get('문의처', '문의처 정보 없음') |
21 | | -# summary = row['사업 개요'][:40].strip().replace("\n", " ") |
22 | | -# return f"{title} ({category}, {target}) - {summary} / 주관: {agency}, 신청: {method}, 문의: {contact}" |
23 | | - |
24 | | -# product_summaries = "\n".join(df.apply(summarize_product, axis=1)) |
25 | | - |
26 | | -# # 4. 사용자 입력 예시 |
27 | | -# user_input = { |
28 | | -# "업종": "소셜벤처", |
29 | | -# "기업 형태": "사회적기업", |
30 | | -# "기업 규모": "10인 미만", |
31 | | -# "연매출": "2억", |
32 | | -# "필요금액": "5천만원", |
33 | | -# "선호 이율 구조": "고정금리", |
34 | | -# "담보 제공 가능 여부": "불가능", |
35 | | -# "필요 서비스 종류": "운영자금 대출", |
36 | | -# "우대 조건 보유 항목": "없음" |
37 | | -# } |
38 | | -# user_info = "\n".join(f"- {k}: {v}" for k, v in user_input.items()) |
39 | | - |
40 | | -# # 5. 부드러운 말투 + 기관 정보 포함 + 챗봇성 마무리 프롬프트 |
41 | | -# prompt = f""" |
42 | | -# 당신은 사회적경제에 특화된 금융 추천 챗봇입니다. |
43 | | - |
44 | | -# 다음 지침을 지켜 사용자에게 금융 상품을 추천해주세요: |
45 | | - |
46 | | -# - 말투는 토스나 카카오뱅크처럼 부드럽고 친근하게 |
47 | | -# - 추천 이유에는 기업 형태, 규모, 이율 선호, 우대 조건 등과의 관련성을 포함 |
48 | | -# - 각 상품에 주관기관, 신청 방법, 문의처 정보를 반드시 포함 |
49 | | -# - 마지막 문단은 다음 기준에 따라 자연스럽게 마무리해주세요: |
50 | | - |
51 | | -# - 조건에 맞는 상품을 추천한 경우에는 다음 문구를 사용해주세요: |
52 | | - |
53 | | -# "두 상품 모두 사용자님의 조건에 잘 맞는 금융지원 상품이에요. |
54 | | -# 자세한 내용은 각 주관기관을 통해 확인해보시면 좋아요. |
55 | | -# 사회를 더 따뜻하게 만드는 이 길을 응원할게요. |
56 | | -# 이 추천이 작게나마 힘이 되었으면 좋겠습니다!" |
57 | | - |
58 | | -# - 추천할 만한 상품이 없는 경우에는 다음 문구를 사용해주세요: |
59 | | - |
60 | | -# "조건에 꼭 맞는 금융상품은 현재 목록에는 없는 것 같아요. |
61 | | -# 하지만 서민금융진흥원, 신용보증기금, 서울신용보증재단 같은 기관에서 |
62 | | -# 더 다양한 지원 정보를 찾아보시면 좋을 것 같아요. |
63 | | -# 사회를 더 나은 방향으로 바꾸는 사용자님의 활동을 진심으로 응원합니다!" |
64 | | - |
65 | | -# - 만약 아래 상품 목록 중 어떤 항목도 사용자 조건(예: 기업 형태, 업종, 우대 조건 등)에 명확히 일치하지 않는다면, |
66 | | -# 절대 추천하지 마세요. 억지로 비슷한 상품을 제안하지 마시고, |
67 | | -# 현재 조건에 맞는 상품이 없다는 점을 사용자에게 솔직하고 친절하게 알려주세요. |
68 | | -# - 그리고 대안으로 조건에 맞는 정보를 얻을 수 있는 기관이나 포털(예: 서민금융진흥원, 신용보증기금, 서울신용보증재단 등)을 안내해 주세요. |
69 | | - |
70 | | - |
71 | | -# [사용자 정보] |
72 | | -# {user_info} |
73 | | - |
74 | | -# [금융 상품 목록 요약] (총 {len(df)}개) |
75 | | -# {product_summaries} |
76 | | - |
77 | | -# 이 사용자에게 가장 적합한 금융 상품 1개를 추천해주세요. |
78 | | -# """ |
79 | | - |
80 | | -# # 6. GPT 호출 |
81 | | -# response = client.chat.completions.create( |
82 | | -# model="gpt-4-1106-preview", # 128k context |
83 | | -# messages=[ |
84 | | -# {"role": "user", "content": prompt} |
85 | | -# ] |
86 | | -# ) |
87 | | - |
88 | | -# # 7. 응답 출력 |
89 | | -# print(response.choices[0].message.content) |
90 | | - |
91 | 1 | from fastapi import FastAPI, HTTPException |
92 | 2 | from pydantic import BaseModel |
93 | 3 | from openai import OpenAI |
|
0 commit comments