feat(y-log/knowledge): 日志前缀改 CM助手-全量 + 入库 nodeName 按标题去时间戳保持一致
1. Y-Log 上报 optDetail 前缀 B1-CM助手 → CM助手-全量(全量替换 44 个前端文件 + 文档) 2. 知识库入库 nodeName 改为只取 md5(标题).md(去掉时间戳),同一篇 md 每次入库一致,避免重复记录 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
3e68260afa
commit
5ecf28e60c
46 files changed
+307
-301
No files matched your search
@@ -5,7 +5,9 @@
|
||||
|
||||
入库目标接口的字段名不固定:标题字段可能叫「名称」也可能叫「标题」,因此先按
|
||||
「名称」发送一次,若判定失败则用 **同一个 nodeName** 把标题字段换成「标题」再
|
||||
发一次。nodeName 是入库记录的唯一标识,取「md 标题 + 时间戳」。
|
||||
发一次。nodeName 是入库记录的唯一标识,**只由 md 标题决定**(md5(标题)),不含
|
||||
时间戳——同一篇 md(同标题)每次入库得到的 nodeName 都一致,避免重复入库时产生
|
||||
多条记录。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -56,7 +58,7 @@ class KnowledgeIngestAttempt(BaseModel):
|
||||
class KnowledgeIngestPublishResponse(BaseModel):
|
||||
success: bool
|
||||
template_name: str
|
||||
node_name: str = Field(..., description="入库唯一标识(md 标题 + 时间戳),两次尝试共用")
|
||||
node_name: str = Field(..., description="入库唯一标识(md5(标题),同标题每次入库一致),两次尝试共用")
|
||||
batch_number: str
|
||||
attempts: list[KnowledgeIngestAttempt]
|
||||
|
||||
@@ -99,10 +101,14 @@ def _build_payload(template_name: str, batch_number: str, node_name: str, title_
|
||||
}
|
||||
|
||||
|
||||
def _build_node_name(title: str, timestamp: str) -> str:
|
||||
"""Build a stable node name as md5(title) + timestamp + .md."""
|
||||
def _build_node_name(title: str) -> str:
|
||||
"""Build a stable node name = md5(title) + .md.
|
||||
|
||||
nodeName 只由标题决定(不含时间戳),所以同一篇 md(同标题)每次入库都得到
|
||||
完全相同的 nodeName —— 入库接口据此把重复上传当作同一条记录,而不是每次新增。
|
||||
"""
|
||||
title_md5 = hashlib.md5(title.encode("utf-8")).hexdigest()
|
||||
return f"{title_md5}-{timestamp}.md"
|
||||
return f"{title_md5}.md"
|
||||
|
||||
|
||||
def _resolve_ingest_url() -> str:
|
||||
@@ -132,10 +138,10 @@ async def publish_to_knowledge_base(request: KnowledgeIngestPublishRequest) -> K
|
||||
raise HTTPException(status_code=400, detail=f"智能体 '{request.agent_id}' 未配置入库模板名(template_name),无法发布")
|
||||
|
||||
now = datetime.now()
|
||||
# nodeName 是入库记录的唯一标识:md 标题 + 时间戳。两次尝试必须共用同一个
|
||||
# nodeName,避免第一次实际已入库时第二次产生重复记录。
|
||||
timestamp = now.strftime("%Y%m%d%H%M%S")
|
||||
node_name = _build_node_name(title, timestamp)
|
||||
# nodeName 是入库记录的唯一标识:只取 md5(标题),不含时间戳。同一篇 md(同标题)
|
||||
# 每次入库得到一致的 nodeName —— 既保证两次尝试(名称/标题字段)共用同一个,也
|
||||
# 保证重复上传同一篇 md 不会产生多条记录。
|
||||
node_name = _build_node_name(title)
|
||||
batch_number = f"md{now.strftime('%Y%m%d')}"
|
||||
ingest_url = _resolve_ingest_url()
|
||||
|
||||
|
||||
Reference in new issue
Block a user