SERP Finance News API์ ์คํ์์ค LLM์ ํ์ฉํด ์๋์ผ๋ก ๊ธ์ต ๋ด์ค๋ฅผ ๋ชจ์ผ๊ณ , JSON ํํ๋ก ์์ฝํด๋ณธ๋ค
from dotenv import load_dotenv
# ํ๊ฒฝ๋ณ์ ๋ก๋ (.env)
load_dotenv()
import requests
import json
import os
# API ํค์ ์๋ํฌ์ธํธ URL ์ค์
api_key = os.getenv('SERP_API_KEY')
url = "https://serpapi.com/search.json"
# ๊ฒ์ ๋งค๊ฐ๋ณ์ ์ค์
params = {
"api_key": api_key,
"engine": "google_news",
"q": "Tesla",
"lang": "ko",
"country": "kr"
}
# API ์์ฒญ
response = requests.get(url, params=params)
if response.status_code == 200:
data = json.loads(response.text)
articles = []
news_results = data.get("news_results", [])
for article in news_results:
link = article.get('link', 'N/A')
# forbes ๊ธฐ์ฌ๋ง ํํฐ๋ง
if 'forbes' in link:
articles.append(article)
for article in articles[:5]:
print(f"์ ๋ชฉ: {article.get('title', 'N/A')}")
print(f"๋งํฌ: {article.get('link', 'N/A')}")
print(f"์ถ์ฒ: {article.get('source', 'N/A')}")
print(f"๊ฒ์ ์๊ฐ: {article.get('date', 'N/A')}")
print("=====================================")
else:
print(f"์ค๋ฅ ๋ฐ์: {response.status_code}")
import bs4
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader(
web_paths=[articles[0].get('link', 'N/A')],
bs_kwargs=dict(
parse_only=bs4.SoupStrainer(
name=["div"],
attrs={"class": ["article-body fs-article fs-responsive-text current-article article-topline"]},
)
),
)
data = loader.load()
print(data[0].page_content)
from langchain_community.chat_models import ChatOllama
eeve = ChatOllama(model="EEVE-Korean-Instruct-10.8B-v1.0:latest")
prompt = f"""
๋น์ ์ ๊ธ์ต ๋ถ์ผ์ ์์ฝ ์ ๋ฌธ๊ฐ์
๋๋ค.
์๋์ ๊ธ์ต ๊ด๋ จ ํ
์คํธ๋ฅผ ์ฝ๊ณ , ๋ค์ ์ง์นจ์ ๋ฐ๋ผ ์์ฝํด ์ฃผ์ธ์:
1. ์ ์ฒด ๋ด์ฉ์ 50๋จ์ด ์ด๋ด๋ก ์์ฝํ 'summary' ํ๋๋ฅผ ์์ฑํด ์ฃผ์ธ์.
2. ํต์ฌ ๋ด์ฉ์ 5-10๊ฐ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํด์ 'key_points' ํ๋์ ์์ฑํด ์ฃผ์ธ์.
3. ๊ฐ key_points ๋ด์ฉ์ ํ ๋ฌธ์ฅ์ผ๋ก, 20๋จ์ด๋ฅผ ๋์ง ์๋๋ก ํด์ฃผ์ธ์.
4. ํ
์คํธ์ ํต์ฌ ํค์๋์ ๊ด๋ จ๋ ๋จ์ด๋ ๊ฐ๋
์ 10๊ฐ ๋ด์ธ๋ก 'tags' ํ๋์ ์ถ๊ฐํด ์ฃผ์ธ์.
5. ์ ๋ฌธ ์ฉ์ด๊ฐ ์๋ค๋ฉด ๊ฐ๋จํ ์ค๋ช
์ ๋ง๋ถ์ฌ ์ฃผ์ธ์.
6. ์ซ์๋ ํต๊ณ๊ฐ ์๋ค๋ฉด ๋ฐ๋์ ํฌํจ์์ผ ์ฃผ์ธ์.
7. ์์ฝ์ ๊ฐ๊ด์ ์ด๊ณ ์ค๋ฆฝ์ ์ธ ํค์ ์ ์งํด ์ฃผ์ธ์.
์๋ต์ ๋ฐ๋์ ์๋์ JSON ํ์์ ๋ฐ๋ผ ์ฃผ์ธ์:
{{
"summary": "์ ์ฒด ๋ด์ฉ ์์ฝ (50๋จ์ด ์ด๋ด)",
"key_points": [
"ํต์ฌ ํฌ์ธํธ 1 (20๋จ์ด ์ด๋ด)",
"ํต์ฌ ํฌ์ธํธ 2 (20๋จ์ด ์ด๋ด)",
"ํต์ฌ ํฌ์ธํธ 3 (20๋จ์ด ์ด๋ด)",
"ํต์ฌ ํฌ์ธํธ 4 (20๋จ์ด ์ด๋ด)",
"ํต์ฌ ํฌ์ธํธ 5 (20๋จ์ด ์ด๋ด)",
...
],
"tags": ["ํ๊ทธ1", "ํ๊ทธ2", "ํ๊ทธ3", ...]
}}
ํ
์คํธ:
{data[0].page_content}
์ ์ง์นจ์ ๋ฐ๋ผ JSON ํ์์ผ๋ก ์์ฝํด ์ฃผ์ธ์.
"""
response = eeve.invoke(prompt)
# JSON ํ์ฑ
import json
parsed_response = json.loads(response.content)
parsed_response