논문 검색을 함수호출과 연계하기
실행 준비
!pip install openai
!pip install gradio
#!pip install arxiv
논문 검색
from openai import OpenAI
import json
import arxiv # arxiv 라이브러리 설치 필요: pip install arxiv
# 1. OpenAI 클라이언트 설정
client = OpenAI()
# 2. 논문 검색 함수
def search_paper(query):
results = arxiv.Search(
query=query,
max_results=3,
sort_by=arxiv.SortCriterion.Relevance
)
papers = []
for r in results.results():
papers.append(f"📄 {r.title}\n🧑🔬 저자: {', '.join([a.name for a in r.authors])}\n📅 출판일: {r.published.date()}\n🔗 링크: {r.pdf_url}")
return "\n\n".join(papers) if papers else "해당 주제에 대한 논문을 찾을 수 없습니다."
# 3. 함수 목록 정의 (tool format)
tools = [
{
"type": "function",
"function": {
"name": "search_paper",
"description": "arXiv에서 관련 논문을 검색합니다.",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "논문 검색 키워드이며 반드시 영어 단어나 문장으로 변환해줘"},
},
"required": ["query"]
}
}
}
]
# 4. 사용자 입력 예시 (자유롭게 바꾸세요)
user_message = "양자 컴퓨팅에 대한 최신 논문 찾아줘."
# 5. ChatGPT 호출
completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "사용자의 요청에 따라 논문 검색에 필요한 키워드를 영어로 번역하여 추출한 후 search_paper 함수를 호출해줘. 그 외에는 일반적인 답변을 해줘."},
{"role": "user", "content": user_message}
],
tools=tools,
)
# 6. 응답 처리
response = completion.choices[0].message
if response.tool_calls:
tool_call = response.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
if function_name == "search_paper":
result = search_paper(arguments['query'])
else:
result = "지원되지 않는 함수입니다."
print(result)
else:
print(response.content)