# 中华药典 AI Agent — Pharmacopoeia AI

> 服务于药店医师、营业员和医生的 AI 药典查询系统

## 项目结构

```
pharmacopoeia-ai/
├── backend-java/           # Java Spring Boot 后端（生产推荐）
│   ├── pom.xml
│   └── src/main/java/com/pharmacopoeia/
│       ├── config/          # 配置属性
│       ├── entity/          # JPA 实体
│       ├── security/        # Spring Security + JWT
│       ├── service/         # LLM / RAG / 持久化
│       └── controller/      # REST + SSE 控制器
│
├── backend-python/          # Python FastAPI 后端（开发原型）
│   ├── app/
│   │   ├── api/             # chat / auth / drug / admin / exam
│   │   ├── core/            # config / security / llm_client
│   │   ├── rag/             # retriever / reranker / prompt / intent
│   │   └── models/          # ORM 模型
│   └── requirements.txt
│
├── data-pipeline/           # 数据采集与入库管道（Python）
│   ├── crawlers/            # PDF 提取 / 维基采集 / NMPA 爬虫
│   ├── processors/          # 文本清洗 / 切片 / 向量化
│   ├── schemas/             # JSON Schema（drug / knowledge_point / question）
│   ├── data/                # 药典目录 / 示例数据 / Wiki 采集
│   └── ingest.py            # 向量化入库脚本
│
├── frontend-web/            # HTML5 Web 测试前端
│   └── index.html
│
├── miniprogram/             # 微信小程序 AI 模块（uni-app 增量）
│   ├── api/ai.js            # API 封装（SSE多事件）
│   ├── utils/sse.js         # SSE 工具
│   ├── pages/ai-yaodian/    # AI 药典查询页面
│   └── components/ai-chat/  # 浮动对话面板
│
├── deploy/                  # 部署配置
│   ├── docker-compose.yml   # PG + Redis
│   ├── nginx.conf
│   └── supervisord.conf
│
├── docs/                    # 文档
│   ├── SCHEME.md            # 整体方案设计
│   ├── DATA_GUIDE.md        # 数据准备操作指南
│   ├── CRAWLER_ASSESSMENT.md # 爬虫能力评估
│   └── MINIPROGRAM_INTEGRATION.md # 小程序联调手册
│
├── .env.example             # 环境变量模板
└── .gitignore
```

## 快速开始

### 1. 环境准备
```bash
docker compose -f deploy/docker-compose.yml up -d
# 启动 PostgreSQL(pgvector) + Redis
```

### 2. Java 后端（推荐）
```bash
cd backend-java
# 编辑 src/main/resources/application.yml 填入 qwen.api-key
mvn spring-boot:run
```

### 3. Python 后端（原型验证）
```bash
cd backend-python
pip install -r requirements.txt
cp ../.env.example ../.env  # 编辑填入 QWEN_API_KEY
uvicorn app.main:app --host 0.0.0.0 --port 8000
```

### 4. 导入数据
```bash
cd data-pipeline
pip install -r requirements.txt
python ingest.py  # 需要先在 data/ 下准备 drug JSON 文件
```

### 5. 前端测试
打开浏览器访问 http://localhost:8000（Python）或 http://localhost:8080（Java）

## 技术栈

| 层级 | Python版 | Java版 |
|------|---------|--------|
| 后端框架 | FastAPI + Uvicorn | Spring Boot 3.3 |
| 鉴权 | python-jose + passlib | Spring Security + JJWT |
| 向量检索 | pgvector (raw SQL) | pgvector (JdbcTemplate) |
| LLM API | OpenAI SDK → Qwen | WebFlux → Qwen |
| ORM | SQLAlchemy | Spring Data JPA |
| 数据库 | PostgreSQL + Redis | PostgreSQL + Redis |

## API 清单

| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/v1/chat/stream` | SSE 流式对话 |
| POST | `/api/v1/chat/ask` | 非流式对话 |
| GET  | `/api/v1/chat/history` | 对话历史 |
| POST | `/api/v1/auth/login/wechat` | 微信登录 |
| GET  | `/health` | 健康检查 |
