fix: honor dashscope embedding batch limit
This commit is contained in:
@@ -119,7 +119,7 @@ class IndexWorker:
|
|||||||
await self._mark_failed(document_id, "INDEXING_FAILED", "文档索引失败,请重试")
|
await self._mark_failed(document_id, "INDEXING_FAILED", "文档索引失败,请重试")
|
||||||
|
|
||||||
async def _embed_and_upsert(self, document_id: str, chunks: list[PreparedChunk]) -> bool:
|
async def _embed_and_upsert(self, document_id: str, chunks: list[PreparedChunk]) -> bool:
|
||||||
batch_size = 20
|
batch_size = 10
|
||||||
for start in range(0, len(chunks), batch_size):
|
for start in range(0, len(chunks), batch_size):
|
||||||
batch = chunks[start : start + batch_size]
|
batch = chunks[start : start + batch_size]
|
||||||
vectors = await self.embeddings.embed_documents([chunk.content for chunk in batch])
|
vectors = await self.embeddings.embed_documents([chunk.content for chunk in batch])
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
from langchain_openai import OpenAIEmbeddings
|
from langchain_openai import OpenAIEmbeddings
|
||||||
|
|
||||||
from kbqa.api.errors import AppError
|
from kbqa.api.errors import AppError
|
||||||
from kbqa.config import Settings, validate_live_settings
|
from kbqa.config import Settings, validate_live_settings
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class EmbeddingProvider:
|
class EmbeddingProvider:
|
||||||
def __init__(self, settings: Settings) -> None:
|
def __init__(self, settings: Settings) -> None:
|
||||||
@@ -17,7 +21,7 @@ class EmbeddingProvider:
|
|||||||
base_url=self.settings.dashscope_base_url,
|
base_url=self.settings.dashscope_base_url,
|
||||||
model=self.settings.embedding_model,
|
model=self.settings.embedding_model,
|
||||||
dimensions=self.settings.embedding_dim,
|
dimensions=self.settings.embedding_dim,
|
||||||
chunk_size=20,
|
chunk_size=10,
|
||||||
max_retries=2,
|
max_retries=2,
|
||||||
timeout=60.0,
|
timeout=60.0,
|
||||||
check_embedding_ctx_length=False,
|
check_embedding_ctx_length=False,
|
||||||
@@ -40,6 +44,7 @@ class EmbeddingProvider:
|
|||||||
except AppError:
|
except AppError:
|
||||||
raise
|
raise
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
logger.exception("Embedding document request failed error_type=%s", type(exc).__name__)
|
||||||
raise AppError(
|
raise AppError(
|
||||||
"EMBEDDING_UPSTREAM_ERROR",
|
"EMBEDDING_UPSTREAM_ERROR",
|
||||||
"文档向量化失败,请稍后重试",
|
"文档向量化失败,请稍后重试",
|
||||||
@@ -54,6 +59,7 @@ class EmbeddingProvider:
|
|||||||
except AppError:
|
except AppError:
|
||||||
raise
|
raise
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
logger.exception("Embedding query request failed error_type=%s", type(exc).__name__)
|
||||||
raise AppError(
|
raise AppError(
|
||||||
"EMBEDDING_UPSTREAM_ERROR",
|
"EMBEDDING_UPSTREAM_ERROR",
|
||||||
"查询向量化失败,请稍后重试",
|
"查询向量化失败,请稍后重试",
|
||||||
|
|||||||
Reference in New Issue
Block a user