diff --git a/README.md b/README.md
index 4f7c96cd..a4f1a243 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,3 @@
-
-
Yuxi (语析)
> [!WARNING]
@@ -7,17 +5,60 @@
## 预览
-
-
-
-
-
-
## 准备
-1. 提供 API 服务商的 API_KEY,并放置在 `src/.env` 文件中,参考 `src/.env.template`。默认使用的是智谱AI。需要配置 `ZHIPUAI_API_KEY=`。
-2. 配置 python 环境 `pip install -r requirements.txt`,python 版本应当小于 `3.12`。
-3. 前端 UI 部分,需要安装 Node.js 环境,参考:[Download Node.js](https://nodejs.org/en/download/package-manager)。
+提供 API 服务商的 API_KEY,并放置在 `src/.env` 文件中,参考 `src/.env.template`。默认使用的是智谱AI。需要配置 `ZHIPUAI_API_KEY=`。
+
+
+
+## Dockers 启动
+
+**提醒**:此部分暂时依赖于前端打包之后的内容(后面考虑更新),同时会自动启动 neo4j 图数据库。
+
+```bash
+docker-compose -f docker/docker-compose.dev.yml up --build
+```
+
+下面的这些容器都会启动:
+
+```bash
+[+] Running 7/7
+ ✔ Network docker_app-network Created
+ ✔ Container graph-dev Started
+ ✔ Container milvus-etcd-dev Started
+ ✔ Container milvus-minio-dev Started
+ ✔ Container milvus-standalone-dev Started
+ ✔ Container api-dev Started
+ ✔ Container web-dev Started
+```
+
+关闭 docker 服务:
+
+```bash
+docker-compose -f docker/docker-compose.dev.yml down
+```
+
+如果需要使用到本地模型,比如向量模型或者重排序模型,则需要将环境变量中设置的 `MODEL_ROOT_DIR` 做映射,比如本地模型都是存放在 `/hdd/models` 里面,则需要在 `docker-compose.yml` 中添加:
+
+```yml
+services:
+ # 后端服务
+ backend:
+ image: pytorch/pytorch:2.4.1-cuda11.8-cudnn9-runtime # 或者您可以自定义 Python 基础镜像
+ container_name: backend
+ working_dir: /app
+ volumes:
+ - ./src:/app/src # 映射源代码
+ - ./requirements.txt:/app/requirements.txt
+ - ./saves:/app/saves
+ - /hdd/models:/hdd/models # <=== 修改这里
+...
+```
+
+##
+
+1. 配置 python 环境 `pip install -r requirements.txt`,python 版本应当小于 `3.12`。
+2. 前端 UI 部分,需要安装 Node.js 环境,参考:[Download Node.js](https://nodejs.org/en/download/package-manager)。
**如果不启用知识库,可以仅安装下面的依赖**
@@ -50,11 +91,13 @@ docker compose up -d
## 启动
+推荐使用 docker 启动
+
### 1. 手动启动
```bash
# 后端部分
-python -m src.api
+python -m src.main
# 前端部分
cd web
@@ -72,30 +115,9 @@ bash run.sh
### 3. Docker 启动
-**提醒**:此部分暂时依赖于前端打包之后的内容(后面考虑更新),同时会自动启动 neo4j 图数据库。
+## Changelog
-```bash
-docker compose up --build
-```
-
-如果需要使用到本地模型,比如向量模型或者重排序模型,则需要将环境变量中设置的 `MODEL_ROOT_DIR` 做映射,比如本地模型都是存放在 `/hdd/models` 里面,则需要在 `docker-compose.yml` 中添加:
-
-```yml
-services:
- # 后端服务
- backend:
- image: pytorch/pytorch:2.4.1-cuda11.8-cudnn9-runtime # 或者您可以自定义 Python 基础镜像
- container_name: backend
- working_dir: /app
- volumes:
- - ./src:/app/src # 映射源代码
- - ./requirements.txt:/app/requirements.txt
- - ./saves:/app/saves
- - /hdd/models:/hdd/models # <=== 修改这里
-...
-```
-
-**提醒**:启动 docker 之后,如果需要进行调试的时候,务必先停掉 docker (在项目路径下,使用 `docker compose down`),然后再运行 `bash run.sh`,不然会出现端口冲突。这是由于没有单独设置生产环境和开发环境,这个以后再说。
+- 2024.10.12 后端修改为 FastAPI,并添加了 Milnvs 的独立部署。
## 其余脚本
diff --git a/scripts/init.sh b/scripts/init.sh
new file mode 100644
index 00000000..9f6b6881
--- /dev/null
+++ b/scripts/init.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# 检查是否提供了 API_KEY 参数
+if [ -z "$1" ]; then
+ echo "请提供 API_KEY。"
+ exit 1
+fi
+
+# 获取当前目录路径
+CURRENT_DIR=$(pwd)
+
+# 如果 src 目录不存在则创建
+if [! -d "${CURRENT_DIR}/src" ]; then
+ mkdir -p "${CURRENT_DIR}/src"
+fi
+
+# 如果.env 文件不存在,则从.env.template 复制一份创建
+if [! -f "${CURRENT_DIR}/src/.env" ]; then
+ cp "${CURRENT_DIR}/src/.env.template" "${CURRENT_DIR}/src/.env"
+fi
+
+# 将 API_KEY 写入.env 文件
+echo "ZHIPUAI_API_KEY=$1" > "${CURRENT_DIR}/src/.env"
+
+echo "API_KEY 已成功写入 src/.env 文件。"
\ No newline at end of file
diff --git a/run.sh b/scripts/run.sh
similarity index 100%
rename from run.sh
rename to scripts/run.sh
diff --git a/scripts/vllm/run.sh b/scripts/vllm/run.sh
index e19f38d1..91fe6ee4 100644
--- a/scripts/vllm/run.sh
+++ b/scripts/vllm/run.sh
@@ -6,12 +6,12 @@ if [ -z "$1" ]; then
fi
if [ "$1" = "llama" ]; then
- CUDA_VISIBLE_DEVICES=0 python -m vllm.entrypoints.openai.api_server \
- --model="/hdd/zwj/models/meta-llama/$MODEL" \
- --tensor-parallel-size 1 \
+ python -m vllm.entrypoints.openai.api_server \
+ --model="/hdd/zwj/models/meta-llama/Meta-Llama-3-8B-Instruct" \
+ --tensor-parallel-size 2 \
--trust-remote-code \
--device auto \
- --gpu-memory-utilization 0.98 \
+ --gpu-memory-utilization 0.8 \
--dtype half \
--served-model-name "$1" \
--host 0.0.0.0 \
diff --git a/src/core/graphbase.py b/src/core/graphbase.py
index 9ab9d66a..ef4f7af1 100644
--- a/src/core/graphbase.py
+++ b/src/core/graphbase.py
@@ -170,6 +170,7 @@ class GraphDatabase:
def jsonl_file_add_entity(self, file_path, kgdb_name='neo4j'):
self.status = "processing"
+ kgdb_name = kgdb_name or 'neo4j'
self.use_database(kgdb_name) # 切换到指定数据库
def read_triples(file_path):
diff --git a/src/main.py b/src/main.py
index abb36f33..18a97011 100644
--- a/src/main.py
+++ b/src/main.py
@@ -7,10 +7,6 @@ from src.utils.logging_config import setup_logger
load_dotenv()
-import os
-
-os.environ["ZHIPUAI_API_KEY"] = "270ea71e9560c0ff406acbcdd48bfd97.e3XOMdWKuZb7Q1Sk"
-
app = FastAPI()
app.include_router(router)
diff --git a/src/models/README.md b/src/models/README.md
index b39e57eb..b798a3c3 100644
--- a/src/models/README.md
+++ b/src/models/README.md
@@ -12,7 +12,6 @@
|`dashscope`(阿里) | `qwen-max-latest` | `DASHSCOPE_API_KEY`|
|`deepseek`|`deepseek-chat`|`DEEPSEEK_API_KEY`|
|`siliconflow` | `meta-llama/Meta-Llama-3.1-8B-Instruct` | `SILICONFLOW_API_KEY`|
-|`vllm`|`vllm`|`VLLM_API_KEY`, `VLLM_API_BASE`|
vllm 的具体配置项可以参考[这里](https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html#named-arguments), 部署参考脚本:
diff --git a/src/routers/data_router.py b/src/routers/data_router.py
index ed9794ab..f5073f98 100644
--- a/src/routers/data_router.py
+++ b/src/routers/data_router.py
@@ -35,7 +35,7 @@ async def create_database(
return database_info
@data.delete("/")
-async def delete_database(db_id: str = Body(...)):
+async def delete_database(db_id):
logger.debug(f"Delete database {db_id}")
startup.dbm.delete_database(db_id)
return {"message": "删除成功"}
@@ -114,7 +114,7 @@ async def get_graph_nodes(kgdb_name: str, num: int):
return {"result": startup.retriever.format_general_results(result), "message": "success"}
@data.post("/graph/add")
-async def add_graph_entity(kgdb_name: str = Body(...), file_path: str = Body(...)):
+async def add_graph_entity(file_path: str = Body(...), kgdb_name: Optional[str] = Body(None)):
if not startup.config.enable_knowledge_graph:
raise HTTPException(status_code=400, detail="Knowledge graph is not enabled")
diff --git a/web/src/components/ChatComponent.vue b/web/src/components/ChatComponent.vue
index e369f89d..504834ea 100644
--- a/web/src/components/ChatComponent.vue
+++ b/web/src/components/ChatComponent.vue
@@ -334,8 +334,11 @@ const updateStatus = (id, status) => {
console.error('Message not found')
}
- if (message.refs.knowledge_base.results.length > 0) {
- message.groupedResults = message.refs.knowledge_base.results.reduce((acc, result) => {
+ if (message.refs && message.refs.knowledge_base.results.length > 0) {
+
+ message.groupedResults = message.refs.knowledge_base.results
+ .filter(result => result.file && result.file.filename)
+ .reduce((acc, result) => {
const { filename } = result.file;
console.log(acc, result, filename)
if (!acc[filename]) {
@@ -415,12 +418,13 @@ const fetchChatResponse = (user_input, cur_res_id) => {
});
};
return readChunk();
+ isStreaming.value = false;
})
.catch((error) => {
console.error(error);
updateStatus(cur_res_id, "error");
isStreaming.value = false;
- });
+ })
}
// 更新后的 sendMessage 函数
diff --git a/web/src/views/DataBaseInfoView.vue b/web/src/views/DataBaseInfoView.vue
index 00e362b1..4e9d7daa 100644
--- a/web/src/views/DataBaseInfoView.vue
+++ b/web/src/views/DataBaseInfoView.vue
@@ -362,10 +362,10 @@ const deleteDatabse = () => {
cancelText: '取消',
onOk: () => {
state.lock = true
- fetch('/api/data/', {
+ fetch(`/api/data/?db_id=${databaseId.value}`, {
method: "DELETE",
headers: {
- "Content-Type": "application/json" // 添加 Content-Type 头
+ "Content-Type": "application/json"
},
body: JSON.stringify({
db_id: databaseId.value
@@ -431,6 +431,9 @@ const formatRelativeTime = (timestamp) => {
const getDatabaseInfo = () => {
const db_id = databaseId.value
+ if (!db_id) {
+ return
+ }
state.lock = true
return new Promise((resolve, reject) => {
fetch(`/api/data/info?db_id=${db_id}`, {
diff --git a/web/src/views/SettingView.vue b/web/src/views/SettingView.vue
index 94dc7dc6..26597935 100644
--- a/web/src/views/SettingView.vue
+++ b/web/src/views/SettingView.vue
@@ -135,7 +135,7 @@
-
+