feat: require explicit runtime configuration
This commit is contained in:
+43
-1
@@ -1,21 +1,63 @@
|
|||||||
|
# 所有变量均为必填项;请在项目根目录复制本文件为 .env 后逐项填写。
|
||||||
|
|
||||||
|
# ===== 应用 =====
|
||||||
|
# 服务显示名称;仅用于 FastAPI 文档标题。
|
||||||
|
KBQA_APP_NAME=KBQA
|
||||||
|
# 是否启用调试模式。生产或日常本地使用请保持 false。
|
||||||
|
KBQA_DEBUG=false
|
||||||
|
|
||||||
|
# ===== DashScope 模型 =====
|
||||||
|
# DashScope 兼容模式 API Key。必须保密,禁止提交到 Git。
|
||||||
KBQA_DASHSCOPE_API_KEY=
|
KBQA_DASHSCOPE_API_KEY=
|
||||||
|
# DashScope OpenAI-compatible API 地址;使用专属实例时填写实例地址。
|
||||||
KBQA_DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
KBQA_DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||||
|
# 生成回答及 Agent 工具调用的聊天模型。
|
||||||
KBQA_CHAT_MODEL=qwen3.5-flash
|
KBQA_CHAT_MODEL=qwen3.5-flash
|
||||||
|
# 文档分块向量化模型。
|
||||||
KBQA_EMBEDDING_MODEL=text-embedding-v4
|
KBQA_EMBEDDING_MODEL=text-embedding-v4
|
||||||
|
# Embedding 向量维度,必须与已有 Milvus Lite 数据库一致。
|
||||||
KBQA_EMBEDDING_DIM=1024
|
KBQA_EMBEDDING_DIM=1024
|
||||||
|
|
||||||
|
# ===== 本地持久化 =====
|
||||||
|
# SQLite 异步连接串;相对路径以“项目根目录”为基准。
|
||||||
KBQA_DATABASE_URL=sqlite+aiosqlite:///./data/kbqa.sqlite3
|
KBQA_DATABASE_URL=sqlite+aiosqlite:///./data/kbqa.sqlite3
|
||||||
|
# Milvus Lite 文件路径;相对路径以“项目根目录”为基准。
|
||||||
KBQA_MILVUS_URI=./data/milvus/kbqa.db
|
KBQA_MILVUS_URI=./data/milvus/kbqa.db
|
||||||
|
# 上传原文件副本目录;相对路径以“项目根目录”为基准。
|
||||||
KBQA_RAW_DATA_DIR=./data/raw
|
KBQA_RAW_DATA_DIR=./data/raw
|
||||||
|
|
||||||
|
# ===== 文档切分与检索 =====
|
||||||
|
# 单个文本分块的最大字符数。
|
||||||
KBQA_CHUNK_SIZE=500
|
KBQA_CHUNK_SIZE=500
|
||||||
|
# 相邻分块重叠字符数,必须小于 KBQA_CHUNK_SIZE。
|
||||||
KBQA_CHUNK_OVERLAP=50
|
KBQA_CHUNK_OVERLAP=50
|
||||||
|
# 每次向量检索返回的候选数量。
|
||||||
KBQA_RETRIEVAL_TOP_K=5
|
KBQA_RETRIEVAL_TOP_K=5
|
||||||
|
# Research Agent 一轮中允许的最大检索次数。
|
||||||
KBQA_MAX_RESEARCH_SEARCHES=3
|
KBQA_MAX_RESEARCH_SEARCHES=3
|
||||||
|
# 回答中最多展示的引用来源数。
|
||||||
KBQA_MAX_SOURCES=8
|
KBQA_MAX_SOURCES=8
|
||||||
|
# 每个会话发送给模型的最大历史消息数。
|
||||||
KBQA_HISTORY_MESSAGE_LIMIT=20
|
KBQA_HISTORY_MESSAGE_LIMIT=20
|
||||||
|
# 单个上传文件大小上限,单位 MiB。
|
||||||
KBQA_MAX_UPLOAD_MIB=20
|
KBQA_MAX_UPLOAD_MIB=20
|
||||||
|
# 单次提问的最大字符数。
|
||||||
|
KBQA_MAX_QUERY_LENGTH=10000
|
||||||
|
# 允许前端跨域访问的地址,必须是合法 JSON 数组。
|
||||||
KBQA_CORS_ORIGINS=["http://localhost:5173","http://127.0.0.1:5173"]
|
KBQA_CORS_ORIGINS=["http://localhost:5173","http://127.0.0.1:5173"]
|
||||||
|
|
||||||
|
# ===== 真实模型测试 =====
|
||||||
|
# 仅设为 1 时才会执行真实 Chat / Embedding 测试。
|
||||||
KBQA_RUN_LIVE_TESTS=0
|
KBQA_RUN_LIVE_TESTS=0
|
||||||
KBQA_LIVE_TEST_FILE=
|
# 真实测试使用的知识文件路径;相对路径以项目根目录为基准。
|
||||||
|
KBQA_LIVE_TEST_FILE=./test.txt
|
||||||
|
|
||||||
|
# ===== LangSmith 追踪 =====
|
||||||
|
# 是否向 LangSmith 写入 Agent、工具与模型追踪。
|
||||||
LANGSMITH_TRACING=true
|
LANGSMITH_TRACING=true
|
||||||
|
# LangSmith 服务地址;官方服务通常为 https://api.smith.langchain.com。
|
||||||
|
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
|
||||||
|
# LangSmith API Key。必须保密,禁止提交到 Git。
|
||||||
LANGSMITH_API_KEY=
|
LANGSMITH_API_KEY=
|
||||||
|
# LangSmith 项目名称,用于归类本系统的追踪记录。
|
||||||
LANGSMITH_PROJECT=kbqa-local
|
LANGSMITH_PROJECT=kbqa-local
|
||||||
|
|||||||
@@ -12,22 +12,36 @@
|
|||||||
|
|
||||||
## 本地配置
|
## 本地配置
|
||||||
|
|
||||||
复制 `.env.example` 为 `.env` 并填写本地密钥。`.env`、`1.md`、`test.txt`
|
`.env` 是唯一运行配置来源,所有变量均为必填项;程序不提供运行参数默认值。复制
|
||||||
均被 Git 忽略。LangSmith 会接收 Agent 输入、工具结果和运行轨迹。
|
`.env.example` 为 `.env`,阅读每项中文注释并填写真实值。必须从**项目根目录**执行下列
|
||||||
|
命令,否则相对路径和 `.env` 文件位置会改变。`.env`、`1.md`、`test.txt` 均被 Git 忽略。
|
||||||
|
LangSmith 会接收 Agent 输入、工具结果和运行轨迹。
|
||||||
|
|
||||||
|
首次运行前建立本地数据目录:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p data/raw data/milvus
|
||||||
|
```
|
||||||
|
|
||||||
## 后端
|
## 后端
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd "$(git rev-parse --show-toplevel)"
|
||||||
uv sync --project backend --all-groups
|
uv sync --project backend --all-groups
|
||||||
|
mkdir -p data/raw data/milvus
|
||||||
uv run --project backend alembic -c backend/alembic.ini upgrade head
|
uv run --project backend alembic -c backend/alembic.ini upgrade head
|
||||||
uv run --project backend uvicorn kbqa.main:app --app-dir backend/src --port 8000
|
uv run --project backend uvicorn kbqa.main:app --app-dir backend/src --host 127.0.0.1 --port 8000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`--port` 必须与 `web/vite.config.ts` 中 `/api` 代理目标的端口一致。仓库默认示例为
|
||||||
|
`8000`;若你本地将代理改为 `8003`,后端也必须使用 `--port 8003`。
|
||||||
|
|
||||||
## 前端
|
## 前端
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd "$(git rev-parse --show-toplevel)"
|
||||||
npm --prefix web install
|
npm --prefix web install
|
||||||
npm --prefix web run dev
|
npm --prefix web run dev -- --host 127.0.0.1
|
||||||
```
|
```
|
||||||
|
|
||||||
## 普通验证
|
## 普通验证
|
||||||
|
|||||||
+27
-25
@@ -9,37 +9,39 @@ class Settings(BaseSettings):
|
|||||||
model_config = SettingsConfigDict(
|
model_config = SettingsConfigDict(
|
||||||
env_file=".env",
|
env_file=".env",
|
||||||
env_prefix="KBQA_",
|
env_prefix="KBQA_",
|
||||||
extra="ignore",
|
extra="forbid",
|
||||||
)
|
)
|
||||||
|
|
||||||
app_name: str = "KBQA"
|
app_name: str
|
||||||
debug: bool = False
|
debug: bool
|
||||||
|
|
||||||
dashscope_api_key: str = ""
|
dashscope_api_key: str
|
||||||
dashscope_base_url: str = "https://dashscope.aliyuncs.com/compatible-mode/v1"
|
dashscope_base_url: str
|
||||||
chat_model: str = "qwen3.5-flash"
|
chat_model: str
|
||||||
embedding_model: str = "text-embedding-v4"
|
embedding_model: str
|
||||||
embedding_dim: int = 1024
|
embedding_dim: int
|
||||||
|
|
||||||
database_url: str = "sqlite+aiosqlite:///./data/kbqa.sqlite3"
|
database_url: str
|
||||||
milvus_uri: str = "./data/milvus/kbqa.db"
|
milvus_uri: str
|
||||||
raw_data_dir: Path = Path("./data/raw")
|
raw_data_dir: Path
|
||||||
|
|
||||||
chunk_size: int = Field(default=500, ge=1)
|
chunk_size: int = Field(ge=1)
|
||||||
chunk_overlap: int = Field(default=50, ge=0)
|
chunk_overlap: int = Field(ge=0)
|
||||||
retrieval_top_k: int = Field(default=5, ge=1, le=100)
|
retrieval_top_k: int = Field(ge=1, le=100)
|
||||||
max_research_searches: int = Field(default=3, ge=1, le=10)
|
max_research_searches: int = Field(ge=1, le=10)
|
||||||
max_sources: int = Field(default=8, ge=1, le=50)
|
max_sources: int = Field(ge=1, le=50)
|
||||||
history_message_limit: int = Field(default=20, ge=1, le=200)
|
history_message_limit: int = Field(ge=1, le=200)
|
||||||
max_upload_mib: int = Field(default=20, ge=1, le=1024)
|
max_upload_mib: int = Field(ge=1, le=1024)
|
||||||
max_query_length: int = Field(default=10_000, ge=1, le=100_000)
|
max_query_length: int = Field(ge=1, le=100_000)
|
||||||
cors_origins: list[str] = [
|
cors_origins: list[str]
|
||||||
"http://localhost:5173",
|
|
||||||
"http://127.0.0.1:5173",
|
|
||||||
]
|
|
||||||
|
|
||||||
run_live_tests: bool = False
|
run_live_tests: bool
|
||||||
live_test_file: Path | None = None
|
live_test_file: Path
|
||||||
|
|
||||||
|
langsmith_tracing: bool = Field(validation_alias="LANGSMITH_TRACING")
|
||||||
|
langsmith_endpoint: str = Field(validation_alias="LANGSMITH_ENDPOINT")
|
||||||
|
langsmith_api_key: str = Field(validation_alias="LANGSMITH_API_KEY")
|
||||||
|
langsmith_project: str = Field(validation_alias="LANGSMITH_PROJECT")
|
||||||
|
|
||||||
@field_validator("chunk_overlap")
|
@field_validator("chunk_overlap")
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
Reference in New Issue
Block a user