openfree commited on
Commit
dc92774
·
verified ·
1 Parent(s): 493b65b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +75 -24
app.py CHANGED
@@ -11,21 +11,80 @@ load_dotenv()
11
  def create_deepseek_interface():
12
  # 환경 변수에서 API 키 가져오기
13
  api_key = os.getenv("FW_API_KEY")
 
 
14
  if not api_key:
15
  print("경고: FW_API_KEY 환경 변수가 설정되지 않았습니다.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  # 스트리밍 방식으로 DeepSeek API 호출 함수
18
- def query_deepseek_streaming(message, history):
19
  if not api_key:
20
  yield history, "환경 변수 FW_API_KEY가 설정되지 않았습니다. 서버에서 환경 변수를 확인해주세요."
21
  return
22
 
 
 
 
 
 
 
 
23
  # API 요청을 위한 대화 기록 준비
24
  messages = []
25
  for user, assistant in history:
26
  messages.append({"role": "user", "content": user})
27
  messages.append({"role": "assistant", "content": assistant})
28
 
 
 
 
 
 
29
  # 새 사용자 메시지 추가
30
  messages.append({"role": "user", "content": message})
31
 
@@ -105,35 +164,24 @@ def create_deepseek_interface():
105
  """
106
  )
107
 
108
- # 메인 레이아웃 (두 개의 열)
109
  with gr.Row():
110
- # 사이드바 - 모델 정보
111
- with gr.Column(scale=1):
112
- gr.Markdown(
113
- """
114
- ## 📊 모델 세부 정보
115
- - **모델**: DeepSeek-V3-0324
116
- - **제공자**: Fireworks AI
117
- - **최대 토큰**: 20,480
118
- - **온도**: 0.6
119
- - **기능**: 고급 언어 이해와 실시간 스트리밍 응답
120
-
121
- > **참고**: API 키는 환경 변수(FW_API_KEY)에서 자동으로 로드됩니다.
122
- """
123
- )
124
-
125
- # 오류 메시지 표시
126
- error_box = gr.Markdown("")
127
-
128
  # 메인 콘텐츠 영역
129
- with gr.Column(scale=2):
130
- # 채팅 인터페이스 - 호환성 문제 해결을 위해 매개변수 제거
131
  chatbot = gr.Chatbot(
132
  height=500,
133
  show_label=False,
134
  container=True
135
  )
136
 
 
 
 
 
 
 
 
137
  # 입력 영역
138
  with gr.Row():
139
  msg = gr.Textbox(
@@ -157,11 +205,14 @@ def create_deepseek_interface():
157
  ],
158
  inputs=msg
159
  )
 
 
 
160
 
161
  # 버튼과 기능 연결
162
  submit.click(
163
  query_deepseek_streaming,
164
- inputs=[msg, chatbot],
165
  outputs=[chatbot, error_box]
166
  ).then(
167
  lambda: "",
@@ -172,7 +223,7 @@ def create_deepseek_interface():
172
  # Enter 키 제출 허용
173
  msg.submit(
174
  query_deepseek_streaming,
175
- inputs=[msg, chatbot],
176
  outputs=[chatbot, error_box]
177
  ).then(
178
  lambda: "",
 
11
  def create_deepseek_interface():
12
  # 환경 변수에서 API 키 가져오기
13
  api_key = os.getenv("FW_API_KEY")
14
+ serphouse_api_key = os.getenv("SERPHOUSE_API_KEY")
15
+
16
  if not api_key:
17
  print("경고: FW_API_KEY 환경 변수가 설정되지 않았습니다.")
18
+ if not serphouse_api_key:
19
+ print("경고: SERPHOUSE_API_KEY 환경 변수가 설정되지 않았습니다.")
20
+
21
+ # SerpHouse API를 사용하여 검색 수행 함수
22
+ def search_with_serphouse(query):
23
+ if not serphouse_api_key:
24
+ return "SERPHOUSE_API_KEY가 설정되지 않았습니다."
25
+
26
+ url = "https://api.serphouse.com/serp/live"
27
+ payload = {
28
+ "q": query,
29
+ "domain": "google.com",
30
+ "loc": "us",
31
+ "lang": "en",
32
+ "device": "desktop",
33
+ "serp_type": "web",
34
+ "page": 1,
35
+ "num": 5 # 상위 5개 결과만 가져오기
36
+ }
37
+ headers = {
38
+ "Content-Type": "application/json",
39
+ "Authorization": f"Bearer {serphouse_api_key}"
40
+ }
41
+
42
+ try:
43
+ response = requests.post(url, headers=headers, json=payload)
44
+ response.raise_for_status()
45
+
46
+ search_results = response.json()
47
+
48
+ # 검색 결과 파싱 및 포맷팅
49
+ formatted_results = []
50
+ if "organic" in search_results and len(search_results["organic"]) > 0:
51
+ for result in search_results["organic"][:5]: # 상위 5개 결과만 사용
52
+ title = result.get("title", "제목 없음")
53
+ snippet = result.get("snippet", "내용 없음")
54
+ link = result.get("link", "#")
55
+ formatted_results.append(f"제목: {title}\n내용: {snippet}\n링크: {link}\n\n")
56
+
57
+ return "".join(formatted_results)
58
+ else:
59
+ return "검색 결과가 없습니다."
60
+
61
+ except Exception as e:
62
+ return f"검색 중 오류 발생: {str(e)}"
63
 
64
  # 스트리밍 방식으로 DeepSeek API 호출 함수
65
+ def query_deepseek_streaming(message, history, use_deep_research):
66
  if not api_key:
67
  yield history, "환경 변수 FW_API_KEY가 설정되지 않았습니다. 서버에서 환경 변수를 확인해주세요."
68
  return
69
 
70
+ search_context = ""
71
+ if use_deep_research:
72
+ # 검색 수행
73
+ search_results = search_with_serphouse(message)
74
+ if not search_results.startswith("검색 중 오류 발생") and not search_results.startswith("SERPHOUSE_API_KEY"):
75
+ search_context = f"다음은 사용자 질문과 관련된 최신 검색 결과입니다. 이 정보를 참고하여 정확하고 최신 정보가 반영된 응답을 제공하세요:\n\n{search_results}\n\n사용자 질문에 답변하세요.\n\n"
76
+
77
  # API 요청을 위한 대화 기록 준비
78
  messages = []
79
  for user, assistant in history:
80
  messages.append({"role": "user", "content": user})
81
  messages.append({"role": "assistant", "content": assistant})
82
 
83
+ # 검색 컨텍스트가 있으면 시스템 메시지 추가
84
+ if search_context:
85
+ # DeepSeek 모델은 시스템 메시지를 지원합니다
86
+ messages.insert(0, {"role": "system", "content": search_context})
87
+
88
  # 새 사용자 메시지 추가
89
  messages.append({"role": "user", "content": message})
90
 
 
164
  """
165
  )
166
 
167
+ # 메인 레이아웃
168
  with gr.Row():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  # 메인 콘텐츠 영역
170
+ with gr.Column():
171
+ # 채팅 인터페이스
172
  chatbot = gr.Chatbot(
173
  height=500,
174
  show_label=False,
175
  container=True
176
  )
177
 
178
+ # Deep Research 토글 추가
179
+ with gr.Row():
180
+ use_deep_research = gr.Checkbox(
181
+ label="Deep Research 활성화",
182
+ info="최신 웹 검색 결과를 활용한 응답 생성"
183
+ )
184
+
185
  # 입력 영역
186
  with gr.Row():
187
  msg = gr.Textbox(
 
205
  ],
206
  inputs=msg
207
  )
208
+
209
+ # 오류 메시지 표시
210
+ error_box = gr.Markdown("")
211
 
212
  # 버튼과 기능 연결
213
  submit.click(
214
  query_deepseek_streaming,
215
+ inputs=[msg, chatbot, use_deep_research],
216
  outputs=[chatbot, error_box]
217
  ).then(
218
  lambda: "",
 
223
  # Enter 키 제출 허용
224
  msg.submit(
225
  query_deepseek_streaming,
226
+ inputs=[msg, chatbot, use_deep_research],
227
  outputs=[chatbot, error_box]
228
  ).then(
229
  lambda: "",