feat: 添加知识库检索功能和改进模型路由错误处理
- 在ChatRequest中添加Citation事件类型,支持引用来源展示 - 实现聊天上下文准备服务,构建带源元数据的受限聊天上下文 - 添加ThreadedProcess类以支持Windows平台的子进程操作 - 改进检索引擎中的错误处理和向量搜索逻辑 - 实现严格的嵌入模型验证和索引重建机制 - 添加前端聊天界面的知识库检索开关 - 实现搜索历史记录功能和错误降级处理 - 更新模型路由设置提示信息以反映索引重建需求
This commit is contained in:
+13
-4
@@ -323,15 +323,24 @@ async def chat(request: ChatRequest) -> StreamingResponse:
|
||||
async def stream() -> AsyncIterator[str]:
|
||||
sequence = 0
|
||||
try:
|
||||
async with aclosing(provider.adapter.stream(request)) as events:
|
||||
from app.services.chat_context import prepare
|
||||
grounded_request, citations = await prepare(request)
|
||||
for citation in citations:
|
||||
event = ModelEvent(event=ModelEventType.citation, sequence=sequence,
|
||||
data=citation, timestamp=utc_now())
|
||||
sequence += 1
|
||||
yield as_sse(event.event.value, event.model_dump_json())
|
||||
async with aclosing(provider.adapter.stream(grounded_request)) as events:
|
||||
async for event in events:
|
||||
sequence = event.sequence + 1
|
||||
event = event.model_copy(update={"sequence": sequence})
|
||||
sequence += 1
|
||||
yield as_sse(event.event.value, event.model_dump_json())
|
||||
except Exception:
|
||||
except Exception as exc:
|
||||
error = ModelEvent(
|
||||
event=ModelEventType.error,
|
||||
sequence=sequence,
|
||||
data={"code": "PROVIDER_ERROR", "message": "Provider could not complete the request."},
|
||||
data={"code": exc.code if isinstance(exc, ApiError) else "CHAT_FAILED",
|
||||
"message": exc.message if isinstance(exc, ApiError) else "知识库检索或模型生成失败,请检查服务状态。"},
|
||||
timestamp=utc_now(),
|
||||
)
|
||||
done = ModelEvent(
|
||||
|
||||
Reference in New Issue
Block a user