File size: 29,306 Bytes
6b62834
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
# Agentic RAG 智胜问答系统

<p align="center"><b>ReAct Agent 驱劚</b> | <b>倚暡态知识库</b> | <b>MCP 工具扩展</b> | <b>蟹猘/本地郚眲</b></p>

---

基于 **ReAct Agent** 的倚暡态检玢增区生成RAG系统支持文本、囟片、音频、视频的统䞀入库䞎跚暡态检玢提䟛智胜问答、工具调甚、MCP 扩展、流匏对话、语音亀互等完敎胜力。支持 OpenAI / 本地 OpenAI-compatible 暡型可灵掻郚眲圚云端或蟹猘讟倇䞊。

[![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
[![FastAPI](https://img.shields.io/badge/FastAPI-0.115%2B-009688.svg)](https://fastapi.tiangolo.com/)
[![React 19](https://img.shields.io/badge/React-19-61DAFB.svg)](https://react.dev/)
[![Milvus Lite](https://img.shields.io/badge/Vector%20Store-Milvus%20Lite-orange.svg)](https://milvus.io/)
[![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE)

> 圓前版本`0.1.0`。郚分胜力还需芁进䞀步匀发验证。
>
---

![alt text](image.png)

![alt text](image-1.png)

---

## 目圕

- [项目背景](#项目背景)
- [栞心特性](#栞心特性)
- [系统架构](#系统架构)
- [快速匀始](#快速匀始)
- [䜿甚方匏](#䜿甚方匏)
- [其他功胜](#其他功胜)
  - [倚暡态知识库](#倚暡态知识库)
  - [MCP 工具扩展](#mcp-工具扩展)
  - [语音䞎消息眑关](#语音䞎消息眑关)
  - [功胜状态](#功胜状态)
- [AX8850 运行瀺䟋](#ax8850-运行瀺䟋)


---

## 项目背景

### 䞺什么需芁 Agentic RAG

䌠统 RAG 系统只胜被劚检玢而现实场景䞭的问题埀埀需芁倚步掚理、工具调甚和劚态决策

- **静态检玢局限** — 䞀次性检玢隟以回答需芁倚蜮掚理的倍杂问题。
- **暡态割裂** — 文本、囟片、音视频分散存傚无法统䞀检玢倧量非文本信息被浪莹。
- **工具孀岛** — 检玢、计算、倖郚 API 等胜力各自独立Agent 无法根据䞊䞋文自䞻选择工具。
- **郚眲倍杂** — 倚数方案䟝赖云端服务存圚隐私泄露风险和高昂调甚成本。

### 本项目的解决思路

本项目将 **ReAct Agent** 侎 **倚暡态 RAG** 深床融合让 Agent 胜借"思考→行劚→观察→再思考"圚掚理过皋䞭自䞻决定䜕时检玢知识库、䜕时调甚倖郚工具、䜕时生成最终答案

- 🧠 **Agent 驱劚检玢** — Agent 根据问题倍杂床自䞻决定检玢策略支持倚蜮掚理和工具铟调甚。
- 🔗 **MCP 生态接入** — 通过 Model Context Protocol 接入倖郚工具Agent 胜力可无限扩展。
- 🎚 **倚暡态统䞀** — 文本、囟片、音频、视频统䞀向量空闎跚暡态语义检玢。
- 🏠 **本地䌘先** — 支持本地 LLM / Embedding 服务数据䞍出讟倇隐私安党可控。

### 应甚场景

| 领域 | 兞型场景 | 栞心价倌 |
|------|----------|----------|
| 🏢 **䌁䞚知识管理** | 智胜客服、内郚培训、文档问答 | 倚蜮对话理解䞊䞋文自劚调甚内郚工具查询数据 |
| 🔬 **研发蟅助** | 代码库问答、技术文档检玢、API 集成 | Agent 自䞻检玢代码瀺䟋、调甚调试工具、生成修倍建议 |
| 📚 **教育科研** | 文献绌述、诟件问答、实验数据分析 | 跚文献倚蜮掚理自劚提取关键信息并生成绌述 |
| 🎬 **内容创䜜** | 玠材检玢、脚本生成、倚暡态内容理解 | 以文搜囟/以囟搜视频Agent 蟅助创䜜党流皋 |
| 🏥 **䞓䞚领域** | 医疗文献问答、法埋条文检玢、金融报告分析 | 䞥栌的数据隐私芁求䞋本地运行䞓䞚工具铟集成 |

---

## 栞心特性

### 🚀 功胜特性

- **ReAct Agent 匕擎** — 支持 `Thought → Action → Observation → Final Answer` 埪环以及原生 Function CallingAgent 可自䞻规划倚步掚理。
- **倚暡匏智胜路由** — 按查询意囟劚态装配工具集知识库检玢、联眑搜玢、媒䜓理解及 MCP 扩展工具Agent 每蜮掚理均可自䞻调甚工具。
- **四暡态统䞀检玢** — 文本、囟片、音频、视频圚同䞀向量空闎䞭衚瀺支持以文搜囟、以囟搜视频等跚暡态查询。
- **混合检玢策略** — 支持 `naive` 纯向量检玢和 `hybrid` 向量 + 知识囟谱混合检玢提升召回准确率。
- **流匏对话䜓验** — REST SSE 侎 WebSocket 双通道流匏蟓出实时展瀺 Agent 思考过皋和工具调甚。
- **倚入口灵掻接入** — Web UI、REST API、WebSocket、CLI、匂步 Python SDK满足䞍同场景需求。

### 🔧 技术特性

- **MCP 工具扩展** — 启劚时自劚连接倖郚 MCP Server将工具泚册到 Agent实现胜力热插拔。
- **倚提䟛商 LLM** — 内眮 OpenAI、以及任意 OpenAI-compatible 本地服务适配。
- **暡块化架构** — Agent 匕擎、知识管线、向量存傚、LLM 服务、记忆系统分层解耊可独立替换升级。
- **本地数据持久化** — SQLite 䌚话存傚、Milvus Lite 向量库、JSON 知识囟谱零倖郚䟝赖即可运行。
- **可配眮预倄理** — 文本分块倧小、囟片倄理策略、音频切片参数等均可通过环境变量调节。

---

## 系统架构

### 敎䜓架构

```text
┌─────────────────────────────────────────────────────────────┐
│                    接入层 (Entry Points)                     │
│   Web UI  │  REST API  │  WebSocket  │  CLI  │  Python SDK  │
└──────────────────────────┬──────────────────────────────────┘
                           │
                           ▌
┌─────────────────────────────────────────────────────────────┐
│                   Agent 路由䞎匕擎层                         │
│         AgentRouter (暡匏路由)  +  ReActEngine (掚理埪环)     │
│              ↓ Thought → Action → Observation ↑             │
└──────────────────────────┬──────────────────────────────────┘
                           │
           ┌───────────────┌───────────────┐
           ▌               ▌               ▌
      ┌─────────┐    ┌──────────┐    ┌──────────┐
      │ RAG 工具 │    │ MCP 工具 │    │ 媒䜓工具  │
      │(知识库) │    │(倖郚扩展)│    │(语音/囟像)│
      └────┬────┘    └──────────┘    └──────────┘
           │
           ▌
┌─────────────────────────────────────────────────────────────┐
│                    知识管线 (Knowledge Pipeline)             │
│   Parse → Process → Embed → Milvus Lite                     │
│              └────────→ Knowledge Graph (可选)               │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                      数据持久化层                            │
│   SQLite (䌚话/消息)  │  Milvus Lite (向量)  │  JSON (KG)    │
└─────────────────────────────────────────────────────────────┘
```

### 知识管线流皋

```text
原始蟓入 (文本/囟片/音频/视频/PDF/Office)
        │
        ▌
┌───────────────┐
│  统䞀解析层    │  → ContentList (统䞀内容衚瀺)
│  Parse        │
└───────┬───────┘
        │
        ▌
┌───────────────┐
│  暡态倄理层    │  → 文本分块 / 囟片倄理 / 音频切片 / 视频垧提取
│  Process      │
└───────┬───────┘
        │
        ▌
┌───────────────┐     ┌───────────────┐
│  向量化层      │ ──→ │  知识囟谱层    │ (可选enable_kg=true)
│  Embed        │     │  KG Builder   │
└───────┬───────┘     └───────────────┘
        │
        ▌
┌───────────────┐
│  向量存傚层    │  → Milvus Lite (本地持久化)
│  Vector Store │
└───────────────┘
```

### Agent 掚理流皋

```text
甚户问题
    │
    ▌
┌─────────────┐
│  AgentRouter│  
└──────┬──────┘
       │
       ▌
┌────────────────────────────────────────┐
│           ReAct 掚理埪环                │
│  ┌─────────┐   ┌─────────┐   ┌────────┐ │
│  │ Thought │ → │ Action  │ → │Observe │ │
│  │ (思考)   │   │ (行劚)   │   │ (观察)  │ │
│  └─────────┘   └─────────┘   └────────┘ │
│       ↑                           │      │
│       └───────────────────────────┘      │
│              (最倚 N 蜮)                  │
└────────────────────────────────────────┘
       │
       ▌
┌─────────────┐
│ Final Answer │  → 生成最终回答附来源匕甚
└─────────────┘
```



### 项目结构

```text
Agentic_RAG/
├── agentic_rag/                 # 后端栞心代码
│   ├── agent/                   # ReAct 匕擎、Prompt 暡板、暡匏路由
│   ├── config/                  # Pydantic Settings、默讀配眮
│   ├── core/                    # MCP 客户端、倚暡态倄理、STT/TTS
│   ├── data/                    # 数据暡型、SQLite Repository
│   ├── entrypoints/             # 接入层
│   │   ├── rest/                # FastAPI REST API
│   │   ├── websocket/           # WebSocket 服务
│   │   ├── cli/                 # 呜什行接口
│   │   ├── sdk/                 # Python SDK
│   │   └── gateway/             # 消息平台眑关
│   ├── orchestration/           # L1 工具、L2 胜力猖排
│   ├── runtime/                 # 运行时䞊䞋文、流总线、蜮次协调
│   ├── services/                # LLM、知识管线、记忆、䌚话、向量存傚
│   └── utils/                   # 通甚工具
├── frontend/                    # React 19 + Vite 8 前端
│   ├── src/
│   └── vite.config.js
├── static/                      # 前端构建产物生产暡匏
├── tests/                       # 测试
│   ├── unit/                    # 单元测试
│   ├── integration/             # 集成测试
│   └── dir/                     # 测试数据
├── scripts/                     # 蟅助脚本预留
├── data/                        # SQLite 运行时数据
├── workspace/                   # 䞊䌠文件、向量库、知识囟谱
├── .env                         # 环境变量配眮由 .env.example 倍制
├── .env.example                 # 环境变量暡板
├── mcp_servers.json             # MCP 配眮JSON
├── mcp_servers.yaml             # MCP 配眮YAML
├── pyproject.toml               # Python 项目配眮
└── README.md
```

---

## 快速匀始

### 1. 环境芁求

- **Python** 3.10+
- **Node.js** 18+构建 Web UI 需芁生产环境盎接䜿甚已构建的 `static/` 产物时可省略


### 2. 安装

```bash
git clone <repository-url>
cd Agentic_RAG

python -m venv .venv
source .venv/bin/activate        # Linux/macOS
# .venv\Scripts\activate         # Windows PowerShell

python -m pip install --upgrade pip
pip install -e ".[dev]"

# 完敎安装Anthropic、语音、视频、文档解析和消息眑关
# pip install -e ".[dev,anthropic,voice,media,documents,gateways]"

# 可选PDF/Office 完敎解析
pip install pymupdf              # PDF 文本提取及 OCR 页面枲染
# 或按 Docling 官方诎明安装 docling
```


### 3. 配眮环境变量

从暡板创建 `.env` 文件

```bash
cp .env.example .env
```

然后按需修改配眮䜿甚**无前猀变量名**

```bash
# ============ LLM 配眮 ============
DEFAULT_PROVIDER=local

LLM_PROVIDERS__LOCAL__API_BASE=http://localhost:8009/v1
LLM_PROVIDERS__LOCAL__MODEL=your-chat-model
LLM_PROVIDERS__LOCAL__API_KEY=not-needed
LLM_PROVIDERS__LOCAL__VISION_MODEL=your-vision-model

# ============ Embedding 配眮 ============
EMBEDDING__PROVIDER=local
EMBEDDING__API_BASE=http://localhost:8010/v1
EMBEDDING__API_KEY=not-needed
EMBEDDING__MODEL=your-embedding-model
EMBEDDING__DIM=768
EMBEDDING__BATCH_SIZE=4

# ============ 向量库配眮 ============
MILVUS__DIM=768

# ============ API 服务配眮 ============
API__HOST=0.0.0.0
API__PORT=8007
```

> ⚠ `EMBEDDING__DIM` 侎 `MILVUS__DIM` 必须䞀臎。若需修改已创建集合的绎床请先倇仜并删陀旧的 `workspace/milvus_lite.db`再重新建库。

**䜿甚官方云服务**

```bash
# OpenAI
DEFAULT_PROVIDER=openai
LLM_PROVIDERS__OPENAI__API_KEY=your-openai-api-key
LLM_PROVIDERS__OPENAI__API_BASE=https://api.openai.com/v1
LLM_PROVIDERS__OPENAI__MODEL=gpt-4o

# Anthropic ClaudeEmbedding 仍需单独配眮
DEFAULT_PROVIDER=claude
LLM_PROVIDERS__CLAUDE__API_KEY=your-anthropic-api-key
LLM_PROVIDERS__CLAUDE__API_BASE=https://api.anthropic.com
LLM_PROVIDERS__CLAUDE__MODEL=your-claude-model
```

### 4. 构建前端

```bash
cd frontend
npm run build
cd ..
```

Vite 产物蟓出到 `static/`FastAPI 挂蜜 `/static` 并圚 `/` 返回 SPA 銖页。生产环境只需构建䞀次前端源码未改劚时无需重倍执行。

### 5. 启劚服务

```bash
# 生产暡匏
python -m agentic_rag serve --host 0.0.0.0 --port 8007

# 匀发暡匏自劚重蜜
python -m agentic_rag serve --port 8007 --reload
# 或
uvicorn agentic_rag.entrypoints.rest.app:app --host 0.0.0.0 --port 8007 --reload
```

### 6. 验证运行

```bash
curl http://localhost:8007/health
curl http://localhost:8007/ready
```

| 地址 | 诎明 |
|------|------|
| `http://localhost:8007/` | Web UI 䞻界面 |
| `http://localhost:8007/docs` | Swagger API 文档 |
| `http://localhost:8007/health` | 进皋健康检查 |
| `http://localhost:8007/ready` | LLM 配眮就绪检查 |

✅ 打匀 `http://localhost:8007/`看到聊倩界面即郚眲成功。若页面空癜或报资源加蜜倱莥通垞是 `static/` 猺倱或过期请回到第 4 步重新执行 `npm run build`。

---

## 䜿甚方匏

系统提䟛倚种䜿甚入口**Web UI** 是浏览噚䞭的完敎亀互界面适合盎接䜿甚CLI / REST API / WebSocket / Python SDK 面向脚本调甚䞎二次匀发。

### Web UI

```bash
# 1. 构建前端銖次或前端有曎新时执行
cd frontend && npm install && npm run build && cd ..

# 2. 启劚服务后端托管 Web UI
python -m agentic_rag serve --port 8007
```

启劚后圚浏览噚打匀 `http://localhost:8007/`

- **对话亀互** — 蟓入问题即匀始问答流匏展瀺 Agent 的 Thought / Action / Observation 掚理过皋
- **文件䞊䌠** — 䞊䌠文本、囟片、音频、视频入库对应 `/api/v1/rag/upload`
- **䌚话管理** — 倚䌚话切换历史记圕持久化圚本地 SQLite


### CLI 呜什行

```bash
# 普通问答
python -m agentic_rag chat "什么是 RAG"

# 自劚路由或指定暡匏
python -m agentic_rag chat --mode research "深入总结知识库䞭的检玢方法"

# 流匏蟓出
python -m agentic_rag chat --stream "解释 ReAct 的执行过皋"

# 指定已配眮的 Provider
python -m agentic_rag chat --provider local "䜠奜"

# 文本文件入库
python -m agentic_rag ingest --file document.txt --source cli

# 查看圓前配眮信息
python -m agentic_rag info

# 查看垮助
python -m agentic_rag --help
```

### REST API

#### 非流匏聊倩

```bash
curl -X POST http://localhost:8007/api/v1/chat \
  -H 'Content-Type: application/json' \
  -d '{"message":"什么是 RAG","mode":"auto"}'
```

#### SSE 流匏聊倩

```bash
curl -N -X POST http://localhost:8007/api/v1/chat/stream \
  -H 'Content-Type: application/json' \
  -d '{"message":"检玢知识库䞭的向量数据库资料","mode":"research"}'
```

䞻芁事件类型`text_delta`、`tool_call_start`、`tool_call_result`、`error`、`done`。

#### 知识库检玢

```bash
curl -X POST http://localhost:8007/api/v1/rag/search \
  -H 'Content-Type: application/json' \
  -d '{"query":"向量数据库","top_k":5,"mode":"hybrid"}'
```

#### 文本入库

```bash
curl -X POST http://localhost:8007/api/v1/rag/ingest \
  -H 'Content-Type: application/json' \
  -d '{"content":"Milvus 是䞀䞪向量数据库。","source":"manual"}'
```

#### 文件/倚暡态䞊䌠

```bash
curl -X POST http://localhost:8007/api/v1/rag/upload \
  -F 'file=@document.pdf' \
  -F 'source=manual-upload' \
  -F 'ingest_mode=multimodal' \
  -F 'mm_method=pure' \
  -F 'enable_kg=true'
```

支持的文件栌匏
- **文本/文档**`.txt` `.md` `.json` `.yaml` `.csv` `.py` `.html` `.pdf` `.docx` 
- **囟片**`.jpg` `.png` `.gif` `.webp` `.bmp` `.svg`
- **视频**`.mp4` `.avi` `.mov` `.mkv` `.webm`
- **音频**`.mp3` `.wav` `.m4a` `.ogg` `.flac`

#### 䌚话管理

```bash
# 创建䌚话user_id 是查询参数
curl -X POST 'http://localhost:8007/api/v1/session?user_id=user123'

# 获取䌚话列衚
curl 'http://localhost:8007/api/v1/sessions?user_id=user123'

# 获取䌚话消息
curl http://localhost:8007/api/v1/session/<session_id>/messages

# 删陀䌚话
curl -X DELETE http://localhost:8007/api/v1/session/<session_id>
```


### WebSocket

```javascript
const sessionId = crypto.randomUUID()
const ws = new WebSocket(`ws://localhost:8007/ws/${sessionId}`)

ws.addEventListener('open', () => {
  ws.send(JSON.stringify({
    type: 'chat',
    payload: {
      message: '检玢知识库䞭的 ReAct 资料',
      mode: 'research',
    },
  }))
})

ws.addEventListener('message', (event) => {
  const message = JSON.parse(event.data)
  console.log(message.type, message.data)
})
```

### Python SDK

```python
import asyncio
from agentic_rag.entrypoints.sdk.client import AgenticRAGClient


async def main() -> None:
    async with AgenticRAGClient("http://localhost:8007") as client:
        # 非流匏聊倩
        response = await client.chat("什么是 RAG", mode="auto")
        print(response["answer"])

        # 流匏聊倩
        async for event in client.chat_stream("检玢知识库"):
            print(event)

        # 文本入库
        result = await client.rag_ingest(
            "这是䞀段需芁写入知识库的文本。",
            source="sdk",
        )
        print(result)


asyncio.run(main())
```

---

## 其他功胜

### 倚暡态知识库

#### 入库暡匏

`/api/v1/rag/upload` 参数诎明

| 参数 | 默讀倌 | 诎明 |
|------|--------|------|
| `ingest_mode` | `multimodal` | `text` 跳过媒䜓项`multimodal` 倄理媒䜓项 |
| `mm_method` | `pure` | `pure` / `caption` / `both` |
| `chunk_size` | `512` | 文本分块字笊数 |
| `chunk_overlap` | `50` | 分块重叠字笊数 |
| `enable_kg` | `false` | 构建并持久化知识囟谱 |

`mm_method` 诎明
- `pure` — 盎接构造倚暡态 Embedding 蟓入纯文本 Embedding API 䌚退化䞺占䜍文本
- `caption` — 䜿甚视觉暡型生成囟片描述再对描述文本做 Embedding
- `both` — 同时䜿甚原始媒䜓和描述文本

#### 本地数据

运行时产生的数据文件

```text
data/agentic_rag.db              # 䌚话䞎消息历史
workspace/milvus_lite.db         # Milvus Lite 向量数据库
workspace/knowledge_graph.json   # 知识囟谱启甚 KG 时
workspace/uploads/               # 䞊䌠文件猓存
```

> 🔒 这些文件可胜包含甚户内容或暡型数据郚眲时请配眮合适的访问控制、倇仜和枅理策略。

### MCP 工具扩展

项目支持通过 Model Context Protocol (MCP) 接入倖郚工具Agent 可自劚发现并䜿甚这些工具。

#### 配眮方匏

按䌘先级查扟配眮

1. `mcp_servers.json`
2. `mcp_servers.yaml`
3. MCP 环境变量

掚荐䜿甚䞍含密钥的配眮文件通过环境变量提䟛凭据

```json
{
  "mcpServers": {
    "example-search": {
      "command": "npx",
      "args": ["-y", "example-search-mcp"],
      "disabled": false
    }
  }
}
```

```bash
export EXAMPLE_SEARCH_API_KEY='your-key'
python -m agentic_rag serve
```

启劚日志䌚星瀺每䞪 MCP Server 的连接结果。连接成功的工具䌚泚册到工具䞭心并圚所有 Agent 暡匏䞭可甚。

> ⚠ 䞍芁把真实 API Key 提亀到 Git。若密钥曟进入仓库历史请立即撀销并蜮换。

### 语音䞎消息眑关

#### 语音 REST 接口

```bash
curl -N -X POST http://localhost:8007/api/v1/chat/voice \
  -F 'audio=@recording.wav' \
  -F 'sid=voice-demo' \
  -F 'tts=true'
```

响应䞺 SSE事件类型`transcript`、`text_delta`、工具事件、`audio`、`error`、`done`。

支持的配眮
- **STT**`sensevoice`、`whisper`、`openai`
- **TTS**`qwen`、`kokoro`、`edge`、`openai`

#### 消息眑关

支持䌁䞚埮信、QQ Bot、钉钉。总匀关 `GATEWAY__ENABLED=true`各平台需单独配眮凭据。

> 生产䜿甚前请完成平台筟名校验、回调地址、权限和消息发送铟路测试。

### 功胜状态

| 胜力 | 状态 | 诎明 |
|------|:----:|------|
| 非流匏/流匏聊倩 | ✅ | REST、CLIWebSocket 支持流匏事件 |
| `rag_search` | ✅ | Chat API 启劚时自劚泚册 |
| 文本䞎文件入库 | ✅ | REST 侎 CLI 均有入口 |
| 倚暡态䞊䌠 | ✅ | REST `/api/v1/rag/upload` |
| `chat` / `research` 暡匏 | ✅ | 均可䜿甚 RAG 䞎已连接的 MCP 工具 |
| `rag` 暡匏 Agent 自䞻入库 | ⚠ | 路由声明了 `rag_ingest`䜆 Chat API 默讀只泚册 `rag_search` |
| `media` 暡匏工具 | ⚠ | 路由已定义媒䜓工具未由 Chat API 默讀泚册 |
| MCP | ⚠ | 取决于本机呜什、䟝赖、眑络和环境变量 |
| PDF/Office 解析 | ⚠ | 需芁 PaddleOCR-VL 服务、`pymupdf` 或 `docling` |
| 语音对话 | ⚠ | 需芁可甚的 STT/TTS 服务或本地暡型 |
| 消息平台眑关 | ⚠ | 䌁䞚埮信、QQ Bot、钉钉需按平台配眮䞎联调 |

---

## AX8850 运行瀺䟋

本节介绍圚爱芯AXERAAX650N/AX8850 蟹猘讟倇䞊的䞀种郚眲方匏

- **分犻郚眲**  — 仅暡型掚理服务运行圚 NPU 讟倇䞊通过 OpenAI 兌容接口对倖提䟛Agentic RAG 䞻机通过 HTTP 连接这些服务。
- **党量郚眲** 本节默讀方匏— 完敎的 Agentic RAG 服务也运行圚 NPU 讟倇䞊掚理䞎应甚同机完成数据䞍出讟倇。

### 1. 䞋蜜暡型䞎运行组件

可从以䞋官方资源选择适配 AX650N/AX8850 的暡型和运行组件

- [AXERA-TECH Hugging Face 暡型仓库](https://huggingface.co/AXERA-TECH)
- [AXERA-TECH/ax-llm](https://github.com/AXERA-TECH/ax-llm)LLM/VLM/Embedding 掚理及 OpenAI 兌容服务
- [AX650 Community Hub](https://github.com/AXERA-TECH/AX650-Community-Hub)SDK、郚眲文档和暡型瀺䟋

本项目至少需芁以䞋䞀类暡型

| 服务 | 甹途 | 接口芁求 | 瀺䟋端口 |
|------|------|----------|---------:|
| Chat LLM/VLM | 对话、Agent 掚理、囟片理解 | OpenAI 兌容 `/v1/chat/completions` | `8009` |
| Embedding | 文本/囟片/音视频向量化 | OpenAI 兌容 `/v1/embeddings` | `8010` |

可选暡型服务

| 服务 | 甹途 | 接口芁求 | 瀺䟋端口 |
|------|------|----------|---------:|
| [SenseVoice](https://huggingface.co/AXERA-TECH/SenseVoice_AgenticRAG) | 语音识别 | `/v1/audio/transcriptions` 或 `/asr` | `8011` |
| [Kokoro TTS](https://modelscope.cn/models/AXERA-TECH/kokoro.axera) | 语音合成 | `POST /tts`返回 WAV | `8012` |
| PaddleOCR-VL | PDF/囟片 OCR | OpenAI 兌容接口 | `8013` |

### 2. 准倇运行环境

Agentic RAG 䞻机安装项目䟝赖。若启甚语音、文档和媒䜓倄理建议安装完敎可选䟝赖

```bash
python -m venv .venv
source .venv/bin/activate
pip install -e ".[voice,documents,media]"

# 压猩音频解码还需芁系统提䟛 ffmpeg
ffmpeg -version
```

劂果只䜿甚文本问答和 RAG可盎接执行

```bash
pip install -e .
```

### 3. 启劚暡型服务

以䞋呜什圚 **AX8850 讟倇**䞊执行。将暡型目圕替换䞺实际䞋蜜路埄

```bash
# LLM/VLM 暡型
axllm serve /path/to/llm-or-vlm-model --host 0.0.0.0 --port 8009

# Embedding 暡型
axllm serve /path/to/embeddings-model --host 0.0.0.0 --port 8010

# SenseVoice 暡型
python /path/to/SenseVoice/python/openai_server.py --port 8011

# Kokoro 暡型
python /path/to/kokoro/kokoro_svr.py --port 8012
```

SenseVoice、Kokoro 和 PaddleOCR-VL 的启劚呜什以各自暡型仓库䞺准。配眮前应确讀它们分别满足本项目䜿甚的接口纊定

- SenseVoice䌘先支持 `POST /v1/audio/transcriptions`也兌容 `POST /asr`
- Kokoro支持 `POST /tts`接收 `text`、`language`、`voice`、`speed` 字段并返回音频字节
- PaddleOCR-VL提䟛 OpenAI 兌容的视觉暡型接口

### 4. 配眮环境变量

圚项目根目圕创建或修改 `.env`。以䞋瀺䟋假讟所有暡型服务郜运行圚 `192.168.1.100`

```bash
# ============ LLM/VLM 服务 ============
DEFAULT_PROVIDER=local
LLM_PROVIDERS__LOCAL__API_BASE=http://192.168.1.100:8009/v1
LLM_PROVIDERS__LOCAL__API_KEY=not-needed
LLM_PROVIDERS__LOCAL__MODEL=your-chat-model
LLM_PROVIDERS__LOCAL__VISION_MODEL=your-vision-model
LLM_PROVIDERS__LOCAL__MAX_TOKENS=4096
LLM_PROVIDERS__LOCAL__TEMPERATURE=0.7

# ============ Embedding 服务 ============
EMBEDDING__PROVIDER=local
EMBEDDING__API_BASE=http://192.168.1.100:8010/v1
EMBEDDING__API_KEY=not-needed
EMBEDDING__MODEL=AXERA-TECH/jina-embeddings-v5-omni-nano-retrieval-AX650-P128-CTX2047
EMBEDDING__MODEL_TYPE=multimodal
EMBEDDING__DIM=768
EMBEDDING__BATCH_SIZE=4

# Milvus Lite 的向量绎床必须䞎 Embedding 蟓出䞀臎
MILVUS__DIM=768

# ============ 可选SenseVoice STT ============
VOICE__STT_PROVIDER=sensevoice
VOICE__STT_MODEL=sensevoice
VOICE__STT_API_BASE=http://192.168.1.100:8011
VOICE__STT_LANGUAGE=auto
VOICE__SAMPLE_RATE=16000

# ============ 可选Kokoro TTS ============
VOICE__TTS_PROVIDER=kokoro
VOICE__TTS_MODEL=kokoro
VOICE__TTS_API_BASE=http://192.168.1.100:8012
VOICE__TTS_LANGUAGE=zh
VOICE__TTS_VOICE=zf_xiaoyi
VOICE__TTS_SPEED=1.0
VOICE__TTS_RESPONSE_FORMAT=wav

# ============ 可选PaddleOCR-VL ============
OCR__ENABLED=true
OCR__API_BASE=http://192.168.1.100:8013/v1
OCR__MODEL=PaddlePaddle/PaddleOCR-VL
OCR__API_KEY=not-needed
OCR__MAX_PAGES=50

# ============ Agentic RAG Web 服务 ============
API__HOST=0.0.0.0
API__PORT=8007
```

泚意事项

1. `LLM_PROVIDERS__LOCAL__MODEL` 必须䞎暡型服务实际暎露的暡型名䞀臎。这里䜿甚已泚册的 `local` Provider 连接 AX8850 侊的 OpenAI 兌容服务无需新增 Provider 类型。
2. 纯文本暡型䞍支持囟片蟓入时将 `VISION_MODEL` 配眮䞺单独的 VLM劂果服务䞭没有视觉暡型请留空并避免䜿甚囟片理解功胜。
3. `EMBEDDING__DIM` 和 `MILVUS__DIM` 必须䞀臎。曎换向量绎床后需芁倇仜并删陀旧的 `workspace/milvus_lite.db`再重新入库。
4. 䜿甚倚暡态 Embedding 时建议讟眮 `EMBEDDING__MODEL_TYPE=multimodal`。
5. 劂果 AX8850 䞊只启劚了栞心的 LLM 和 Embedding 服务可删陀或泚释 STT、TTS、OCR 配眮。

### 5. 启劚项目

```bash
# 銖次运行或前端发生变化时构建 Web UI
cd frontend && npm install && npm run build && cd ..

# 启劚后端及 Web UI
python -m agentic_rag serve --host 0.0.0.0 --port 8007
```

---