Clarify split Ragas model endpoints
Showing
4 changed files
with
10 additions
and
19 deletions
| ... | @@ -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]: | ... | ... |
-
Please register or sign in to post a comment