[Python] 인터넷 검색을 활용하여 GPT답변할수있게 만들기

Posted by Albert 14Day 4Hour 49Min 44Sec ago [2025-11-13]

GPT기본깡통은 학습한 시간까지의 내용기반으로 답변하므로 최신 내용에 대하여 물어보면 자체적으로 답변 못한다.

이러한 GPT에게 인터넷 정보를 스스로 활용하여 답변할수있게 만들어 보자

검색엔진은 무료로 api지원하는 더덕고를 활용한다.

더덕고 설치

pip install -U duckduckgo-search


실행소스

from langchain_openai import ChatOpenAI
from langchain_classic.memory import ChatMessageHistory
from dotenv import load_dotenv
from langchain_community.utilities import DuckDuckGoSearchAPIWrapper
from langchain_community.tools import DuckDuckGoSearchResults
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

load_dotenv()

model = ChatOpenAI(model="gpt-4o-mini")

' 한국 지역("kr-kr")을 기준, 최근 일주일("w") 내의 검색 결과를 가져오도록 초기화
wrapper = DuckDuckGoSearchAPIWrapper(region="kr-kr", time="w")

' 검색 기능을 위한 DuckDuckGoSearchResults 초기화
search = DuckDuckGoSearchResults(
api_wrapper=wrapper, ' 앞에서 정의한 API wrapper를 사용
source="news", ' 뉴스 소스에서만 검색하도록 지정
results_separator=';\n' ' 결과 항목 사이에 구분자 사용 (세미콜론과 줄바꿈)
)

docs = search.invoke("최근 ITZY가 발표한 신곡은 무었인가요?")

question_answering_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"사용자의 질문에 대해 아래 context에 기반하여 답변하라.:\n\n{context}",
),
MessagesPlaceholder(variable_name="messages"),
]
)

document_chain = question_answering_prompt | model

' 채팅 메시지를 저장할 메모리 객체 생성
chat_history = ChatMessageHistory()
' 사용자 질문을 메모리에 저장
chat_history.add_user_message("요즘 ITZY가 발표한 신곡은 무엇인가요?")

' 문서 검색하고 답변 생성
answer = document_chain.invoke(
{
"messages": chat_history.messages,
"context": docs,
}
)

' 생성된 답변을 메모리에 저장
chat_history.add_ai_message(answer)

print(answer)


실행결과

content="ITZY가 최근 발표한 신곡은 11 10일 발매된 새 미니 앨범 'TUNNEL VISION'의 동명의 타이틀곡입니다. 이 앨범은 '몰입'을 키워드로 하여 더욱 깊어진 서사와 다양한 음악 장르를 담고 있습니다." additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 71, 'prompt_tokens': 616, 'total_tokens': 687, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_provider': 'openai', 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_51db84afab', 'id': 'chatcmpl-CbM1FX5AqhiPoZTHHgOGfrJzbuoVD', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--375a6a67-8ffa-4e86-a341-5793c5e33dd5-0' usage_metadata={'input_tokens': 616, 'output_tokens': 71, 'total_tokens': 687, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}






LIST

Copyright © 2014 visionboy.me All Right Reserved.