JUNGU's picture
Update app.py
7ee34c3 verified
from smolagents import CodeAgent, DuckDuckGoSearchTool, tool, LiteLLMModel
import yaml
import traceback
import os
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
@tool
def search_news(topic: str) -> str:
"""
주어진 주제에 대한 최신 뉴스를 검색하는 도구입니다.
Args:
topic: 검색할 뉴스 주제
Returns:
검색된 뉴스 정보
"""
try:
search_agent = CodeAgent(
tools=[DuckDuckGoSearchTool()],
model=model,
additional_authorized_imports=["requests", "bs4"]
)
search_query = f"최신 뉴스 {topic}"
return search_agent.run(f"Search for: {search_query}")
except Exception as e:
traceback.print_exc()
return f"검색 중 오류 발생: {str(e)}"
@tool
def write_article(topic: str, search_results: str) -> str:
"""
검색 결과를 바탕으로 새로운 기사를 작성하는 도구입니다.
Args:
topic: 기사 주제
search_results: 검색된 뉴스 정보
Returns:
작성된 기사
"""
try:
system_prompt = """당신은 전문 기자입니다. 주어진 주제에 대해 검색된 정보를 바탕으로 새로운 기사를 한국어로 작성해야 합니다.
다음 형식으로 기사를 작성해주세요:
1. 제목 (흥미롭고 눈에 띄는 제목)
2. 요약 (핵심 내용을 2-3문장으로 요약)
3. 본문 (상세한 내용을 단락으로 구분하여 작성)
4. 결론 (기사의 의의나 향후 전망)
기사는 객관적이고 사실에 기반하여 작성해야 하며, 검색된 정보를 재구성하여 새로운 시각으로 작성해주세요."""
user_prompt = f"""다음 주제와 검색 결과를 바탕으로 새로운 기사를 한국어로 작성해주세요:
주제: {topic}
검색 결과:
{search_results}
위 정보를 바탕으로 새롭고 통찰력 있는 기사를 작성해주세요."""
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
]
response = model(messages)
if isinstance(response, dict) and 'content' in response:
return response['content']
elif hasattr(response, 'content'):
return response.content
else:
return str(response)
except Exception as e:
traceback.print_exc()
return f"기사 작성 중 오류 발생: {str(e)}"
final_answer = FinalAnswerTool()
model = LiteLLMModel(
model_id="gemini/gemini-2.0-flash-exp", # 반드시 model_id 로 지정해야 함
max_tokens=2096,
temperature=0.7,
api_key=os.getenv("GOOGLE_API_KEY")
)
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
tools=[search_news, write_article, final_answer],
max_steps=10,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
if __name__ == "__main__":
try:
GradioUI(agent).launch()
except Exception as e:
print(f"Error launching UI: {str(e)}")