File size: 6,363 Bytes
c143f79
b148263
 
 
 
 
 
 
c143f79
ad9a65f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
---
title: Tool Calling Academic Assistant
emoji: 🔬
colorFrom: blue
colorTo: indigo
sdk: gradio
app_file: app.py
pinned: false
---
# 🔬 Tool-Calling & MCP Destekli Akademik Araştırma Asistanı

Bu proje, kullanıcının akademik makale araması yapabildiği (ArXiv & Semantic Scholar API), bulduğu makaleleri kişisel SQLite veritabanındaki kütüphanesine kaydedebildiği, okuma durumunu güncelleyebildiği ve not ekleyebildiği **uçtan uca çalışan bir Tool-Calling & MCP (Model Context Protocol) sistemidir**.

---

## 📌 Proje Senaryosu ve Mimarisi

Ödev kapsamında **Akademik Araştırma ve Makale Yönetim Asistanı** senaryosu seçilmiştir. Sistem, dil modelinin (LLM) dış dünyaya (ArXiv API, Semantic Scholar API ve yerel SQLite Veritabanı) güvenli ve halüsinasyonsuz bir şekilde erişmesini sağlar.

```mermaid
graph TD
    User([Kullanıcı / Chat UI / Cursor / Claude Desktop]) <--> LLM[LLM Engine / Ollama / Groq / OpenAI]
    LLM <--> Dispatcher[Tool Call & MCP Dispatcher]
    
    subgraph Dış Kaynaklar & Veritabanı (Tool Layer)
        Dispatcher -->|1. search_arxiv_papers| ArXiv[ArXiv REST API]
        Dispatcher -->|2. search_openalex| OpenAlex[OpenAlex API]
        Dispatcher -->|3. save_paper_to_library| SQLite[(SQLite DB: academic_library.db)]
        Dispatcher -->|4. get_saved_library| SQLite
        Dispatcher -->|5. update_paper_status_or_note| SQLite
        Dispatcher -->|6. delete_paper| SQLite
        Dispatcher -->|7. clear_library| SQLite
        
    end
```

### ⚡ Öne Çıkan Özellikler:
1. **Halüsinasyon Engelleme**: Sistem promptu ve tool mimarisi sayesinde model veritabanında veya API'de bulunmayan uydurma bir makale/bilgi üretemez. Tüm yanıtlar gerçek tool çıktılarına dayanır.
2. **Çift Mimarili Bağlantı (Tool-Calling + MCP Protocol)**:
   - **Gradio Web UI**: Hugging Face Space üzerinde canlı çalışan görsel arayüz ve canlı Tool Execution Log ekranı.
   - **MCP Server (`mcp_server.py`)**: Anthropic / Linux Foundation standartlarındaki Model Context Protocol sunucusu. Claude Desktop, Cursor veya VS Code üzerinden doğrudan sunucuya bağlanabilir.
3. **Sıfır Lokal Model Ağırlığı (Cloud LLM Esnekliği)**:
   - Bilgisayarınıza gigabaytlarca model ağırlığı indirmek zorunda kalmadan ücretsiz **Groq**, **OpenRouter** veya **Remote Ollama** cloud endpoint'leri ile çalışabilir.

---

## 🛠️ Tanımlı Fonksiyonlar (Tools)

| Fonksiyon Adı | Açıklama | İşlem Türü |
| :--- | :--- | :--- |
| `search_arxiv_papers` | ArXiv üzerinden makale başlığı, yazar, özet ve PDF linklerini getirir. | API Read |
| `search_openalex` | OpenAlex platformundan atıf sayıları (citations) ile makale getirir. | API Read |
| `save_paper_to_library` | Seçilen makaleyi yerel SQLite veritabanına kaydeder. | DB Write |
| `get_saved_library` | Veritabanında kayıtlı makaleleri ve okuma durumunu listeler. | DB Read |
| `update_paper_status_or_note` | Kayıtlı makalelerin durumunu (`unread`, `reading`, `completed`) veya notunu günceller. | DB Write |
| `delete_paper` | Veritabanından belirtilen ID'ye sahip makaleyi siler. | DB Write |
| `clear_library` | Veritabanındaki tüm kayıtlı makaleleri siler. | DB Write |

---

## 🚀 Projeyi Yerelde Çalıştırma Adımları

### 1. Depoyu Klonlayın ve Bağımlılıkları Yükleyin

```bash
git clone https://github.com/KULLANICI_ADI/proje.git
cd proje
pip install -r requirements.txt
```

### 2. Uygulamayı Başlatın (Web Arayüzü)

```bash
python app.py
```
Uygulama yerelde `http://localhost:7860` adresinde çalışmaya başlayacaktır.

### 3. (İsteğe Bağlı) MCP Sunucusu Olarak Çalıştırma

Claude Desktop veya Cursor gibi MCP istemcilerine bağlamak için:

```bash
python mcp_server.py
```

---

### 💬 Kullanıcı Girdisi:
> *"Quantum computing alanındaki en son ArXiv makalelerini ara ve ilk çıkan makaleyi kütüphaneme kaydet."*

---

### ⚙️ Arka Plan Tool-Call Log Çıktısı (JSON Trace):

```json
[
  {
    "timestamp": "2026-08-01 11:26:44",
    "type": "TOOL_CALL_TRIGGERED",
    "name": "search_arxiv_papers",
    "input": {
      "query": "quantum computing",
      "max_results": 2
    },
    "output": {
      "status": "success",
      "count": 2,
      "papers": [
        {
          "paper_id": "arxiv_2403.02240v5",
          "title": "Quantum Computing: Vision and Challenges",
          "authors": "Sukhpal Singh Gill, Oktay Cetinkaya, Stefano Marrone",
          "published_year": "2024",
          "url": "https://arxiv.org/abs/2403.02240v5",
          "source": "ArXiv"
        }
      ]
    }
  },
  {
    "timestamp": "2026-08-01 11:26:45",
    "type": "TOOL_CALL_TRIGGERED",
    "name": "save_paper_to_library",
    "input": {
      "paper_id": "arxiv_2403.02240v5",
      "title": "Quantum Computing: Vision and Challenges",
      "authors": "Sukhpal Singh Gill, Oktay Cetinkaya, Stefano Marrone",
      "url": "https://arxiv.org/abs/2403.02240v5",
      "published_year": "2024",
      "tags": "Quantum"
    },
    "output": {
      "status": "success",
      "message": "'Quantum Computing: Vision and Challenges' başarıyla kütüphaneye kaydedildi.",
      "paper_id": "arxiv_2403.02240v5"
    }
  }
]
```

### 🤖 Modelin Nihai Yanıtı:
> *"Quantum computing alanında ArXiv üzerinde arama yapıldı ve **'Quantum Computing: Vision and Challenges'** başlıklı makale bulundu. Makale başarıyla kişisel veritabanı kütüphanenize kaydedildi! (Makale ID: `arxiv_2403.02240v5`)"*

---

Proje default haliyle Groq API'sine bağlı olduğu için istekleri gerçekleştirmesi uzun sürebilir veya çoklu makalelerde token yetmeyebilir. Bu nedenle her istekten sonra 5-10 saniye arası beklenmelidir.


## 📁 Proje Dosya Yapısı

```
proje/
├── app.py              # Gradio Web Arayüzü & Log İzleyici UI
├── mcp_server.py       # Anthropic Model Context Protocol (MCP) Server
├── agent.py            # LLM Tool-Calling Yönlendiricisi & Prompt Yönetimi
├── tools.py            # ArXiv API, Semantic Scholar API ve Tool Şemaları
├── database.py         # SQLite Veritabanı CRUD İşlemleri
├── config.py           # API Ayarları ve Yapılandırma
├── requirements.txt    # Gerekli Python Kütüphaneleri
└── README.md           # Proje Dokümantasyonu
```