修改环境部署方法,部署速度更快

This commit is contained in:
Wenjie Zhang 2025-04-28 23:48:01 +08:00
parent c36d504a5c
commit 0d39e97763
4 changed files with 29 additions and 225 deletions

View File

@ -27,17 +27,13 @@
## 📋 更新日志
- **2025.04.27** - 支持 Ollama 等带有 `<think>Content</think>` 标签的消息解析
- **2025.03.30** - 系统中集成智能体WIP [PR#96](https://github.com/xerrors/Yuxi-Know/pull/96)
- **2025.02.24** - 新增网页检索以及内容展示,需配置 `TAVILY_API_KEY`,感谢 [littlewwwhite](https://github.com/littlewwwhite)
- **2025.02.23** - SiliconFlow 的 Rerank 和 Embedding model 支持,现默认使用 SiliconFlow
- **2025.02.20** - DeepSeek-R1 支持,需配置 `DEEPSEEK_API_KEY``SILICONFLOW_API_KEY`
- **2024.10.12** - 后端修改为 [FastAPI](https://github.com/fastapi),添加 [Milvus-Standalone](https://github.com/milvus-io) 独立部署
![功能展示](https://github.com/user-attachments/assets/8416a933-cc43-45d0-bf06-00df0ba6c4fb)
| PC 网页 | 小屏设备 |
| :-------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------- |
| ![image](https://github.com/user-attachments/assets/5f3d7e69-baa8-4c59-90fc-391343e59af6) | ![image](https://github.com/user-attachments/assets/51efabce-a097-47fd-9fca-d3b0943af86a) |
### 环境配置
@ -61,12 +57,11 @@ ZHIPUAI_API_KEY=<API_KEY> # 如果配置 智谱清言 添加此行,并替换
**开发环境启动**(源代码修改会自动更新):
```bash
docker compose -f docker/docker-compose.dev.yml --env-file src/.env up --build
docker compose --env-file src/.env up --build
```
> 添加 `-d` 参数可在后台运行
成功启动后,会看到以下容器:
```
@ -84,51 +79,14 @@ docker compose -f docker/docker-compose.dev.yml --env-file src/.env up --build
### 系统预览
![系统演示](./images/demo.gif)
问答支持 Deepseek-R1 等推理模型、知识图谱检索、知识库检索、网页检索
![Image](https://github.com/user-attachments/assets/97ad6771-e4a2-4324-a001-ecb0abe40fdd)
网页检索结果:
![Image](https://github.com/user-attachments/assets/20d51700-78d5-48a8-ab16-00bc98a1df37)
知识图谱检索结果:
![Image](https://github.com/user-attachments/assets/61b4e06f-4e6e-4a75-bfcb-b1a424523bb6)
知识库检索结果
![Image](https://github.com/user-attachments/assets/53e786f4-08d7-45c1-bcec-df46d0c3c49b)
知识库管理:
![Image](https://github.com/user-attachments/assets/55a6de55-59a0-4636-9c00-e4bfd6573c1b)
![Image](https://github.com/user-attachments/assets/0f4f39ba-e6b7-4f18-a3c3-147477922f58)
知识图谱
![Image](https://github.com/user-attachments/assets/5849d875-801c-4d29-9d38-9245685e9d73)
可视化配置:
![Image](https://github.com/user-attachments/assets/5faac8bc-7968-42d0-a77d-5f8881a24de1)
丰富的模型支持:
![Image](https://github.com/user-attachments/assets/7a54ca07-78da-4aef-b0a0-47aa539dae8e)
> 待补充
### 服务管理
**关闭服务**
```bash
docker compose -f docker/docker-compose.dev.yml --env-file src/.env down
docker compose --env-file src/.env down
```
**查看日志**
@ -143,14 +101,14 @@ docker logs <容器名称> # 例如docker logs api-dev
本项目支持通过 API 调用的模型,本地模型需使用 vllm、ollama 转成 API 服务后使用。
| 模型供应商 | 默认模型 | 配置项目 |
| :--------------------- | :---------------------------------- | :--------------------------------------------- |
| `siliconflow` (默认) | `Qwen/Qwen2.5-7B-Instruct` (免费) | `SILICONFLOW_API_KEY` |
| `openai` | `gpt-4o` | `OPENAI_API_KEY` |
| `deepseek` | `deepseek-chat` | `DEEPSEEK_API_KEY` |
| `arc`(豆包方舟) | `doubao-1-5-pro-32k-250115` | `ARK_API_KEY` |
| `zhipu`(智谱清言) | `glm-4-flash` | `ZHIPUAI_API_KEY` |
| `dashscope`(阿里) | `qwen-max-latest` | `DASHSCOPE_API_KEY` |
| 模型供应商 | 默认模型 | 配置项目 |
| :--------------------- | :---------------------------------- | :---------------------- |
| `siliconflow` (默认) | `Qwen/Qwen2.5-7B-Instruct` (免费) | `SILICONFLOW_API_KEY` |
| `openai` | `gpt-4o` | `OPENAI_API_KEY` |
| `deepseek` | `deepseek-chat` | `DEEPSEEK_API_KEY` |
| `arc`(豆包方舟) | `doubao-1-5-pro-32k-250115` | `ARK_API_KEY` |
| `zhipu`(智谱清言) | `glm-4-flash` | `ZHIPUAI_API_KEY` |
| `dashscope`(阿里) | `qwen-max-latest` | `DASHSCOPE_API_KEY` |
#### 添加新模型供应商
@ -189,7 +147,6 @@ ark:
![image](https://github.com/user-attachments/assets/ab62ea17-c7d0-4f94-84af-c4bab26865ad)
**添加向量模型**
```yaml
@ -215,20 +172,9 @@ ark:
## 📚 知识库支持
本项目支持多种格式的知识库文件:
本项目支持多种格式的知识库文件:PDF、TXT、Markdown、Docx。
- PDF
- Txt
- Markdown
- Docx
文件上传后,系统会:
1. 将文件转换为纯文本
2. 使用向量模型将文本转换为向量
3. 存储到向量数据库中
> 此过程可能需要一定时间,请耐心等待。
文件上传后,系统会 对文件进行分块、索引、存储到向量数据库Milvus此过程可能需要一定时间请耐心等待。
## 🕸️ 知识图谱支持
@ -249,7 +195,7 @@ ark:
- 默认账户:`neo4j`
- 默认密码:`0123456789`
可在 `docker/docker-compose.yml` 和 `docker/docker-compose.dev.yml` 中修改配置(注意同时修改 `api.environment``graph.environment`)。
可在 `docker-compose.yml` 中修改配置(注意同时修改 `api.environment``graph.environment`)。
目前项目暂不支持同时查询多个知识图谱。如已有基于 neo4j 的知识图谱,可删除 `docker-compose.yml` 中的 `graph` 配置项,并修改 `api.environment` 中的 `NEO4J_URI` 为您的 neo4j 服务地址。同时,需要确保节点的标签中包含 Entity 标签,才能正常触发索引。
@ -261,20 +207,6 @@ ark:
<img src="https://contributors.nn.ci/api?repo=xerrors/Yuxi-Know" alt="贡献者名单">
</a>
## ❓ 常见问题
### 镜像下载问题
如无法直接下载相关镜像,可参考 [DaoCloud/public-image-mirror](https://github.com/DaoCloud/public-image-mirror?tab=readme-ov-file#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B),尝试替换前缀:
```bash
# 以 neo4j 为例,其余类似
docker pull m.daocloud.io/docker.io/library/neo4j:latest
# 然后重命名镜像
docker tag m.daocloud.io/docker.io/library/neo4j:latest neo4j:latest
```
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=xerrors/Yuxi-Know)](https://star-history.com/#xerrors/Yuxi-Know)

View File

@ -23,7 +23,7 @@ services:
- MILVUS_URI=http://milvus:19530
- MODEL_DIR=/models # 优先级高于 .env 中的 MODEL_DIR
- RUNNING_IN_DOCKER=true
command: uvicorn server.main:app --host 0.0.0.0 --port 5050 --reload
command: uv run uvicorn server.main:app --host 0.0.0.0 --port 5050 --reload
web:
build:
@ -52,8 +52,8 @@ services:
- "7474:7474"
- "7687:7687"
volumes:
- ./volumes/neo4j/data:/data
- ./volumes/neo4j/logs:/var/lib/neo4j/logs
- ./docker/volumes/neo4j/data:/data
- ./docker/volumes/neo4j/logs:/var/lib/neo4j/logs
environment:
- NEO4J_AUTH=neo4j/0123456789
- NEO4J_server_bolt_listen__address=0.0.0.0:7687
@ -71,7 +71,7 @@ services:
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ./volumes/milvus/etcd:/etcd
- ./docker/volumes/milvus/etcd:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
@ -88,7 +88,7 @@ services:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
volumes:
- ./volumes/milvus/minio:/minio_data
- ./docker/volumes/milvus/minio:/minio_data
command: minio server /minio_data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
@ -109,8 +109,8 @@ services:
MINIO_ADDRESS: minio:9000
MILVUS_LOG_LEVEL: error # Add this line to reduce log output
volumes:
- ./volumes/milvus/milvus:/var/lib/milvus
- ./volumes/milvus/logs:/var/lib/milvus/logs
- ./docker/volumes/milvus/milvus:/var/lib/milvus
- ./docker/volumes/milvus/logs:/var/lib/milvus/logs
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s

View File

@ -4,19 +4,22 @@ FROM python:3.12
# 设置工作目录
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y \
python3-dev \
ffmpeg \
libsm6 \
libxext6
# 复制 requirements.txt 文件这一步如果文件没变Docker 会使用缓存)
# COPY../requirements.txt /app/requirements.txt
COPY ../pyproject.toml /app/pyproject.toml
COPY ../uv.lock /app/uv.lock
COPY ../.python-version /app/.python-version
# 安装依赖Docker 会缓存这一步,除非 requirements.txt 发生变化)
RUN pip install uv
RUN uv sync
RUN apt-get clean
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y
# 复制代码到容器中
COPY ../src /app/src
COPY ../server /app/server

View File

@ -1,131 +0,0 @@
services:
api:
build:
context: ..
dockerfile: docker/api.Dockerfile
container_name: api-dev
working_dir: /app
volumes:
- ../server:/app/server
- ../src:/app/src
- ../saves_dev:/app/saves
# - ${MODEL_DIR}:/models # 如果出现 undefined volume MODEL_DIR: invalid compose project请添加此环境变量或者注释此行
ports:
- "5050:5050"
networks:
- app-network
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- NEO4J_URI=bolt://graph:7687
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=0123456789
- MILVUS_URI=http://milvus:19530
- MODEL_DIR=/models # 优先级高于 .env 中的 MODEL_DIR
- RUNNING_IN_DOCKER=true
command: uvicorn server.main:app --host 0.0.0.0 --port 5050 --reload
web:
build:
context: ..
dockerfile: docker/web.Dockerfile
target: development
container_name: web-dev
volumes:
- ../web:/app
- /app/node_modules
ports:
- "5173:5173"
depends_on:
- api
networks:
- app-network
environment:
- NODE_ENV=development
- VITE_API_URL=http://api:5050 # 添加这行
command: pnpm run server
graph:
image: neo4j:5.26
container_name: graph-dev
ports:
- "7474:7474"
- "7687:7687"
volumes:
- ./volumes/neo4j/data:/data
- ./volumes/neo4j/logs:/var/lib/neo4j/logs
environment:
- NEO4J_AUTH=neo4j/0123456789
- NEO4J_server_bolt_listen__address=0.0.0.0:7687
- NEO4J_server_http_listen__address=0.0.0.0:7474
- ENTITY_EMBEDDING=true
networks:
- app-network
etcd:
container_name: milvus-etcd-dev
image: quay.io/coreos/etcd:v3.5.5
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ./volumes/milvus/etcd:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3
networks:
- app-network
minio:
container_name: milvus-minio-dev
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
volumes:
- ./volumes/milvus/minio:/minio_data
command: minio server /minio_data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
networks:
- app-network
milvus:
image: milvusdb/milvus:v2.5.6
container_name: milvus-standalone-dev
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
MILVUS_LOG_LEVEL: error # Add this line to reduce log output
volumes:
- ./volumes/milvus/milvus:/var/lib/milvus
- ./volumes/milvus/logs:/var/lib/milvus/logs
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"
networks:
- app-network
networks:
app-network:
driver: bridge