from pathlib import Path root=Path('C:/kefu/wechat_rpa') p=root/'knowledge_store.py';s=p.read_text(encoding='utf-8').replace(' db.executescript(SCHEMA)', ' from knowledge_review import REVIEW_SCHEMA\n db.executescript(SCHEMA + REVIEW_SCHEMA)');p.write_text(s,encoding='utf-8',newline='\n') p=root/'knowledge_api.py';s=p.read_text(encoding='utf-8').replace('class SettingsBody(BaseModel):', 'class ReviewConfirmBody(BaseModel):\n confirmed: bool = False\n\n\nclass SettingsBody(BaseModel):') needle=' @app.get("/api/v2/knowledge/overview")' insert=''' from knowledge_review import KnowledgeReviewStore reviews = KnowledgeReviewStore(store) @app.post('/api/v2/knowledge/review-tasks/preview') def preview_reviews(request: Request, account_id: int = -1, principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))): with errors(): return reviews.preview(resolve_admin_tenant(principal, account_id), account_id, principal.id, client_ip(request)) @app.get('/api/v2/knowledge/review-tasks') def review_tasks(principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))): return {'items': reviews.jobs(principal.id)} @app.get('/api/v2/knowledge/review-tasks/{job_id}/results') def review_results(job_id: str, result: str = 'skipped', page: int = Query(default=1, ge=1), page_size: int = Query(default=30, ge=1, le=100), principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))): with errors(): return reviews.results(job_id, principal.id, resolve_admin_tenant(principal, -1), result, page, page_size) @app.get('/api/v2/knowledge/review-tasks/{job_id}') def review_task(job_id: str, principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))): with errors(): return reviews.get(job_id, principal.id) @app.post('/api/v2/knowledge/review-tasks/{job_id}/{action}') def review_action(job_id: str, action: str, body: ReviewConfirmBody, request: Request, principal=Depends(require('knowledge:read', 'knowledge:review', 'im:content:read'))): with errors(): return reviews.action(job_id, action, principal.id, client_ip(request), body.confirmed) ''' assert needle in s;s=s.replace(needle,insert+needle);p.write_text(s,encoding='utf-8',newline='\n') p=root/'knowledge_worker.py';s=p.read_text(encoding='utf-8').replace('import time\n', 'import time\nimport threading\n',1) s=s.replace(' worker = KnowledgeWorker(store)\n print(', ''' from knowledge_review import KnowledgeReviewWorker review_worker = KnowledgeReviewWorker(store) def review_loop(): while True: try: worked = review_worker.step() except Exception as exc: # Keep processing isolated from model requests; do not log content. print(f'批量审核暂不可用: {type(exc).__name__}', flush=True) worked = False time.sleep(0.05 if worked else 2) if args.once: review_worker.step() else: threading.Thread(target=review_loop, name='knowledge-review', daemon=True).start() worker = KnowledgeWorker(store) print(''');p.write_text(s,encoding='utf-8',newline='\n')