U
    /q¢jö¾  ã                "   @   sŽ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZ
ej ej e¡¡Zej ed¡Zej ed¡ZdZej ed¡ZdZdZdZd	d
dddddddgddœdddddddgddœddddd d!d"gd#dœd$d%d&d'd(d)d*gd+dœd,d-d.d/d0d1d2gd3dœd4d5d6d7d8d9d:gd;dœd<d=d>d?d@dAdBgdCdœdDdEd!dFdGdHdIgdJdœdKdLdMdNdOdPdQgdRdœg	ZdSdTdUgZg Zg adVdWdXdYdZd[d\d]d^d_g
Zd`ZdaZdbZ dcdddedfœdgdgdhdfœdididjdfœdkœZ!dlZ"dmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆd‰dŠd‹dŒd�dŽœ!Z#d�Z$d�d‘„ Z%d’d“„ Z&dêd•d–„Z'dëd˜d™„Z(dìd›dœ„Z)d�dž„ Z*dŸd „ Z+d¡d¢„ Z,d£d¤„ Z-d¥d¦„ Z.díd¨d©„Z/dªd«„ Z0d¬d­„ Z1d®d¯„ Z2d°d±„ Z3d²d³„ Z4d´dµ„ Z5d¶d·„ Z6d¸d¹„ Z7dîdºd»„Z8d¼d½„ Z9d¾d¿„ Z:dÀdÁ„ Z;dïdÃdÄ„Z<dðdÆdÇ„Z=dÈdÉ„ Z>dÊdË„ Z?dÌdÍ„ Z@dÎdÏ„ ZAdÐdÑ„ ZBdÒdÓ„ ZCdÔdÕ„ ZDdÖd×„ ZEdØdÙ„ ZFdñdÛdÜ„ZGdÝdÞ„ ZHdòdßdà„ZIdódádâ„ZJdãdä„ ZKdådæ„ ZLdçdè„ ZMeNdék�rŠeMƒ  dS )ôé    Nzai-learning-videos.jsonzlife-data.jsonzhttps://agent.codepost.site/zai-learning-stages-cache.jsoné   é   é·   u&   Stage 0ï¼šçŽ¯å¢ƒå‡†å¤‡ â€” Foundationsuo   æŒ‰ AI Agent å­¦ä¹ è·¯çº¿å›¾å®Œæˆ� Python/CLI/Git/API/JSON åŸºç¡€ï¼Œè·‘é€šç¬¬ä¸€ä¸ªæœ¬åœ°æˆ–äº‘ç«¯ AI è°ƒç”¨ã€‚u!   Codex å®‰è£… é…�ç½® å…¥é—¨ æ•™ç¨‹u'   Claude Code å®‰è£… é…�ç½® å…¥é—¨ æ•™ç¨‹u&   Gemini CLI å®‰è£… é…�ç½® å…¥é—¨ æ•™ç¨‹u+   Ollama æœ¬åœ°å¤§æ¨¡åž‹ å®‰è£… å…¥é—¨ æ•™ç¨‹u,   AI Agent çŽ¯å¢ƒå‡†å¤‡ Python API JSON æ•™ç¨‹u'   Python API JSON æ–°æ‰‹ å®žæ“� æ•™ç¨‹ AIu"   Git å‘½ä»¤è¡Œ å…¥é—¨ å®žæ“� æ•™ç¨‹úAI Agent Foundations)ÚnameÚgoalÚqueriesÚtracku.   Stage 1ï¼šLLM åŸºç¡€ â€” Language Model Basicsuj   ç�†è§£ Tokenã€�æ¨¡åž‹ä¾›åº”å•†ã€�æœ¬åœ°æ¨¡åž‹å’Œäº‘ç«¯ APIï¼Œå®Œæˆ�ä¸€æ¬¡è·¨æ¨¡åž‹è°ƒç”¨å’Œé”™è¯¯å¤„ç�†ã€‚u"   LLM åŸºç¡€ Token API è°ƒç”¨ æ•™ç¨‹u   OpenAI API å…¥é—¨ Python æ•™ç¨‹u(   å¤§æ¨¡åž‹ API é”™è¯¯å¤„ç�† é‡�è¯• æ•™ç¨‹u   Ollama OpenAI API å¯¹æ¯” æ•™ç¨‹u-   æœ¬åœ°å¤§æ¨¡åž‹ äº‘ç«¯å¤§æ¨¡åž‹ å…¥é—¨ æ•™ç¨‹õ
   LLM åŸºç¡€u0   Stage 2ï¼šPrompt Engineering â€” æ��ç¤ºè¯�å·¥ç¨‹uh   å­¦ä¹  System Promptã€�Few-shotã€�CoT å’Œ Context Engineering å…¥é—¨ï¼Œäº§å‡ºå�¯å¤�ç”¨æ��ç¤ºè¯�æ¨¡æ�¿ã€‚u0   Prompt Engineering æ��ç¤ºè¯�å·¥ç¨‹ å®žæ“� æ•™ç¨‹u.   System Prompt Few shot Chain of Thought æ•™ç¨‹u%   ChatGPT æ��ç¤ºè¯�å·¥ç¨‹ æ–°æ‰‹ å®žæˆ˜u!   Context Engineering å…¥é—¨ æ•™ç¨‹u!   AI æ��ç¤ºè¯� æ¨¡æ�¿ å®žæ“� æ•™ç¨‹úPrompt Engineeringu   Track A1ï¼šCLI Agent å…¥é—¨u}   æŒ‰ç½‘ç«™ Track A è·¯çº¿ç†Ÿæ‚‰ Claude Codeã€�Codexã€�Gemini CLI ç­‰çŽ°æˆ� CLI Agentï¼Œä¸�å†™å¤�æ�‚ä»£ç �å…ˆæ��å�‡å·¥ä½œæµ�ã€‚u    Claude Code å…¥é—¨ æ•™ç¨‹ å®žæ“�u   Codex CLI å…¥é—¨ æ•™ç¨‹ å®žæ“�u   Gemini CLI å…¥é—¨ æ•™ç¨‹u   AI CLI Agent å…¥é—¨ æ•™ç¨‹u(   Claude Code Codex å·¥ä½œå�° ä½¿ç”¨æ•™ç¨‹õ   CLI Agent å…¥é—¨u7   Track A2ï¼šCLI å·¥ä½œæµ� â€” Slash å‘½ä»¤/MCP/å­�ä»£ç�†ue   æŠŠ CLI Agent ç”¨åˆ°çœŸå®žå·¥ä½œæµ�ï¼šå‘½ä»¤ã€�ä¸Šä¸‹æ–‡æ–‡ä»¶ã€�MCPã€�å­�ä»£ç�†å’Œè‡ªåŠ¨åŒ–ä»»åŠ¡ã€‚u#   Claude Code Slash å‘½ä»¤ MCP æ•™ç¨‹u   Codex MCP å·¥ä½œæµ� æ•™ç¨‹u!   AI Agent MCP å…¥é—¨ å®žæ“� æ•™ç¨‹u%   Claude Code å­�ä»£ç�† subagent æ•™ç¨‹u$   CLI Agent è‡ªåŠ¨åŒ– å·¥ä½œæµ� æ•™ç¨‹õ   CLI Agent å·¥ä½œæµ�u1   Stage 5ï¼šClaude Code ç”Ÿæ€� â€” Skills/CLAUDE.mdup   å­¦ä¹ ç½‘ç«™å¼ºè°ƒçš„ Claude Code ç”Ÿæ€�èƒ½åŠ›ï¼šCLAUDE.mdã€�Skillsã€�é¡¹ç›®ä¸Šä¸‹æ–‡å’Œå�¯å¤�ç”¨å·¥ä½œè§„èŒƒã€‚u   Claude Code CLAUDE.md æ•™ç¨‹u    Claude Code Skills æ•™ç¨‹ å®žæ“�u"   Claude Code é¡¹ç›®ä¸Šä¸‹æ–‡ æ•™ç¨‹u&   AI ç¼–ç¨‹åŠ©æ‰‹ é¡¹ç›®è§„èŒƒ CLAUDE.mdu#   Claude Code å·¥ä½œæµ� å®žæˆ˜ æ•™ç¨‹õ   Claude Code ç”Ÿæ€�uE   Track A3ï¼šCLI ç”Ÿäº§çº§ â€” GitHub Actions/æˆ�æœ¬è¿½è¸ª/å›¢é˜Ÿå��ä½œu_   æŠŠ CLI Agent ä»Žä¸ªäººç»ƒä¹ æŽ¨è¿›åˆ°å�¯å¤�ç”¨ã€�å�¯å��ä½œã€�å�¯æŽ§æˆ�æœ¬çš„ç”Ÿäº§å·¥ä½œæµ�ã€‚u+   Claude Code GitHub Actions è‡ªåŠ¨åŒ– æ•™ç¨‹u   AI Agent æˆ�æœ¬è¿½è¸ª æ•™ç¨‹u"   Claude Code å›¢é˜Ÿå��ä½œ å·¥ä½œæµ�u%   Codex GitHub Actions è‡ªåŠ¨åŒ– æ•™ç¨‹u'   AI CLI Agent ç”Ÿäº§çº§ å·¥ä½œæµ� æ•™ç¨‹õ   CLI Agent ç”Ÿäº§çº§u8   Stage 7.5ï¼šé«˜é˜¶æ¦‚å¿µ â€” Context/Harness Engineeringu‰   ç�†è§£ç½‘ç«™çš„ä¸‰å±‚æ¼”è¿›ï¼šPrompt Engineeringã€�Context Engineeringã€�Harness Engineeringï¼Œå¹¶èƒ½è¿�ç§»åˆ°è‡ªå·±çš„å·¥ä½œå�°æµ�ç¨‹ã€‚u#   Harness Engineering AI Agent æ•™ç¨‹u   AI Agent ä¸Šä¸‹æ–‡å·¥ç¨‹ å®žæ“�z"Prompt Context Harness Engineeringu"   Claude Code ä¸Šä¸‹æ–‡ç®¡ç�† æ•™ç¨‹õ   Agent é«˜é˜¶æ¦‚å¿µu*   Stage 8ï¼šAgent Interface â€” Agent æŽ¥å�£u�   å­¦ä¹  Agent ä½œä¸ºäº§å“�å…¥å�£çš„å½¢æ€�ï¼šè�Šå¤©ã€�CLIã€�æµ�è§ˆå™¨ã€�è‡ªåŠ¨åŒ–é�¢æ�¿ï¼Œå¹¶è®¾è®¡ä¸€ä¸ªè‡ªå·±çš„æœ€å°� Agent å·¥ä½œå�°å…¥å�£ã€‚u&   AI Agent Interface äº¤äº’è®¾è®¡ æ•™ç¨‹u&   AI Agent äº§å“�è®¾è®¡ å·¥ä½œå�° æ•™ç¨‹u   Agent CLI Web UI å…¥é—¨ æ•™ç¨‹u   AI Agent è‡ªåŠ¨åŒ–é�¢æ�¿ æ•™ç¨‹u   ä»Ž0åˆ°1 AI Agent åº”ç”¨ æ•™ç¨‹õ   Agent äº§å“�æŽ¥å�£u   AI Agent æ��æ•ˆ æ¡ˆä¾‹ å®žæ“�u   Claude Code çœŸå®žé¡¹ç›® æ¡ˆä¾‹u    Codex è‡ªåŠ¨åŒ– å·¥ä½œæµ� æ¡ˆä¾‹)uP   ã€�æœ€æ–°ç‰ˆCodexå®‰è£…Gitã€‘ä¿�å§†çº§æ•™ç¨‹å’Œè®²è§£ å�šåˆ°é›¶é£Žé™©æ“�ä½œCodexz,https://www.bilibili.com/video/BV14WGw6UEYu/r   õ1   Bç«™å…¬å¼€æ�œç´¢å·²éªŒè¯�ï¼Œæœ€è¿‘å�Šå¹´å†…å�‘å¸ƒ)uz   ã€�2026æœ€æ–°ã€‘Codex æŽ¥å…¥ Gemini 3.5 Flashï½œç¬¬ä¸‰æ–¹ API é…�ç½®å®žæˆ˜ï½œmacOS + Windows å�Œç‰ˆæœ¬ï½œRouterLink æ•™ç¨‹z,https://www.bilibili.com/video/BV1F8GR6sE6t/r   r   )ud   Codexçš„å®‰è£…å¹¶ä¸”å¦‚ä½•é…�ç½®è½¬æŽ¥ç¬¬ä¸‰æ–¹APIå®Œæ•´ä½¿ç”¨æ•™ç¨‹#codex #ai #å®‰è£…#å¤§æ¨¡åž‹#APIz,https://www.bilibili.com/video/BV1RNjb6JEZf/r   r   )uQ   æœ€å¼º AI ç»„å�ˆè¯žç”Ÿï¼�Kimi K3 æŽ¥å…¥ Codex æ•™ç¨‹ï¼Œ3 åˆ†é’Ÿæ�žå®šï½œCC Switchz,https://www.bilibili.com/video/BV1gWKY6tE4U/r   r   )uJ   [ä¸­é…�]Claude Code å…�è´¹ä¸”æ— é™�åˆ¶ OmniRoute è®¾ç½®æŒ‡å�— - AI For Youz,https://www.bilibili.com/video/BV1gF396AEBU/r   r   )u@   Claude CodeæŽ¥å…¥é£žä¹¦æ•™ç¨‹, æ‰‹æœºè¿œç¨‹æ“�çºµç”µè„‘å†™ä»£ç �z,https://www.bilibili.com/video/BV15TPrzeELm/r   r   )u5   Codexé›¶åŸºç¡€é€Ÿæˆ�ç³»åˆ—-15åˆ†é’Ÿä»Žå…¥é—¨åˆ°å®žæˆ˜z,https://www.bilibili.com/video/BV1nDuv6tEhs/r   õ%   Bç«™æ�œç´¢ç»“æžœæ˜¾ç¤ºä¸ºæœ€è¿‘å�‘å¸ƒ)u5   ã€�é›¶åŸºç¡€çŽ©è½¬AIï¼šClaude Code CLIå®žæ“�æŒ‡å�—ã€‘z,https://www.bilibili.com/video/BV1eWu261E1U/r   r   )uY   ã€�æœ€æ–°ç‰ˆã€‘å°�ç™½é€Ÿé€š Codex æ•™ç¨‹ï¼ˆå�« DeepSeek æŽ¥å…¥ï¼Œæ— éœ€ ChatGPT è®¢é˜…ï¼‰z,https://www.bilibili.com/video/BV1Zgud6LEoh/r   r   )ui   ã€�2026æœ€æ–°ç‰ˆã€‘å…¨ç½‘æœ€é€‚å�ˆåˆ�å­¦è€…çš„Ollamaæ•™ç¨‹ï¼Œå…�è´¹å¼€æº�ï¼Œå¸¦ä½ ä»Ž0åˆ°1å�ƒé€�Ollamaï¼�z,https://www.bilibili.com/video/BV1KVd6BwEhs/r   u.   Bç«™æ�œç´¢ç»“æžœæ˜¾ç¤ºä¸ºæœ€è¿‘å�Šå¹´å†…å�‘å¸ƒ)õ   æ•™ç¨‹õ   å®žæ“�õ   æ¡ˆä¾‹õ	   å·¥ä½œæµ�õ	   è‡ªåŠ¨åŒ–u   ä»Ž0åˆ°1u   ä»Žé›¶åˆ°ä¸€õ	   ä¿�å§†çº§u   æ¨¡æ�¿õ   è„šæœ¬õ   å¤�ç›˜u   æ•™å­¦õ   å®žæˆ˜u   æ¼”ç¤ºu	   æ‰‹æŠŠæ‰‹)ZChatGPTu   è±†åŒ…ZKimiÚCozeõ   æ‰£å­�u   å‰ªæ˜ ÚCanvaõ   å�³æ¢¦õ   å�¯ç�µÚExcelõ   é£žä¹¦õ   å¤šç»´è¡¨æ ¼ÚPPTÚWordÚCodexúClaude Codeú
Gemini CLIÚOllamaÚMCPúGitHub ActionsÚ	LangGraphz
OpenAI APIÚJSONÚPythonÚCLIÚAgent)u   ç„¦è™‘u	   å‰²éŸ­è�œu   æš´å¯Œu   æœˆå…¥ç™¾ä¸‡u   èººèµšu   æ”¶å¾’õ	   è®­ç»ƒè�¥u	   ç§�åŸŸè¯¾u   å�–è¯¾u   åŠ ç›Ÿu   éª—å±€u   èµ„è®¯u   æ–°é—»u	   å�‘å¸ƒä¼šu   çƒ­é—¨é¡¹ç›®æŽ¨è��u   é¡¹ç›®æŽ¨è��u   ç¥žå™¨u   æ•ˆçŽ‡èµ·é£žõ   ç»•è¿‡õ   ç ´è§£u   é™�åˆ¶è§£é™¤õ   é�“å¾·é™�åˆ¶õ   è¶Šç‹±Ú	jailbreak)úyoutube.com/watchúyoutu.be)r8   ú	youtu.be/u   YouTube å…¬å¼€è§†é¢‘æ�œç´¢)Úsearch_sitesÚurl_patternsÚnote)zxiaohongshu.com/explorezxiaohongshu.com/discovery/itemúxhslink.comu   å°�çº¢ä¹¦å…¬å¼€ç½‘é¡µæ�œç´¢)zdouyin.com/videozdouyin.com/noteúiesdouyin.comu   æŠ–éŸ³å…¬å¼€ç½‘é¡µæ�œç´¢©ÚYouTubeõ	   å°�çº¢ä¹¦õ   æŠ–éŸ³)$r/   r0   ZGitZAPIr.   r*   ZLLMÚTokenz
OpenAI SDKZ	Anthropicr   zSystem PromptzFew-shotzChain-of-ThoughtzContext EngineeringzFunction CallingZReActzTool UseZSchemaÚRAGZVectorZ	Embeddingr-   ZCrewAIr+   r(   r'   r)   r,   zAgent InterfacezBrowser AgentZMemoryZObservabilityZ
EvaluationZPromptr1   õ   çŽ¯å¢ƒu   å‡†å¤‡õ   åŸºç¡€u   å­¦õ   ä»€ä¹ˆu   åŠ¨æ‰‹u   è°ƒç”¨u	   ä¾›åº”å•†u   äº‘ç«¯u   å�–èˆ�õ	   æ��ç¤ºè¯�u   è®¾è®¡u	   æŽ¨ç�†é“¾u   ç»ƒä¹ u   å†…åµŒu   æž„å»ºu   é€‰æ‹©u	   è½¬æŠ˜ç‚¹u   å¾ªçŽ¯u   è®°å¿†u   æ£€ç´¢u	   è§‚æµ‹æ€§u   ç”Ÿäº§u   çº§õ   å¼€å�‘u   é”™è¯¯u   å¤„ç�†u   é¡¹ç›®u   æ–‡æ¡£r   u	   ç¬¬ä¸€ä¸ªu   å¯¹æ¯”õ   æœ¬åœ°)!u   ç’°å¢ƒu   æº–å‚™u   åŸºç¤Žu   å­¸u   ä»€éº¼u   å‹•æ‰‹u   èª¿ç”¨u	   ä¾›æ‡‰å•†u   é›²ç«¯u   å�–æ�¨u	   æ��ç¤ºè©žu   è¨­è¨ˆu	   æŽ¨ç�†é�ˆu   ç·´ç¿’u   å…§åµŒu   æ§‹å»ºu   é�¸æ“‡u	   è½‰æŠ˜é»žu   å¾ªç’°u   è¨˜æ†¶u   æª¢ç´¢u	   è§€æ¸¬æ€§u   ç”Ÿç”¢u   ç´šu   é–‹ç™¼u   éŒ¯èª¤u   è™•ç�†u   é …ç›®u   æ–‡æª”u   å¯¦æˆ°u	   ç¬¬ä¸€å€‹u   å°�æ¯”rK   )hZCursorr   r   rE   Z	LangChainõ   éƒ¨ç½²õ   æ¨¡åž‹è®­ç»ƒõ   å¾®è°ƒZSorar    r!   u   çŸ­ç‰‡u   ç”µå½±u   å½±è§†u   æ¼«å‰§u   æ¼«ç”»u	   æ•°å­—äººu   å…¨å¥—u   å…¨36é›†u   å…¨30é›†u   AIè§†é¢‘u   è§†é¢‘æ��ç¤ºè¯�u   åˆ†é•œu	   æ•…äº‹æ�¿u   å‰§æœ¬z	GPT-ImageZComfyUIu   AIç»˜ç”»u   ç»˜ç”»õ   ç”Ÿå›¾õ   å›¾ç‰‡u   å›¾åƒ�õ   æµ·æŠ¥Z
Midjourneyu   è¯†å›¾u   æ�’ä»¶u   å›½èµ›u   ç«žèµ›u   æ•°å­¦å»ºæ¨¡õ   è®ºæ–‡u   ç§‘ç ”u   æ��ç¤ºè¯�èµšé’±u	   æ–°åª’ä½“rB   rC   u   ç›´æ’­õ   ç”µå•†u   è¿�è�¥u   èµ·å�·u   æ¶¨ç²‰u   éŸ³ä¹�ZSunorP   u	   æ–‡ç”Ÿå›¾u	   å›¾ç”Ÿå›¾u	   æ— æ°´å�°u   ä¸‹è½½u	   ç³»ç»Ÿè¯¾u	   é€šå…³è¯¾u	   å¿…ä¿®è¯¾r2   u	   é©¬å£«å…µu   é‚ªä¿®u   ç•ªèŒ„u   ç­¾çº¦u	   ç­¾ä¸€ç¯‡u   è¿‡ç­¾u   ç»“ç®—u   æˆ˜ç»©u   å°±ä¸šu	   å¤©èŠ±æ�¿u   æœ€å…¨u   å‡ºå›¾u	   å�‚è€ƒå›¾rR   Zessayu   ç™½å«–u   ç™¾ä¸‡å¹´è–ªu   ç»ˆæž�u   å°�è¯´u	   å®Œæ•´ç‰ˆu   èµ„æº�zGPT5.6zGPT 5.6zChatGPT 5.6u   ä»Šæ—¥å¤´æ�¡u   æƒ…æ„Ÿèµ›é�“ZSeedanceu   ç”Ÿæˆ�è§†é¢‘rO   u   åˆ¶å›¾u   ç»˜å›¾u   å¹¿å‘Šu	   è®¾è®¡å¸ˆZskillZSkillu   è¿�è§„u   æ¬ºéª—õ   è¿›é˜¶õ   é«˜çº§u   è‡ªåŠ¨åŒ–æµ‹è¯•Z
PlaywrightzCopilot CLIZOpenCodec                   C   s   t j  t  t jdd�¡¡S )Né   ©Zhours)ÚdatetimeZnowÚtimezoneÚ	timedelta© r[   r[   ú(/opt/workbuddy/ai_learning_video_auto.pyÚnow_dté   s    r]   c                   C   s   t ƒ  d¡S )Nz%Y-%m-%d %H:%M:%S)r]   Ústrftimer[   r[   r[   r\   Únow_strí   s    r_   úhttps://search.bilibili.com/c                 C   s2   d| ddddt  ¡ j ¡ › dtt ¡ ƒ› d�dœS )	NzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36zhttps://search.bilibili.comz!application/json, text/plain, */*zzh-CN,zh;q=0.9,en;q=0.8zbuvid3=zinfoc; b_nut=z; CURRENT_FNVAL=4048;)z
User-AgentZRefererZOriginÚAcceptzAccept-LanguageZCookie)ÚuuidZuuid4ÚhexÚupperÚintÚtime©Úrefererr[   r[   r\   Úbrowser_headersñ   s    "úri   é   c              
   C   sR   t jj| t|ƒd�}t jj||d��$}t | ¡  dd¡¡W  5 Q R £ S Q R X d S )N©Úheaders©Útimeoutúutf-8Úignore)	ÚurllibÚrequestÚRequestri   ÚurlopenÚjsonÚloadsÚreadÚdecode)Úurlrn   rh   ÚreqÚrespr[   r[   r\   Ú
fetch_jsonü   s    r|   é   c              
   C   s\   t |p| ƒ}d|d< tjj| |d�}tjj||d��}| ¡  dd¡W  5 Q R £ S Q R X d S )Nz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8ra   rk   rm   ro   rp   )ri   rq   rr   rs   rt   rw   rx   )ry   rn   rh   rl   rz   r{   r[   r[   r\   Ú
fetch_text  s
    r~   c                 C   s>   t jdd| pdt jd�} t  dd| ¡} t t  dd| ¡¡ ¡ S )Nz<em[^>]*>|</em>Ú ©Úflagsú<[^>]+>ú\s+ú )ÚreÚsubÚIÚhtmlÚunescapeÚstrip)Útitler[   r[   r\   Úclean_title
  s    rŒ   c                 C   s^   t jdd| pdt jt jB d�} t jdd| t jt jB d�} t  dd| ¡} t t  dd| ¡¡ ¡ S )Nz<script\b[^>]*>.*?</script>r„   r   r€   z<style\b[^>]*>.*?</style>r‚   rƒ   )r…   r†   r‡   ÚSrˆ   r‰   rŠ   ©Útextr[   r[   r\   Ú
strip_html  s    r�   c                 C   s*   | pd}t  ¡ D ]\}}| ||¡}q|S )Nr   )ÚTRADITIONAL_HINTSÚitemsÚreplace)r�   ÚoutZtradZsimpler[   r[   r\   Úto_simplified_hint  s    r•   c                 C   sp   t jdd| pdt jt jB d�}tt|ƒƒ}t  dd|¡ d¡}t jd|t jd�rT|S |d k	rld|› d	|› �S |S )
Nz<span\b[^>]*>.*?</span>r   r€   rƒ   r„   õ    -â€”z^(Stage|Track)\búStage õ   ï¼š)r…   r†   r‡   r�   r•   r�   rŠ   Úmatch)Z	raw_titleÚ	stage_numr‹   r[   r[   r\   Ústage_title_from_html  s    r›   c                 C   s,   t t| ƒƒ} t dd| ¡} t dd| ¡ ¡ S )Nz[^\w\u4e00-\u9fff\-\s]+r„   rƒ   )r•   r�   r…   r†   rŠ   rŽ   r[   r[   r\   Úcompact_keyword_text'  s    rœ   rV   c                    sà   t | ƒ}g }| ¡ }tD ]"}| ¡ |kr||kr| |¡ qt d|¡}dddddddd	d
dddh}|D ]j‰ ˆ |kshˆ  ¡ dd„ |D ƒkrŒqht‡ fdd„|D ƒƒr¤qht dˆ ¡s¸ˆ tkrÂ| ˆ ¡ t|ƒ|krh qÔqh|d |… S )Nz5[\u4e00-\u9fffA-Za-z][\u4e00-\u9fffA-Za-z0-9\-\+]{2,}ZStageZTrackZFoundationsZLanguageZModelZBasicsr1   rH   u	   åŠ¨æ‰‹å�šu   å®Œæ•´æ–‡æ¡£u   åˆ†é’Ÿä»Žé›¶u   å…±ä¿®c                 S   s   h | ]}|  ¡ ’qS r[   ©Úlower)Ú.0Úsr[   r[   r\   Ú	<setcomp>7  s     z)extract_stage_keywords.<locals>.<setcomp>c                 3   s   | ]}ˆ |kp|ˆ kV  qd S ©Nr[   )rŸ   Úexisting©Ztermr[   r\   Ú	<genexpr>9  s     z)extract_stage_keywords.<locals>.<genexpr>z[\u4e00-\u9fff])	rœ   rž   ÚSTAGE_KEYWORDSÚappendr…   ÚfindallÚanyÚsearchÚlen)r�   ÚlimitZcompactÚfoundZlowÚkeywordZ	cjk_termsÚstopr[   r¤   r\   Úextract_stage_keywords-  s$    
r°   c           	      C   s(  t jdd| pdt jd�}t jdd|t jd�}t jdd|t jd�}t  dd|¡ d¡}d	d
„ |D ƒ}d |d d… ¡}g }|› d�|› d�|› d�|› d�fD ]4}t  dd|¡ ¡ }t|ƒdkrœ||krœ| |¡ qœ|d d… D ].}dD ]$}|› d|› �}||kræ| |¡ qæqÞ|�sddg}|d d… S )Nu   Stage\s*[\d.]+[:ï¼š]?r   r€   u   Track\s*[A-Z]\d*[:ï¼š]?u!   \b(A\+B|Track A|Track B|å…±ä¿®)\br„   rƒ   r–   c                 S   s   g | ]}|r|‘qS r[   r[   ©rŸ   Úkr[   r[   r\   Ú
<listcomp>G  s      z,build_queries_from_stage.<locals>.<listcomp>é   u    AI Agent æ•™ç¨‹ å®žæ“�u    å…¥é—¨ æ•™ç¨‹u    æ•™ç¨‹ å®žæˆ˜u    AI Agent å…¥é—¨é   r   )u   æ•™ç¨‹ å®žæ“�u   å…¥é—¨ æ•™ç¨‹u   AI Agent å…¥é—¨ æ•™ç¨‹u   AI Agent å®žæ“� æ•™ç¨‹rV   )r…   r†   r‡   rŠ   Újoinr«   r§   )	r‹   Ú	body_textÚkeywordsZ
title_coreZ
core_termsr   Úqr®   Úsuffixr[   r[   r\   Úbuild_queries_from_stageB  s.    ür»   c                 C   s¬  t tjd| pdtjd�ƒ}g }t|ƒD �]~\}}| ¡ }|d t|ƒk rX||d   ¡ n| p^d d| ¡ ¡}||kr€t| p|dƒ}| p†d||… }| 	d¡}| 	d¡}	tj
d|tjtjB d�}
t|
rÌ|
 	d¡nd|› �|ƒ}tjd	|tjtjB d�}tjd
|tjtjB d�}tjd|tjtjB d�}td || | ¡ƒ}t|› d|› �ƒ}| ||d d… �phd|› d�t|||ƒ| dd¡ dd¡d  ¡ �p’d||	|td dœ¡ q&|S )NzQ<div\s+class="stage-item"[^>]*data-stage="([^"]+)"[^>]*data-track="([^"]+)"[^>]*>r   r€   é   z</div>
</div>
</div>é   z<h3\b[^>]*>(.*?)</h3>r—   z<p\b[^>]*>(.*?)</p>z-<div\s+class="exercise-desc"[^>]*>(.*?)</div>z*<span\s+class="res-desc"[^>]*>(.*?)</span>r„   i  u   æŒ‰è·¯çº¿å›¾å®Œæˆ� u    é˜¶æ®µçš„å­¦ä¹ ä¸Žç»ƒä¹ ã€‚r˜   éÿÿÿÿu   AI Agent å­¦ä¹ è·¯çº¿å›¾ú#stages)r   r   r   r	   ZstageIdZroadmapTrackr¸   Ú	sourceUrl)Úlistr…   Úfinditerr‡   Ú	enumerateÚstartr«   ÚfindÚendÚgrouprª   r�   r›   r¨   rœ   r¶   r°   r§   r»   r“   ÚsplitrŠ   ÚROADMAP_URL)Ú	page_htmlZmarkersÚstagesÚidxZmarkerrÄ   rÆ   Úblockrš   r	   Ztitle_matchr‹   Z
paragraphsZexercise_descZresource_descr·   r¸   r[   r[   r\   Úextract_roadmap_stages]  s8    4


 ø

rÎ   c               	   C   sp   zTt tddd��} t | ¡}W 5 Q R X t|tƒr:| d¡nd }t|tƒrP|rP|nd W S  tk
rj   Y d S X d S )NÚrú	utf-8-sig©ÚencodingrË   )	ÚopenÚROADMAP_STAGE_CACHE_PATHru   ÚloadÚ
isinstanceÚdictÚgetrÁ   Ú	Exception)ÚfÚdatarË   r[   r[   r\   Úload_cached_stages|  s    rÜ   c              
   C   s
  zšt tdtd�}t|ƒ}t|ƒdk r8tdt|ƒ› d�ƒ‚tƒ td |dœ}ttdd	d
��}tj	||ddd� W 5 Q R X |  
dt› dt|ƒ› d�¡ |dfW S  tk
�r } zJtƒ }|rØ|  
d|› �¡ |df W Y ¢"S |  
d|› �¡ tdf W Y ¢S d }~X Y nX d S )Né   ©rn   rh   r   u   å�ªè§£æž�åˆ° u
    ä¸ª Stager¿   )Ú	updatedAtrÀ   rË   Úwro   rÑ   Fr½   ©Úensure_asciiÚindentu   å·²å…ˆæŠ“å�– u   #stagesï¼Œå¹¶è§£æž� u=    ä¸ª Stageï¼›æœ¬æ¬¡å…³é”®è¯�æ�¥è‡ªå½“å‰�é˜¶æ®µç½‘é¡µå†…å®¹ã€‚Zliveu<   è·¯çº¿å›¾ç½‘é¡µæŠ“å�–å¤±è´¥ï¼Œæ”¹ç”¨ä¸Šæ¬¡ç¼“å­˜çš„ Stageï¼šÚcacheuF   è·¯çº¿å›¾ç½‘é¡µæŠ“å�–å¤±è´¥ä¸”æ— ç¼“å­˜ï¼Œæ”¹ç”¨å†…ç½® Stage å…œåº•ï¼šZfallback)r~   rÉ   rÎ   r«   Ú
ValueErrorr_   rÓ   rÔ   ru   Údumpr§   rÙ   rÜ   ÚSTAGES)ÚnotesÚpagerË   rä   rÚ   ÚeÚcachedr[   r[   r\   Úload_live_stages†  s"    
rì   c                 C   s¤   | dkrd S t | ttfƒr"t| ƒS t| ƒ ¡  ¡ }zV| d¡rXtt|d d… ƒd ƒW S | d¡r|tt|d d… ƒd ƒW S tt|ƒƒW S  tk
rž   Y d S X d S )N)Nr   ú-u   ä¸‡r¾   i'  u   äº¿i áõ)rÖ   re   ÚfloatÚstrrŠ   rž   ÚendswithrÙ   )Úvaluer�   r[   r[   r\   Únormalize_numberš  s    

rò   c               	   C   sl   zPt tddd��} t | ¡}W 5 Q R X | d¡p2i  d¡p<g }tdd„ |D ƒƒW S  tk
rf   Y dS X d S )	NrÏ   rÐ   rÑ   ZaiLearnÚhistoryc                 S   s$   g | ]}t |tƒr| d ¡r|‘qS )Zdone)rÖ   r×   rØ   )rŸ   Úhr[   r[   r\   r³   ¯  s     
 
 z(load_completed_count.<locals>.<listcomp>r   )rÓ   ÚLIFE_DATA_PATHru   rÕ   rØ   r«   rÙ   )rÚ   rÛ   ró   r[   r[   r\   Úload_completed_countª  s    rö   c               	   C   s\   t jdd … D ]H} |  d¡rz tdt|  dd¡d ƒƒW   S  tk
rT   Y  d S X qd S )Nr¼   z--completed-count=r   ú=©ÚsysÚargvÚ
startswithÚmaxre   rÈ   rÙ   ©Úargr[   r[   r\   Úget_completed_count_from_args´  s    
 rÿ   c               	   C   s\   t jdd … D ]H} |  d¡rz tdt|  dd¡d ƒƒW   S  tk
rT   Y  dS X qdS )Nr¼   z--refresh-offset=r   r÷   rø   rý   r[   r[   r\   Úget_refresh_offset_from_args¾  s    
 r   c                 C   s8   |pt }tt|ƒd tdt| p dƒd ƒƒ}||| fS )Nr¼   r   é   )rç   Úminr«   rü   re   )Úcompleted_countrË   rÌ   r[   r[   r\   Ústage_for_countÈ  s    $r  c                 C   sH   | sd S z$t j jt| ƒt  t jdd�¡d�W S  tk
rB   Y d S X d S )NrV   rW   )Ztz)rX   Zfromtimestampre   rY   rZ   rÙ   )Úpubdater[   r[   r\   Úget_published_dtÎ  s    $r  c                 C   s0   t | ƒ}|sdS dtƒ | j  ko*tkS   S )NFr   )r  r]   ÚdaysÚRECENT_WINDOW_DAYS©r  Ú	publishedr[   r[   r\   Úis_recent_enough×  s    r  c                 C   s   t | ƒ}|r| d¡S d S )Nz%Y-%m-%d)r  r^   r	  r[   r[   r\   Úformat_published_atÞ  s    r  Fc                 C   sR   |rdS t | ƒ}|sdS tdtƒ | jƒ}|dkr6dS |dkrBdS |tkrNdS d	S )
Nõ   ç»�å…¸æ•™ç¨‹è¡¥è¶³u   å�‘å¸ƒæ—¶é—´æœªçŸ¥r   r  u	   è¿‘ 7 å¤©é   u
   è¿‘ 30 å¤©u   æœ€è¿‘å�Šå¹´u   è¶…è¿‡å�Šå¹´)r  rü   r]   r  r  )r  Z
is_classicr
  r  r[   r[   r\   Úget_freshness_labelã  s    r  r   c                    sÜ   | › d|› �‰ d}|t ‡ fdd„tD ƒƒ7 }|t ‡ fdd„dD ƒƒ7 }|t ‡ fdd„tD ƒƒ7 }|t ‡ fdd„tD ƒƒ8 }t|ƒrºt|ƒ}|rštƒ | jnt}|t	d	d
t
|tƒd  ƒ7 }t‡ fdd„dD ƒƒrØ|d	7 }|S )Nr„   r   c                 3   s"   | ]}|  ¡ ˆ   ¡ krd V  qdS ©r´   Nr�   r±   rŽ   r[   r\   r¥   ö  s      z"practical_score.<locals>.<genexpr>c                 3   s   | ]}|ˆ   ¡ krd V  qdS r  r�   r±   rŽ   r[   r\   r¥   ÷  s      )	ÚtutorialÚguideÚsetupÚinstallÚbeginnerÚbasicszhands-onZdemoZwalkthroughc                 3   s"   | ]}|  ¡ ˆ   ¡ krd V  qdS )r   Nr�   r±   rŽ   r[   r\   r¥   ø  s      c                 3   s   | ]}|ˆ krd V  qdS )rµ   Nr[   r±   rŽ   r[   r\   r¥   ù  s      r´   é   r}   c                 3   s   | ]}|ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   þ  s     )õ   å…¥é—¨õ   æ–°æ‰‹õ   å°�ç™½õ	   é›¶åŸºç¡€õ   0åŸºç¡€r  r  zfrom scratch)ÚsumÚPRACTICAL_KEYWORDSÚTOOL_KEYWORDSÚLOW_VALUE_KEYWORDSr  r  r]   r  r  rü   r  r©   )r‹   Útagsr  Úscorer
  r  r[   rŽ   r\   Úpractical_scoreó  s    r#  c                    sÈ   | pd‰ |dkr¢t t ddˆ ¡ƒdk r*dS t‡ fdd„dD ƒƒrDdS t‡ fd	d„tD ƒƒr^dS t d
ˆ ¡rndS t‡ fdd„dD ƒƒ}t‡ fdd„dD ƒƒ}|o |S |dkrÄt‡ fdd„dD ƒƒrÄdS dS )Nr   r   rƒ   rV   Fc                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥     s     z'is_stage_appropriate.<locals>.<genexpr>)ÚmcpÚsubagentZ	subagentsu   å¤šagentõ   å¤šæ™ºèƒ½ä½“u   ç”Ÿäº§çŽ¯å¢ƒõ	   ç”Ÿäº§çº§u   æ‰©å±•å®žæˆ˜ZadapterZserverZ	langgraphZcrewr3   r4   r5   r6   r7   u   æ— æ³•ä½¿ç”¨çš„é—®é¢˜c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   
  s     u    å…¨\d+[é›†è®²]|[1-9]\d{2,}\s*é›†c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥     s     )ÚpythonZcliÚgitÚapiru   ÚollamaÚcodexúclaude codeú
gemini cliZagentÚllmu	   å¤§æ¨¡åž‹c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥     s     )r  r  rG   u   å®‰è£…rF   r   r   õ	   å‘½ä»¤è¡Œu   ä½¿ç”¨u   æŒ‡å�—u   ä»Žé›¶r  r  r  r  r  r  r  r¼   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥     s     )rL   rM   rN   Z	langchainZragr&  T)r«   r…   r†   r©   ÚSTAGE_BEGINNER_BLOCKLISTrª   )r‹   Ústage_indexZhas_toolZhas_simple_taskr[   rŽ   r\   Úis_stage_appropriate  s"    r3  c                    sp   dd„ |  d¡pg D ƒ}|s dS ddddd	d
ddh‰‡fdd„|D ƒ}|sN|}| pTd ¡ ‰ t‡ fdd„|D ƒƒS )Nc                 S   s$   g | ]}t t|ƒ ¡ ƒd kr|‘qS )r½   )r«   rï   rŠ   r±   r[   r[   r\   r³     s      z0title_matches_stage_keywords.<locals>.<listcomp>r¸   TZAIr1   r0   r   r  r   rG   u	   å­¦ä»€ä¹ˆc                    s   g | ]}|ˆ kr|‘qS r[   r[   r±   )Úweakr[   r\   r³     s      r   c                 3   s   | ]}t |ƒ ¡ ˆ kV  qd S r¢   )rï   rž   r±   rŽ   r[   r\   r¥      s     z/title_matches_stage_keywords.<locals>.<genexpr>)rØ   rž   r©   )r‹   Ústager¸   Z
meaningfulr[   )r�   r4  r\   Útitle_matches_stage_keywords  s    r6  c                    sH   | pd‰ |dks&t ‡ fdd„dD ƒƒr*dS t ‡ fdd„dD ƒƒrDd	S d
S )Nr   r¼   c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   %  s     z#infer_difficulty.<locals>.<genexpr>)r  r  r  r  r   r  c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   '  s     )rT   rU   u   å¤�æ�‚rL   rJ   rT   u   åˆ�çº§©r©   )r‹   r2  r[   rŽ   r\   Úinfer_difficulty#  s    r8  c                    sž  | pd‰ t ‡ fdd„dD ƒƒr"dS t ‡ fdd„dD ƒƒr<dS t ‡ fd	d„d
D ƒƒrVdS t ‡ fdd„dD ƒƒrpdS t ‡ fdd„dD ƒƒrŠdS t ‡ fdd„dD ƒƒr¤dS t ‡ fdd„dD ƒƒr¾dS t ‡ fdd„dD ƒƒrØdS t ‡ fdd„dD ƒƒròdS t ‡ fdd„dD ƒƒ�rd S t ‡ fd!d„d"D ƒƒ�r*d#S t ‡ fd$d„d%D ƒƒ�rFd&S t ‡ fd'd„d(D ƒƒ�rbd)S t ‡ fd*d„d+D ƒƒ�r~d,S t ‡ fd-d„d.D ƒƒ�ršd/S |S )0Nr   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   .  s     zinfer_track.<locals>.<genexpr>)r(  r)  ru   r*  r+  rF   r0  r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   0  s     )r/  Útokenz
openai apiu   æ¨¡åž‹è°ƒç”¨u   é”™è¯¯å¤„ç�†u   é‡�è¯•r
   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   2  s     )ÚpromptrI   zsystem promptzfew-shotZcotzchain of thoughtr   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   4  s     )r-  r,  r.  z	cli agentr   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   6  s     )r$  Zslashu	   å­�ä»£ç�†r%  r   r   c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   8  s     )z	CLAUDE.mdZSkillsu   æŠ€èƒ½u   é¡¹ç›®ä¸Šä¸‹æ–‡r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   :  s     )zgithub actionsu   æˆ�æœ¬u   å›¢é˜Ÿå��ä½œr'  r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   <  s     )zcontext engineeringzharness engineeringu   ä¸Šä¸‹æ–‡å·¥ç¨‹r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r¢   r�   r±   rŽ   r[   r\   r¥   >  s     )zagent interfacezweb uiu   äº§å“�è®¾è®¡u	   å·¥ä½œå�°u   è‡ªåŠ¨åŒ–é�¢æ�¿r   c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   @  s     )u   åŠžå…¬u   å‘¨æŠ¥u   ä¼šè®®r%   r&   r#   õ   AIåŠžå…¬è‡ªåŠ¨åŒ–c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   B  s     )rB   u   æ–‡æ¡ˆr   u	   çŸ­è§†é¢‘u   æ ‡é¢˜õ   AIå†…å®¹ç”Ÿäº§c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   D  s     )rP   rQ   u	   å•†å“�å›¾u   ä¸»å›¾rS   r   r    õ   AIè®¾è®¡/ç”µå•†ç´ æ��c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   F  s     )r"   u   è¡¨æ ¼u   æ•°æ�®r$   õ   AIæ•°æ�®æ•´ç�†c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   H  s     )r   r   r   r   u	   ä½Žä»£ç �õ   AIä½Žä»£ç �/è‡ªåŠ¨åŒ–å·¥ä½œæµ�c                 3   s   | ]}|ˆ kV  qd S r¢   r[   r±   rŽ   r[   r\   r¥   J  s     )õ   å�˜çŽ°õ   å‰¯ä¸šõ   æŽ¥å�•u   æ¡ˆä¾‹æ‹†è§£õ   AIå�˜çŽ°æ¡ˆä¾‹r7  )r‹   Zdefault_trackr[   rŽ   r\   Úinfer_track,  s@    rD  c                 C   s^  t | |d ƒ}|dkr"d}d}�n|dkr4d}d}nö|dkrFd	}d
}nä|dkrXd}d}nÒ|dkrjd}d}nÀ|dkr|d}d}n®|dkrŽd}d}nœ|dkr d}d}nŠ|dkr²d}d}nx|dkrÄd}d}nf|d krÖd!}d"}nT|d#krèd$}d%}nB|d&krúd'}d(}n0|d)k�rd*}d+}n|d,k�r"d-}d.}nd/}d0}|d1d2| d3d4¡ d5d4¡ d6d4¡ ¡ › �|||d7œS )8Nr	   r   uj   è·Ÿç�€è§†é¢‘å®Œæˆ�ä¸€ä¸ªæœ€å°�çŽ¯å¢ƒæ£€æŸ¥ï¼šå‘½ä»¤è¡Œã€�Python/Git/API/JSON æˆ– Ollama ä»»ä¸€é¡¹è·‘é€šã€‚u(   ä¸€ä»½ AI Agent å­¦ä¹ çŽ¯å¢ƒæ£€æŸ¥æ¸…å�•r
   ua   å¤�çŽ°ä¸€æ¬¡æ¨¡åž‹è°ƒç”¨æˆ–æœ¬åœ°/äº‘ç«¯æ¨¡åž‹å¯¹æ¯”ï¼Œå¹¶è®°å½•è¾“å…¥ã€�è¾“å‡ºã€�æŠ¥é”™å¤„ç�†ã€‚u   ä¸€ä»½ LLM è°ƒç”¨å®žéªŒè®°å½•r   uT   æ•´ç�† 3 ä¸ª System Prompt/Few-shot æ¨¡æ�¿ï¼Œå¹¶ç”¨å�Œä¸€ä»»åŠ¡æµ‹è¯•æ•ˆæžœå·®å¼‚ã€‚u   ä¸€å¥—å�¯å¤�ç”¨æ��ç¤ºè¯�æ¨¡æ�¿r   u`   ç”¨ Codexã€�Claude Code æˆ– Gemini CLI å®Œæˆ�ä¸€ä¸ªçœŸå®žå°�ä»»åŠ¡ï¼Œå¹¶è®°å½•å‘½ä»¤å’Œç»“æžœã€‚u    ä¸€ä¸ª CLI Agent å°�ä»»åŠ¡è®°å½•r   ul   æŠŠä¸€ä¸ªé‡�å¤�ä»»åŠ¡æ‹†æˆ�è¾“å…¥ã€�ä¸Šä¸‹æ–‡ã€�å‘½ä»¤ã€�è¾“å‡ºå››æ­¥ï¼Œå°�è¯•æŽ¥å…¥ MCP æˆ– Slash å‘½ä»¤ã€‚u#   ä¸€ä¸ªå�¯å¤�ç”¨ CLI Agent å·¥ä½œæµ�r   uZ   ä¸ºä¸€ä¸ªé¡¹ç›®å†™ä¸€ä»½ CLAUDE.md/å·¥ä½œè§„èŒƒï¼Œå¹¶æµ‹è¯•å®ƒæ˜¯å�¦èƒ½çº¦æ�Ÿ AI è¾“å‡ºã€‚u   ä¸€ä»½é¡¹ç›®çº§ AI å��ä½œè§„èŒƒr   u]   è®¾è®¡ä¸€ä¸ªå�¯å��ä½œçš„è‡ªåŠ¨åŒ–æµ�ç¨‹ï¼Œè®°å½•è§¦å�‘æ�¡ä»¶ã€�æˆ�æœ¬æŽ§åˆ¶å’Œå¤±è´¥å¤„ç�†ã€‚u&   ä¸€ä»½ç”Ÿäº§çº§ CLI Agent æµ�ç¨‹è�‰æ¡ˆr   uR   æŠŠ Promptã€�Contextã€�Harness ä¸‰å±‚åˆ†åˆ«æ˜ å°„åˆ°ä½ è‡ªå·±çš„ä¸€ä¸ªå·¥ä½œæµ�ã€‚u"   ä¸€å¼  Agent èƒ½åŠ›åˆ†å±‚æ‹†è§£è¡¨r   u^   ç”»å‡ºä¸€ä¸ªæœ€å°� Agent å…¥å�£ï¼šç”¨æˆ·è¾“å…¥ã€�å·¥å…·è°ƒç”¨ã€�ç»“æžœå±•ç¤ºå’Œä¿�å­˜è®°å½•ã€‚u(   ä¸€ä¸ªæœ€å°� Agent å·¥ä½œå�°å…¥å�£æ–¹æ¡ˆr;  uE   è·Ÿç�€è§†é¢‘å�šä¸€ä»½å�¯å¤�ç”¨çš„åŠžå…¬æ��ç¤ºè¯�æˆ–è‡ªåŠ¨åŒ–æµ�ç¨‹ã€‚u8   ä¸€ä¸ªå�¯å¤�åˆ¶çš„å‘¨æŠ¥/ä¼šè®®çºªè¦�/é‚®ä»¶å¤„ç�†æ¨¡æ�¿r<  uB   ç”¨è§†é¢‘é‡Œçš„æ–¹æ³•ç”Ÿæˆ� 5 ä¸ªæ ‡é¢˜å’Œ 1 æ®µçŸ­è§†é¢‘è„šæœ¬ã€‚u3   ä¸€å¥—å°�çº¢ä¹¦æ ‡é¢˜æ¨¡æ�¿æˆ–çŸ­è§†é¢‘è„šæœ¬è�‰ç¨¿r=  u6   æŒ‰è§†é¢‘æµ�ç¨‹å�šä¸€å¼ å•†å“�å›¾ã€�å°�é�¢æˆ–æµ·æŠ¥ã€‚u-   ä¸€å¼ å�¯å�‘å¸ƒçš„å•†å“�ä¸»å›¾æˆ–å†…å®¹å°�é�¢r>  u<   ç”¨ç¤ºä¾‹è¡¨æ ¼å¤�çŽ°ä¸€æ¬¡æ¸…æ´—ã€�åˆ†ç±»æˆ–æ‘˜è¦�æµ�ç¨‹ã€‚u*   ä¸€ä»½æ•´ç�†å�Žçš„è¡¨æ ¼å’Œæ“�ä½œæ��ç¤ºè¯�r?  uK   æ�­ä¸€ä¸ªæœ€å°�å�¯ç”¨å·¥ä½œæµ�ï¼Œå�ªä¿�ç•™è¾“å…¥ã€�å¤„ç�†ã€�è¾“å‡ºä¸‰æ­¥ã€‚u%   ä¸€ä¸ªå�¯è¿�è¡Œçš„ç®€å�• AI å·¥ä½œæµ�rC  u?   æ‹†è§£è§†é¢‘ä¸­çš„äº¤ä»˜ç‰©ã€�å®¢æˆ·ã€�æµ�ç¨‹å’ŒæŠ¥ä»·æ–¹å¼�ã€‚u   ä¸€ä»½ AI å�˜çŽ°æ¡ˆä¾‹å¤�ç›˜è¡¨uH   æŠŠè§†é¢‘ä¸­çš„æ��ç¤ºè¯�æ–¹æ³•å¤�çŽ°ä¸€é��ï¼Œå¹¶ä¿�å­˜å�¯å¤�ç”¨æ¨¡æ�¿ã€‚u%   ä¸€ä¸ªå�¯å¤�ç”¨çš„ AI æ��ç¤ºè¯�æ¨¡æ�¿u_   æ ‡é¢˜åŒ…å�«æ˜Žç¡®å®žæ“�/æ•™ç¨‹/å·¥å…·çº¿ç´¢ï¼Œé€‚å�ˆæŒ‰æ­¥éª¤è·Ÿå�šï¼Œä¸�æ˜¯çº¯æ¦‚å¿µå†…å®¹ã€‚u   çœ‹å®Œåº”èƒ½æŽŒæ�¡ï¼šu   è·Ÿç�€è§†é¢‘r   u   æŒ‰è§†é¢‘æµ�ç¨‹u   ç”¨è§†é¢‘é‡Œçš„æ–¹æ³•)r	   ZwhyWatchZpracticalValueZpracticeTaskZoutputExampleÚpriority)rD  r“   rŠ   )r‹   r5  rE  r	   ZtaskÚoutputr[   r[   r\   Úbuild_learning_fieldsO  sn    

$úrG  c                 C   sÖ  g a dddg}t|d ƒ| dkr$|nt }g }tƒ }|D �]„}dD �]x}dD �]l}dtj d	||d
|dœ¡ }	zt|	dtj |¡ d�}
W nP t	k
rÚ } z2t
|ƒj› d|› �}|t krÂt  |¡ W Y ¢qLW 5 d }~X Y nX |
 d¡dkrìqL|
 d¡pøi  d¡�pg D �]°}t| d¡ƒ}| d¡�p(d}|�r<d|› d�nt| d¡�pLdƒ dd¡}|�rd|k�s||k�rv�qt|| ƒ�s†�qt||ƒ�s–�qt| d¡ƒ�sª�qt| d¡�pºdƒ}t||| d¡ƒ}|dk �rÞ�qt| d¡ƒ}t| d¡ƒ}|�pt d d|¡d!d … d"||t|| ƒ||||d d | d#¡�p<d| d$¡�pJd d%d&„ t d'|¡D ƒd d(… tƒ || d¡�pzd t| d¡ƒt| d¡ƒd)|d)d d*d+œ}| |¡ | |¡ �qqLqBq8|jd,d-„ d.d/� |S )0Nu   ChatGPT åŠžå…¬ å�˜çŽ° æ¡ˆä¾‹u   AI æ��ç¤ºè¯� å�˜çŽ° æ¡ˆä¾‹u   Kimi AI åŠžå…¬ æ•ˆçŽ‡ æ¡ˆä¾‹r   r   )r  Z	totalrank)r¼   r½   r   z5https://api.bilibili.com/x/web-interface/search/type?Úvideor  )Zsearch_typer®   ré   Z	page_sizeÚorderz(https://search.bilibili.com/all?keyword=rg   z: ÚcoderÛ   Úresultr‹   Úbvidr   zhttps://www.bilibili.com/video/ú/Zarcurlzhttp://zhttps://zbilibili.com/videor  Útagr´   ZplayZlikeú\W+iìÿÿÿõ   Bç«™ÚauthorÚdurationc                 S   s   g | ]}|r|‘qS r[   r[   )rŸ   Útr[   r[   r\   r³   Á  s      z$collect_bilibili.<locals>.<listcomp>u
   [,ï¼Œ#\s]+r   FuK   Bç«™å…¬å¼€æ�œç´¢æŽ¥å�£æŠ“å�–ï¼›ç²‰ä¸�æ•°æœªç¨³å®šèŽ·å�–æ—¶ä¿�ç•™ä¸º nullã€‚©ÚidÚplatformr‹   ry   Ú
difficultyÚplaysÚ	playCountÚlikesÚ	likeCountÚfansÚfollowerCountrQ  rR  r!  Ú
capturedAtÚsourceQueryr  ÚpublishedAtÚfreshnessLabelÚ	isClassicr"  Ú	completedÚcompletedAtrè   c                 S   s(   |   d¡pd|   d¡pd|   d¡p$dfS ©Nr"  r   rX  rZ  ©rØ   ©Úvr[   r[   r\   Ú<lambda>Ï  ó    z"collect_bilibili.<locals>.<lambda>T©ÚkeyÚreverse)ÚLAST_BILIBILI_ERRORSrÁ   ÚMONETIZATION_QUERIESÚsetrq   ÚparseÚ	urlencoder|   ZquoterÙ   ÚtypeÚ__name__r§   rØ   rŒ   rï   r“   r3  r6  r  r#  rò   r…   r†   r8  rÈ   r_   r  r  ÚaddÚsort)r2  r5  Zbeginner_monetizationr   ÚresultsÚseenÚqueryrI  ré   ry   rÛ   rê   ÚerrÚitemr‹   rL  Z	video_urlZtag_textr"  rX  rZ  Úrecr[   r[   r\   Úcollect_bilibili‹  s†    



ÿ
 .
è
r}  c              	   C   sü   t  | p
d¡ dd¡} tj | ¡}tj |j¡}dD ]š}| |¡pFd gd }|sRq4tj 	|¡}| 
d¡r¼|dd … }z2dt|ƒ d	  }t ||  d
¡¡ dd¡}W n tk
rº   Y nX | 
d¡r4|  S q4tjd| tjd�}|røtj 	| d¡¡S | S )Nr   ú\/rM  )Úury   rÏ   r   Za1r½   r÷   r´   Úasciiro   rp   Úhttpzhttps?%3A%2F%2F[^&\"'<>]+r€   )rˆ   r‰   r“   rq   rq  ÚurlparseÚparse_qsry  rØ   Úunquoterû   r«   Úbase64Zurlsafe_b64decodeÚencoderx   rÙ   r…   rª   r‡   rÇ   )ry   Úparsedry  rl  rñ   ZencodedZpaddingZencoded_urlr[   r[   r\   Údecode_possible_bing_urlÓ  s*    
 

rˆ  c                 C   s”  t | ƒ} tj t | pd¡¡ dd¡} |  d¡s4dS tj | ¡}|j	 
¡ }|j}tj |j¡}|dkrºd|kr�|dkr�| d¡r�d	|d d
  S d|krº| d¡rºd| d¡ d¡d
  S |dk�r$d|krêtj d|j	|jd|jdf¡S d|k�r$d|k�sd|k�r$tj d|j	|jdddf¡S |dk�r�d|k�rVtj d|j	|jd|jdf¡S d|k�r�d|k�std|k�r�tj d|j	|jdddf¡S dS )Nr   r~  rM  r�  rA   zyoutube.comz/watchrh  z https://www.youtube.com/watch?v=r   r9   zhttps://youtu.be/rB   r>   Zhttpszxiaohongshu.comz	/explore/z/discovery/item/rC   r?   z
douyin.comz/video/z/note/)rˆ  rq   rq  r„  rˆ   r‰   r“   rû   r‚  Znetlocrž   Úpathrƒ  ry  rØ   rŠ   rÈ   Z
urlunparse)ry   rV  r‡  Zhostr‰  ry  r[   r[   r\   Únormalize_platform_urlë  s0    




rŠ  c                 C   sH   g }t jd| pdt jt jB d�D ]"\}}t|ƒ}|r | ||f¡ q |S )Nz0<a\b[^>]*href=["\']([^"\']+)["\'][^>]*>(.*?)</a>r   r€   )r…   r¨   r‡   r�   rŒ   r§   )rÊ   ZanchorsÚhrefr‹   Zcleanr[   r[   r\   Úparse_search_anchors  s    $rŒ  r´   c                    s"  t | }g }tƒ }t| d¡p g ƒd d… }|D �]Ø}t|ƒ|krH �q|d d }	d|	› d|› �}
dtj |
dd	œ¡ }zt|d
dd�}W n t	k
r¤   Y q0Y nX t
|ƒD �]X\}}t||ƒ‰ ˆ r®ˆ |krÐq®t‡ fdd„dD ƒƒrèq®|dk�rdˆ k�rdˆ k�rq®|dk�r0t‡ fdd„|d D ƒƒ�s0q®t|| ƒ�s>q®t||ƒ�sLq®t||ƒ}|dk �rbq®t| d¡�prg ƒd d… }t ddˆ ¡dd … ||ˆ t|| ƒd d d d d d d d |�p¾dddgtƒ |
d d dd|dd |d › d �d!œ}| |¡ | ˆ ¡ t|ƒ|kr® q0q®q0|jd"d#„ d$d%� |S )&Nr   r´   r;   r   zsite:r„   zhttps://www.bing.com/search?zzh-CN)r¹   Zsetlangé   zhttps://www.bing.com/rÞ   c                 3   s   | ]}|ˆ   ¡ kV  qd S r¢   r�   )rŸ   Zblocked©Zreal_urlr[   r\   r¥   "  s     z'collect_web_platform.<locals>.<genexpr>)úkuaishou.comúgifshow.comrA   r8   r:   c                 3   s   | ]}|ˆ kV  qd S r¢   r[   )rŸ   ÚpatternrŽ  r[   r\   r¥   &  s     r<   r   r¸   rO  r   ièÿÿÿõ   AIå­¦ä¹ r1   r   u   å…¬å¼€æ�œç´¢ç»“æžœFr=   u>   æŠ“å�–ï¼›å…¬å¼€è§†é¢‘æŒ‡æ ‡æœªç¨³å®šèŽ·å�–æ—¶ä¿�ç•™ä¸º nullã€‚rT  c                 S   s   |   d¡pdt|   dd¡ƒfS )Nr"  r   r‹   r   )rØ   r«   rg  r[   r[   r\   ri  N  rj  z&collect_web_platform.<locals>.<lambda>Trk  )ÚPLATFORM_SPECSrp  rÁ   rØ   r«   rq   rq  rr  r~   rÙ   rŒ  rŠ  r©   r3  r6  r#  r…   r†   r8  r_   r§   ru  rv  )r2  r5  rV  Úmax_resultsÚspecrw  rx  r   ry  ZsiteZsearch_queryry   ré   r‹  r‹   r"  r¸   r|  r[   rŽ  r\   Úcollect_web_platform  s~    


&

è

r–  c           	      C   sÎ   g }t ƒ }t ƒ }ddddh}| D ]¨}| d¡|kr4q t| d¡pBdƒ}d| ¡ ks d	| ¡ kr`q t| d
¡ƒ}t dd| ¡ ¡d d… }|r |r ||ks ||kr¢q ||d
< | |¡ | |¡ | |¡ q |S )NrP  rA   rB   rC   rV  ry   r   r�  r�  r‹   rO  é"   )	rp  rØ   rï   rž   rŒ   r…   r†   r§   ru  )	Úvideosr”   Z	seen_urlsZseen_titlesZallowed_platformsrH  ry   r‹   Z	key_titler[   r[   r\   ÚdedupeR  s&    

r™  c                 C   s>   | sg S t dt|pdƒƒ| t| ƒ }| |d … | d |…  S )Nr   )rü   re   r«   )r’   Úrefresh_offsetÚsteprÄ   r[   r[   r\   Úrotate_itemsh  s    rœ  c                    s¨  t | dd„ dd�} dd„ | D ƒ}dd„ | D ƒ}dd„ |D ƒ‰ ‡ fd	d„|D ƒ}t||d
d�}tˆ |dd�‰ t||dd�}g ‰dD ],‰t‡‡fdd„|D ƒd ƒ}|r€ˆ |¡ q€ˆ ‡fdd„|d d… D ƒ¡ ˆ ‡fdd„|dd
… D ƒ¡ ˆ ˆ d d… ¡ || D ].}tˆƒtk�r  �q8|ˆk�rˆ |¡ �qˆd t… ‰tˆƒD ]V\}}	|	 d¡�rfd}
n |dk �rtdn|d
k �r‚dnd}
|	 	t
|	 dd¡||
ƒ¡ �qLˆS )Nc                 S   s(   |   d¡pd|   d¡pd|   d¡p$dfS re  rf  rg  r[   r[   r\   ri  p  rj  z#assign_priorities.<locals>.<lambda>Trk  c                 S   s   g | ]}|  d ¡s|‘qS ©rb  rf  ©rŸ   rh  r[   r[   r\   r³   q  s     
 z%assign_priorities.<locals>.<listcomp>c                 S   s   g | ]}|  d ¡r|‘qS r�  rf  rž  r[   r[   r\   r³   r  s     
 c                    s&   g | ]‰ t ‡ fd d„dD ƒƒrˆ ‘qS )c                 3   s   | ]}|ˆ   d d¡kV  qdS )r‹   r   Nrf  r±   rg  r[   r\   r¥   s  s     z/assign_priorities.<locals>.<listcomp>.<genexpr>)r@  rA  rB  r   r   r7  )rŸ   r[   rg  r\   r³   s  s      c                    s   g | ]}|ˆ kr|‘qS r[   r[   rž  )Úmonetizationr[   r\   r³   t  s      rV   )r›  r½   r´   )rP  rA   rB   rC   c                 3   s(   | ] }|  d ¡ˆ kr|ˆkr|V  qdS )rV  Nrf  rž  )rV  Úselectedr[   r\   r¥   z  s       z$assign_priorities.<locals>.<genexpr>c                    s   g | ]}|ˆ kr|‘qS r[   r[   rž  ©r   r[   r\   r³   }  s      r   c                    s   g | ]}|ˆ kr|‘qS r[   r[   rž  r¡  r[   r\   r³   ~  s      rb  u   ç»�å…¸æ•™ç¨‹u   ä»Šæ—¥å¿…çœ‹u   å�¯é€‰æ‹“å±•u   å�˜çŽ°æ¡ˆä¾‹r‹   r   )Úsortedrœ  Únextr§   Úextendr«   ÚTARGET_DAILY_VIDEOSrÃ   rØ   ÚupdaterG  )r˜  r5  rš  Zfresh_videosZclassic_videosZnormalZpickrh  rÌ   rH  rE  r[   )rŸ  rV  r   r\   Úassign_prioritieso  s8      
 r§  c                 C   sr   t ƒ }g }tD ]^\}}}| | d¡ d¡d d||dd d d d d d d d dddg|dd d d	d
ddd d|dœ¡ q|S )NrM  r¾   rP  r  r’  rI   õ   æ–°æ‰‹å…¥é—¨zpublic search fallbackr  Tr¼   Fuƒ   ç»�å…¸æ•™ç¨‹è¡¥è¶³ï¼šå½“æœ€è¿‘å�Šå¹´å†…å�¯éªŒè¯�å®žæ“�è§†é¢‘ä¸�è¶³æ—¶ä½¿ç”¨ï¼›å…¬å¼€è§†é¢‘æŒ‡æ ‡æœªç¨³å®šèŽ·å�–æ—¶ä¿�ç•™ä¸º nullã€‚)rU  rV  r‹   ry   rW  rX  rY  rZ  r[  r\  r]  rQ  rR  r!  r^  r_  r  r`  ra  rb  r"  rc  rd  rè   r	   )r_   ÚBEGINNER_FALLBACK_VIDEOSr§   ÚrstriprÈ   )r5  Úcapturedr˜  r‹   ry   r	   r[   r[   r\   Úfallback_beginner_videos�  s>    ç
r¬  c                 C   s”   t ƒ }g }tD ]€\}}}}t|dƒs&qt|| ƒs2q| | d¡ d¡d d||dd d d d d d d d dddg|d	d d d
ddddd |› d�|dœ¡ q|S )Nr   rM  r¾   rP  r  r’  rI   r¨  zvalidated recent search seedu   æœ€è¿‘å�Šå¹´ï¼ˆæ�œç´¢éªŒè¯�ï¼‰FTr�  u8   ï¼›å…¬å¼€è§†é¢‘æŒ‡æ ‡æœªç¨³å®šèŽ·å�–æ—¶ä¿�ç•™ä¸º nullã€‚)rU  rV  r‹   ry   rW  rX  rY  rZ  r[  r\  r]  rQ  rR  r!  r^  r_  r  r`  ra  rb  ZvalidatedRecentr"  rc  rd  rè   r	   )r_   ÚRECENT_VALIDATED_SEED_VIDEOSr3  r6  r§   rª  rÈ   )r5  r«  r˜  r‹   ry   r	   Zfreshness_noter[   r[   r\   Úrecent_validated_seed_videos±  sH    

æ
r®  c                  C   sÞ  t ƒ } tƒ }| d krtƒ n| }g }t|ƒ\}}t||ƒ\}}g }zNt||ƒ}	| |	¡ | dt|	ƒ› d�¡ t	rŒ| dd 
t	d d… ¡ ¡ W n2 tk
rÀ }
 z| d|
› �¡ W 5 d }
~
X Y nX dD ]Ž}zPt|||dd	�}| |¡ |�r| |› d
t|ƒ› d�¡ n| |› d�¡ W qÆ tk
�rR }
 z| |› d|
› �¡ W 5 d }
~
X Y qÆX qÆt|ƒ}|dk�r�t|ƒtk �r�| d¡ t|t|ƒ ƒ}|dk�rÂt|ƒtk �rÂ| d¡ t|t|ƒ ƒ}t|||d�}t|ƒtk �rú| dt› dt|ƒ› d�¡ | dt› dt› d�¡ | d¡ | dt› d�¡ tƒ dd|td | d¡�pLg | d¡�pZg |d ||||d  ttd 
|¡|d!œ}ttd"d#d$��}tj||d%d&d'� W 5 Q R X ttjt|ƒdkt|ƒt|d |d(œd%d)�ƒ d S )*Nu6   Bç«™æŒ‰å½“å‰� Stage å…³é”®è¯�æ�œç´¢ï¼Œå†™å…¥å‰�å€™é€‰ u    æ�¡ã€‚u   Bç«™æŽ¥å�£éƒ¨åˆ†è¯·æ±‚å¤±è´¥ï¼šu   ï¼›r   u   Bç«™å…¬å¼€æ�œç´¢æŠ“å�–å¤±è´¥ï¼šr@   r´   )r”  u*    æŒ‰å½“å‰� Stage å…³é”®è¯�æ�œç´¢ï¼Œæ‹¿åˆ° u    æ�¡çœŸå®žå¹³å�°é“¾æŽ¥ã€‚uf    å·²æŒ‰å½“å‰� Stage å…³é”®è¯�æ�œç´¢ï¼Œä½†å…¬å¼€æ�œç´¢ç»“æžœæœªè¿”å›žå�¯éªŒè¯�çš„è§†é¢‘/ç¬”è®°é“¾æŽ¥ã€‚u    å…¬å¼€æ�œç´¢æŠ“å�–å¤±è´¥ï¼šr   u§   å½“å‰� Stage å�¯éªŒè¯�å…¬å¼€è§†é¢‘å°‘äºŽ 3 æ�¡æ—¶ï¼Œå�ªè¡¥å…¥ä¸Žå½“å‰� Stage å…³é”®è¯�åŒ¹é…�çš„å·²éªŒè¯� Bç«™æ–°æ‰‹å®žæ“�è§†é¢‘ï¼›ä¸�å†�ä¸ºäº†å‡‘ 10 æ�¡æ”¾å®½ä¸»é¢˜ã€‚u”   å½“å‰� Stage ç›¸å…³çš„æœ€è¿‘å�Šå¹´å…¬å¼€è§†é¢‘ä»�ä¸�è¶³ 3 æ�¡ï¼Œå·²ç”¨ä¸»é¢˜åŒ¹é…�çš„ç»�å…¸æ•™ç¨‹è¡¥è¶³å¹¶åœ¨å�¡ç‰‡æ ‡æ³¨â€œç»�å…¸æ•™ç¨‹è¡¥è¶³â€�ã€‚)rš  u2   å…¨å¹³å�°å½“å‰� Stage å�¯éªŒè¯�å®žæ“�è§†é¢‘ä¸�è¶³ u    æ�¡ï¼Œæœ¬æ¬¡ä»…ä¿�ç•™ u    æ�¡çœŸå®žä¸”è´´å�ˆçš„é“¾æŽ¥ã€‚uQ   æœ¬æ¨¡å�—ä¸�å†�å›ºå®š 10 æ�¡ï¼›ä¼˜å…ˆä¿�è¯�å½“å‰� Stage è´´å�ˆåº¦ï¼Œç›®æ ‡æ¯�å¤© rí   u„   YouTube/å°�çº¢ä¹¦/æŠ–éŸ³å…¬å¼€æ�œç´¢ç¨³å®šæ€§è¾ƒå·®ï¼Œæœªæ‹¿åˆ°å�¯éªŒè¯�çœŸå®žè§†é¢‘æˆ–ç¬”è®°é“¾æŽ¥æ—¶ä¸�å†™å…¥ï¼›ä¸�æŽ¨è��å¿«æ‰‹ã€‚u   å¸¸è§„æŽ¨è��å�ªä¿�ç•™æœ€è¿‘ u›    å¤©å†…çš„è§†é¢‘ï¼›å·²è¿‡æ»¤æ˜Žæ˜¾å�–è¯¾ã€�æ ‡é¢˜å…šã€�çº¯èµ„è®¯ã€�çº¯æ¦‚å¿µæˆ–æ— å®žæ“�æŒ‡å�‘çš„å†…å®¹ï¼›æ’­æ”¾é‡�/ç‚¹èµž/ä½œè€…æ‹¿ä¸�åˆ°æ—¶ä¿�ç•™ nullã€‚z4agent.codepost.site live Stage + public video searchu9   AI Agent å­¦ä¹ è·¯çº¿å›¾ï¼ˆagent.codepost.site/#stagesï¼‰r¿   r¸   r   r   r   )rß   Úsourcer	   ÚstageSourceZstageSourceUrlZstageKeywordsZstageQueriesr5  Z
stageIndexZcompletedCountBasisZrefreshOffsetr   ZminDailyVideosZtargetDailyVideosrè   r˜  rà   ro   rÑ   Fr½   rá   )ÚokÚcountr‰  r5  r°  )râ   )rÿ   r   rö   rì   r  r}  r¤  r§   r«   rn  r¶   rÙ   r–  r™  ÚMIN_DAILY_VIDEOSr®  r¬  r§  r¥  r  r_   rÉ   rØ   rÓ   ÚOUTPUT_PATHru   ræ   ÚprintÚdumps)Z	arg_countrš  r  rè   Zlive_stagesZstage_sourcer2  r5  r˜  Zbili_videosrê   rV  Zplatform_videosrÛ   rÚ   r[   r[   r\   ÚmainØ  sr    

 "
(


ðr·  Ú__main__)r`   )rj   r`   )r}   N)rV   )N)F)r   N)r´   )rV   )r   )OrX   r…  rˆ   ru   Úosr…   rù   rf   rb   Zurllib.parserq   Zurllib.requestr‰  ÚdirnameÚabspathÚ__file__Z	WORKSPACEr¶   r´  rõ   rÉ   rÔ   r³  r¥  r  rç   ro  r©  rn  r­  r  r  r   r“  r¦   r‘   r1  r]   r_   ri   r|   r~   rŒ   r�   r•   r›   rœ   r°   r»   rÎ   rÜ   rì   rò   rö   rÿ   r   r  r  r  r  r  r#  r3  r6  r8  rD  rG  r}  rˆ  rŠ  rŒ  r–  r™  rœ  r§  r¬  r®  r·  rt  r[   r[   r[   r\   Ú<module>   s¾  ù	ôûöûöûöûöûöûöûöûö�rýö	ýýýõ                         ø



	





	

	#<H	
C

 "'>
