Commit f7777e43 f7777e43d7de64ae4f9e965c7cdc374c5374594b by 沈秋雨

Clarify split Ragas model endpoints

1 parent 147c79e0
...@@ -5,11 +5,6 @@ WEKNORA_KB_NAME=ragas-eval-pilot ...@@ -5,11 +5,6 @@ WEKNORA_KB_NAME=ragas-eval-pilot
5 5
6 # Ragas generation and judge models. These are evaluation-side models, not the 6 # Ragas generation and judge models. These are evaluation-side models, not the
7 # model configuration used by the WeKnora backend. 7 # model configuration used by the WeKnora backend.
8 OPENAI_API_KEY=replace-me
9 OPENAI_BASE_URL=https://api.openai.com/v1
10
11 # Optional split deployment. Use these when LLM and embedding are served by
12 # different OpenAI-compatible services, such as vLLM + Infinity.
13 RAGAS_LLM_API_KEY=replace-me 8 RAGAS_LLM_API_KEY=replace-me
14 RAGAS_LLM_BASE_URL=http://localhost:8000/v1 9 RAGAS_LLM_BASE_URL=http://localhost:8000/v1
15 RAGAS_EMBEDDING_API_KEY=replace-me 10 RAGAS_EMBEDDING_API_KEY=replace-me
......
...@@ -34,8 +34,9 @@ cp .env.example .env ...@@ -34,8 +34,9 @@ cp .env.example .env
34 - `WEKNORA_API_KEY` 是 WeKnora API Key 34 - `WEKNORA_API_KEY` 是 WeKnora API Key
35 - `WEKNORA_KB_ID` 是目标知识库 ID;如果还没有,先运行 `python scripts/00_create_kb.py` 35 - `WEKNORA_KB_ID` 是目标知识库 ID;如果还没有,先运行 `python scripts/00_create_kb.py`
36 - `WEKNORA_KB_NAME` 是创建知识库时使用的名称 36 - `WEKNORA_KB_NAME` 是创建知识库时使用的名称
37 - `OPENAI_API_KEY``OPENAI_BASE_URL``RAGAS_*_MODEL` 是评估侧模型配置 37 - `RAGAS_LLM_BASE_URL` 指向 vLLM 的 OpenAI-compatible `/v1`
38 - 如果 LLM 和 embedding 分开部署,使用 `RAGAS_LLM_BASE_URL` 指向 vLLM 的 `/v1`,使用 `RAGAS_EMBEDDING_BASE_URL` 指向 Infinity 的 `/v1` 38 - `RAGAS_EMBEDDING_BASE_URL` 指向 Infinity embedding 的 OpenAI-compatible `/v1`
39 - `RAGAS_*_MODEL` 是评估侧模型名称
39 40
40 ## 首轮 Pilot 41 ## 首轮 Pilot
41 42
......
...@@ -41,10 +41,6 @@ qa: ...@@ -41,10 +41,6 @@ qa:
41 41
42 ragas: 42 ragas:
43 provider: "openai-compatible" 43 provider: "openai-compatible"
44 # Backward-compatible defaults. If the split LLM/embedding values below are
45 # empty, these values are used for both clients.
46 api_key: "${OPENAI_API_KEY}"
47 base_url: "${OPENAI_BASE_URL}"
48 # vLLM OpenAI-compatible endpoint, for example http://localhost:8000/v1. 44 # vLLM OpenAI-compatible endpoint, for example http://localhost:8000/v1.
49 llm_api_key: "${RAGAS_LLM_API_KEY}" 45 llm_api_key: "${RAGAS_LLM_API_KEY}"
50 llm_base_url: "${RAGAS_LLM_BASE_URL}" 46 llm_base_url: "${RAGAS_LLM_BASE_URL}"
......
...@@ -22,10 +22,10 @@ def run_ragas_eval( ...@@ -22,10 +22,10 @@ def run_ragas_eval(
22 from ragas.run_config import RunConfig 22 from ragas.run_config import RunConfig
23 23
24 ragas_config = config["ragas"] 24 ragas_config = config["ragas"]
25 llm_api_key = _first_non_empty(ragas_config, "llm_api_key", "api_key") 25 llm_api_key = _required_ragas_value(ragas_config, "llm_api_key")
26 llm_base_url = _first_non_empty(ragas_config, "llm_base_url", "base_url") 26 llm_base_url = _required_ragas_value(ragas_config, "llm_base_url")
27 embedding_api_key = _first_non_empty(ragas_config, "embedding_api_key", "api_key") 27 embedding_api_key = _required_ragas_value(ragas_config, "embedding_api_key")
28 embedding_base_url = _first_non_empty(ragas_config, "embedding_base_url", "base_url") 28 embedding_base_url = _required_ragas_value(ragas_config, "embedding_base_url")
29 judge_model = str(require_config(config, "ragas.judge_model")) 29 judge_model = str(require_config(config, "ragas.judge_model"))
30 embedding_model = str(require_config(config, "ragas.embedding_model")) 30 embedding_model = str(require_config(config, "ragas.embedding_model"))
31 temperature = float(ragas_config.get("temperature", 0)) 31 temperature = float(ragas_config.get("temperature", 0))
...@@ -127,12 +127,11 @@ def _metric_map() -> dict[str, Any]: ...@@ -127,12 +127,11 @@ def _metric_map() -> dict[str, Any]:
127 } 127 }
128 128
129 129
130 def _first_non_empty(config: dict[str, Any], *keys: str) -> str: 130 def _required_ragas_value(config: dict[str, Any], key: str) -> str:
131 for key in keys:
132 value = config.get(key) 131 value = config.get(key)
133 if value not in {None, ""}: 132 if value in {None, ""}:
133 raise ValueError(f"Missing required Ragas config value: ragas.{key}")
134 return str(value) 134 return str(value)
135 raise ValueError(f"Missing required Ragas config value. Checked: {', '.join(keys)}")
136 135
137 136
138 def _wrap_langchain_models(llm: Any, embeddings: Any) -> tuple[Any, Any]: 137 def _wrap_langchain_models(llm: Any, embeddings: Any) -> tuple[Any, Any]:
......