«ھەر كۈنى رىقابەتچىنىڭ يېڭىلىقىنى كۆزىتىپ، ئالدىنقى قېتىمدىن كېيىنكىسىنىلا رەتلەپ Feishu غا ئەۋەت»، «بىر نەچچە مەنبەنىڭ يېڭى مەزمۇنىنى ئېلىپ بىلىم ئامبىرىغا سال»، «يەرلىك ھۆججەتلەرنى رەتلەپ ھەپتىلىك دوكلات قىل» — بۇ تەكرار، مېخانىكىلىق، بەلگىلىك ۋاقىتتا بولىدىغان ئىشلار ئىلگىرى cron script، Zapier / IFTTT ۋە ھېچكىم ئاسرىغۇسى كەلمەيدىغان ئۇلىغۇچ كودلارغا تارقالغان.
AI Agent چىققاندىن كېيىن بۇ ئىشنىڭ كىرىشى بىر جۈملىگە چۈشۈشى كېرەك:نىيىتىڭىزنى ئېيتىسىز، بۆلۈش، ئىجرا ۋە ئاخىرلاشتۇرۇشنى ئۆزى قىلىدۇ. نەتىجەسىز دېگەندەك بىر تەرەپ قىلىنىدۇ— سىزگە، توپقا ئەۋەتىش ياكى ھۆججەت ساقلاش بولسۇن. ئەڭ قىممەتلىك بىر ئۇسۇلىAgent نىڭ ئۆز بىلىم ئامبىرى ۋە ئەستە ساقلىشىغا قايتا يېزىش، ئۆزىنى سانلىق مەلۇمات بىلەن باقۇپ، ئىجرا قىلغانسېرى يېڭىلىنىپ، سىزنى تېخىمۇ چۈشىنىش. ئاددىي ئېيتساق، 7×24 چارچىمايدىغان، ئۆزى ئىقتىدار توپلايدىغان «رەقەملىك ئىش ھايۋىنى» بېقىش.
«بىر جۈملە دېيىش»تىن «يىل بويى ئىشەنچلىك تاماملاش»قىچە بىر قاتار قىيىن ئىنژېنېرلىق مەسىلىسى بار. بۇ ماتورنىڭ قىلىدىغىنىتەبىئىي تىلدىكى بىر جۈملىنى ئۆزىنى ئوڭشايدىغان قۇم ساندۇقى script ىغا تۈزۈش، ھەمدە ئىشنى script ياكى Agent ئىجرا قىلىشىنى ئاپتوماتىك بەلگىلەش。
بۇ ماقالە «AI ئاپتوماتلاشتۇرۇشقا ياردەم بېرىدۇ» دېگەن توغرا، ئەمما قۇرۇق گەپنى ئەمەس،Agent «ۋاقىتلىق ئىش»نى ھەقىقىي ئۈستىگە ئېلىشى ئۈچۈن قايسى ئىنژېنېرلىق مەسىلىسىنى ھەل قىلىش كېرەكلىكىنىلا چۇۋۇيدۇ。
ماقالىنىڭ ئاساسلىق قارىشى
Agent ۋاقىتلىق ۋەزىپىنى ئۈستىگە ئالغاندا بىرىنچى، ئەڭ مۇھىم لايىھە قارارى:ھەر قېتىم ۋاقىت كەلگەندە چوڭ مودېلنى بىر قېتىم چاقىرىش كېرەكمۇ؟
HexClaw نىڭ جاۋابىياق— ۋەزىپە قۇرغاندا LLM نى بىر قېتىم چاقىرىپ، سۆزىڭىزنىscript قا تۈزۈيدۇ؛ كېيىن ھەر ئىجراسىدا بۇ ئېنىق كود يۈرىدۇ، ئىجرا مەزگىلىدە مودېل بىر قېتىممۇ چاقىرىلمايدۇ.
بۇ بىر قارار تۆۋەندە جاۋاب بېرىشكە تېگىشلىك تۆت سوئالنى مەجبۇر چىقاردى. ماقالە شۇ تۆت جاۋاب.
ئالدى بىلەن بەلگىلەيلى: ھەر قېتىم تەپەككۇر ئەمەس، بىر قېتىم تۈزۈش
ۋاقىتلىق ۋەزىپىنىڭ ئەڭ ئاددىي AI ئىجراسى:ھەر ۋاقىت كەلگەندە ۋەزىپە تەسۋىرىنى چوڭ مودېلغا بېرىپ، شۇ يەردە ئويلىتىپ قىلدۇرۇش. بۇ ئىشلەيدۇ، ئەمما بەدىلى بەك چوڭ؛ ھەر ئىجرا تولۇق بىر LLM چاقىرىش: پۇل، تور، ئاستىلىق، يەنەئېنىقسىزلىق. ئوخشاش «رەت تەرتىپىنى ئال» بۈگۈن توغرا، ئەتە مودېل تەۋرىسە خاتا بولىدۇ. سائىتىگە بىر قېتىم ۋەزىپە ئايدا 720 سۆھبەت، ئەمما قىلىدىغىنى ئوخشاش مېخانىكىلىق ئىش. قوپال ھېساب: ھەر ئايلانما بىر نەچچە مىڭ token، ئاساسىي بۇلۇت مودېل باھاسىدا،بىر ۋەزىپىنىڭلا ئايلىق «يۈرەك سوقۇش چىقىمى» بىر نەچچە يۈەندىن نەچچە ئون يۈەنگىچە؛ ۋەزىپە كۆپەيسە ياكى تېخىمۇ تېز بولسا چىقىم سىزىقلىق ئۆسىدۇ. تۈزۈش ئۇسۇلى بۇنىبىۋاسىتە نۆل قىلىدۇ— پەقەت قۇرغاندا بىر قېتىم قالىدۇ. (بۇ مىقدار دەرىجىسى مۆلچەرى، ھەقىقىي ئۆلچەش ئەمەس؛ سان مودېل ۋە token مىقدارىغا قاراپ ئۆزگىرىدۇ.)
HexClaw بۇ ئىشنىۋاقىت ئوقىدائىككىگە بۆلىدۇ: قۇرۇش مەزگىلى ۋە ئىجرا مەزگىلى. تۈزگۈچ كېلىشىمى بىۋاسىتە يېزىلغان (cron/compiler.go):
// JobSpecCompiler ئىشلەتكۈچىنىڭ تەبىئىي تىلدىكى تەلىپىنى ئىجرا بولىدىغان JobSpec قا تۈزۈيدۇ (بىر قېتىملىق LLM چاقىرىش).// ئىجرا تەلىپى:// - قۇرۇش مەزگىلىدە بىر قېتىم token سەرپ قىلىش، ئىجرا ۋاقتىدا LLM چاقىرماسلىق// - مەغلۇبىيەت خاتالىق قايتۇرۇپ ئامبارغا كىرىشنى رەت قىلسۇن، قۇرۇق Spec ئىجرا ۋاقتىغا كىرمىسۇن// - چىققان script validators.go بىخەتەرلىك تەكشۈرۈشىدىن ئۆتسۇنمۇشۇ ئۈچ قۇر پۈتۈن ماتورنىڭ خاراكتېرىنى بەلگىلىدى:
- چىقىم— قۇرغاندا token بىر قېتىم، كېيىن ئون مىڭ قېتىم ئىجرا بولسىمۇ نۆل. يۇقىرى چاستوتىلىق ۋەزىپىنىڭ قوشۇمچە چىقىمى سىزىقلىق ئەمەس، 0. (تېجەلگىنىئىجرا مەزگىلىدىكىtoken؛ تۈزگەن بىر قېتىملىق ھېسابلاش — بۇلۇت مودېلىدا يىراقتا، يەرلىك مودېلدا ئۆز CPU/GPU ڭىزدا — يەنىلا سەرپ بولىدۇ، پەقەت «ھەر قېتىم»دىن «بىر قېتىم»غا ئۆزگىرىدۇ.)
- تورسىز— script پەقەت قۇم ساندۇقىنىڭ ئىچىدىكى ئىقتىدارنى ئىشلىتىدۇ، ئىجرا ۋاقتى مودېلنىڭ توردا بولۇشىغا تايانمايدۇ. بۇلۇت ئۈزۈلسە، API key ۋاقتى ئۆتسە، تۈزۈلگەن ۋەزىپە داۋاملىق ئىجرا بولىدۇ.
- ئېنىقلىق— ئوخشاش script نىڭ بۈگۈن-ئەتە لوگىكىسى ئوخشاش، مودېل تەۋرىنىشى بىلەن ئۆزگەرمەيدۇ.
- تەكشۈرگىلى بولۇش— مەھسۇلات كۆرەلەيدىغان، ئوقۇيالايدىغان، ئۆزگەرتەلەيدىغان كود، قارا قۇتا ئەمەس. ئۆز ماشىنىڭىزدا ئادەمسىز ئىجرا بولىدىغان ئاپتوماتىك سىستېمىغا بۇ ئالاھىدە مۇھىم.
«نىيەتنى چۈشىنىش» بىلەن «ۋەزىپە ئىجراسى»نى ۋاقىتتا ئايرىش —تۈزۈش مەزگىلىدە token بىر قېتىم، ئىجرا مەزگىلىدە بىر قېتىممۇ يوق. ماتور پايدىلىرىنىڭ ئورتاق مەنبەسى مۇشۇ.
تۈزۈلگەن شۇ دەقىقىدە نېمە قىلىدۇ؟
تۈزۈش temperature = 0ئىشلىتىدۇ (مۇقىملىق كېرەك، ئىجادىيلىق ئەمەس)، مودېل نىيەتنى ساپ JSON غا ئايلاندۇرىدۇ: runtime + script + ۋاقىت چېكى. ئىككى ئىنژېنېرلىق تەپسىلات:
- تۈزۈش مودېلى سىزگە ئەگىشىدۇ— قوزغالغاندا قاتۇرۇلمايدۇ، ھەر تۈزۈشتە «ھازىرقى سۈكۈت مودېلىڭىز» ھەرىكەتچان يېشىلىدۇ. UI دا بۇلۇتتىن يەرلىك Ollama غا ئۆتسىڭىز، كېيىنكى تۈزۈش دەرھال ئەگىشىدۇ، قايتا قوزغىتىش ھاجەتسىز.
- تۈزۈش مەغلۇپ بولسا ئامبارغا كىرىش رەت— يېرىم پۈتكەن script ئىجرا ۋاقتىغا كىرمەيدۇ؛ كېچىدە پارتلىمايدىغان ئوق قالدۇرغاندىن، قۇرغاندا خاتانى كۆرسەتكەن ياخشى. (تۈزۈش چاقىرىشىدا 5xx / ۋاقىتتىن ئېشىش / چەكلىنىش بولسا ئېكسپونېنتلىق چېكىنىپ ئەڭ كۆپ 3 قېتىم ئاپتوماتىك قايتا سىنايدۇ، سىزنى ئاۋارە قىلمايدۇ.)
system prompt تا تەجرىبىدىن كەلگەن قاتتىق قائىدىلەر بار، تور بەت ئازراق يېڭىلانغاندا يىغىش script ىنىڭ چىدايدىغانلىقىنى بەلگىلەيدۇ:
- ھەر HTTP دىن كېيىن ھالەت كودى تەكشۈرۈلسۇن، 2xx ئەمەس بولسا مەغلۇپ — «ئەۋەتسە مۇۋەپپەقىيەت» بولمىسۇن.
- URL ھەرپمۇھەرپ ئىشلىتىلسۇن، مودېل ئۆزىچە توقۇپ ئۆزگەرتمىسۇن.
- بەت ئىچىدىكى قۇرۇلمىلىق JSON نى ئالدىن يېشىش، تېز ئۆزگىرىدىغان CSS class ئەمەس؛ كېيىنكىسى بەت يېڭىلانسىلا بۇزۇلىدۇ.
prompt بىلەنلا چەكلەش يېتەرلىك ئەمەس، ماتور يەنە قوغدايدۇ: ھەر http_get / http_post سۈكۈتتە تور كۆرگۈچ User-Agent ى بىلەن. بۇمۇ ھەقىقىي ساۋاق: بەزى تور بېكەتلەر (ئۇچرىغان مىسال: Baidu قىزىق ئىزدەش) Go نىڭ سۈكۈتتىكى Go-http-client/1.1 گە بىۋاسىتە ئۆمۈچۈككە قارشى HTML قايتۇرىدۇ، script json_decode دەسلەپكى < دىلا ئۆرۈلىدۇ. script يەنىلا headers ئارقىلىق UA نى ئالماشتۇرالايدۇ، ئەمما سۈكۈت قىممىتى «ئۆمۈچۈككە ئوخشاشلىقى ئۈچۈنلا چىقىرىۋېتىلمەسلىك»نى ئالدىن كاپالەتلەيدۇ.
تۈزۈلگەن script مۇنداق، دىققەت قىلىڭ:بىر قۇرمۇ import يوق(بارلىق ئىقتىدار كىرگۈزۈلىدۇ):
def run(): resp = http_get("https://example.com/board", headers = {"User-Agent": "Mozilla/5.0"}) if resp["status"] < 200 or resp["status"] >= 300: return {"status": "error", "error": "fetch non-2xx: %d" % resp["status"]} blocks = re_findall("(?s)<!--data:(.*?)-->", resp["body"]) data = json_decode(blocks[0]) titles = [it["title"].strip() for it in data.get("list", [])] return {"status": "success", "data": {"title": "榜单 " + now()["date"], "content": "\n".join(titles)}}emit(run())ئەمما بىر قارار پەقەت پايدا ئېلىپ كەلمەيدۇ. «تۇراقلىق script قا تۈزۈش» دەرھال تۆت قېچىپ قۇتۇلغىلى بولمايدىغان سوئالنى چىقاردى؛ قالغان ماقالە ئۇلارغا بىرمۇبىر جاۋاب:
- بىرىنچى سوئال: AI ھازىر يازغان كودنى نېمىگە تايىنىپ ئۆز ماشىنىڭىزدا ئىجرا قىلىسىز؟
- ئىككىنچى سوئال: بۇ ئىش ئەسلىدىن تۇراقلىق script قا تۈزۈلمەسلىكى كېرەك بولسىچۇ؟
- ئۈچىنچى سوئال: script تۇراقلىق، دۇنيا ئۆزگىرىدۇ؛ تور بەت يېڭىلىنىپ script بۇزۇلسا قانداق قىلىمىز؟
- تۆتىنچى سوئال: قولىدىكى يەرلىك كىچىك مودېل توغرا JSON مۇ چىقىرالمايدىغان ئىشلەتكۈچى قانداق قىلىدۇ؟
بىرىنچى سوئال: AI كودىنى نېمىگە تايىنىپ ماشىنىڭىزدا ئىجرا قىلىسىز؟
«مودېل كود ھاسىل قىلىپ ئىجرا قىلسۇن» دېگەننىڭ ئەڭ چوڭ قورقۇنچى بىخەتەرلىك. كود ئىشلەتكۈچى ماشىنىسىدا يۈرىدۇ، ئۇ ياكى ئۇنى ئازدۇرغان كىشى os.system("rm -rf ~") يازسىچۇ؟
شۇڭا بىخەتەرلىكتىكى بىردىنبىر ئومۇمىي قائىدە:LLM چىقارغان ھەر پارچە كودنى ئىشەنچسىز، ھەتتا قارشى تۇرغۇچى كىرگۈزۈش دەپ قاراش— prompt injection دىن مۇداپىئەگە ئوخشاش ئېھتىيات. ئازدۇرۇلۇشى، توقۇشى ياكى ئاددىي خاتا يېزىشى مۇمكىن. قۇم ساندۇقىنىڭ مەسئۇلىيىتى «توغرا يازغان دەپ ئىشىنىش» ئەمەس،«يامان يازسىمۇ ئاۋارىچىلىك چىقارماسلىق». تۆۋەندىكى ھەر مۇداپىئە مۇشۇ ئالدىنقى شەرتتىن كەلگەن.
ساھەدىكى كۆپ ئۇسۇلقارا تىزىملىك: script AST سىنى يېشىپ، import osنى، evalنى، __import__نى چەكلەش… تۈپ مەسىلىسى:ھەر ۋاقىت قېچىش يولىنى قوغلاپ يۈرىسىز. سۈكۈتتە ھەممە ئىقتىدار ئوچۇق، سىز بىرمۇبىر توسۇسىز؛ ھۇجۇمچى سىز ئويلىمىغان بىر ئېغىزنى تاپسىلا ئۇتىدۇ. Python قۇم ساندۇقىدىن ئايلىنىپ ئۆتۈش تارىخى قارا تىزىملىك مەغلۇبىيىتىنىڭ تارىخىدۇر.
HexClaw تەتۈر يولدا، ساھە بۇنىئىقتىدارغا ئاساسلانغان بىخەتەرلىك مودېلى (capability-based security)دەيدۇ: سۈكۈتتە نۆل ھوقۇق، ئىقتىدار ئېنىق بېرىلىدۇ. سۈكۈت ماتورى Starlark— Google نىڭ Bazel ئۈچۈن ياسىغان Python دىئالېكتى، ساپ Go ئىجراسى؛ «ئېنىق، قايتا تەكرارلىنىدىغان قۇرۇش» ئۈچۈن تۇغۇلغان:import، eval، exec، ھۆججەت، تور يوق. Starlark script ى سۈكۈتتە ھېچ ئىش قىلالمايدۇ.
script قىلالايدىغان ھەر ئىش ساھىبنىڭئېنىق كىرگۈزگەنئىچىگە قۇرۇلغان فۇنكسىيەسى (cron/engine_starlark.go):
predeclared := starlark.StringDict{ "http_get": ..., // GET، {"status", "body"} قايتۇرىدۇ "http_post": ..., "json_decode": ..., "json_encode": ..., "re_findall": ..., "re_sub": ..., "html_unescape": ..., "url_encode": ..., "sha256": ..., "now": ..., "kb_ingest": ..., // يەرلىك بىلىم ئامبىرىغا يېزىش (in-process) "state_get": ..., "state_set": ..., // ئىجرالار ئارا تۇراقلىق ھالەت (قوشۇلما يىغىش / تەكرارسىزلاشتۇرۇش) "wake_agent": ..., // «ھەقىقىي ماتېرىيال بولغاندا» تولۇق Agent قا ئۆتۈش (ئىككىنچى سوئال) "emit": ..., // ئاخىرقى نەتىجە يوللاش (script بىر قېتىم چاقىرىشى شەرت)}AST قارا تىزىملىكى: سۈكۈتتە تولۇق ئىقتىدار، بىرمۇبىر چەكلەش؛ قېچىش يولىنى داۋاملىق قوغلاش.
قۇرۇلمىلىق قۇم ساندۇقى: سۈكۈتتە نۆل ئىقتىدار، بىرمۇبىر بېرىش؛ «سىرت»نىڭ ئۆزى بولمىغاچ قېچىش دېگەن يوق.
شۇڭا script نىڭ پۈتۈن بىخەتەرلىك تەكشۈرۈش يۈزى ئۈچ ئىشقىلا كىچىكلەيدۇ (validateStarlarkSource):
func validateStarlarkSource(script string) error { f, err := opts.Parse("job.star", script, 0) // 1. يېشەلەمدۇ؟ if err != nil { return ... } for _, stmt := range f.Stmts { if _, ok := stmt.(*syntax.LoadStmt); ok { // 2. load() بىلەن سىرتقى مودۇل يۈكلەشنى چەكلەش return fmt.Errorf("load() is not allowed in cron scripts") } } if !strings.Contains(script, "emit(") && // 3. نەتىجە چىقىشى شەرت (emit !strings.Contains(script, "wake_agent(") { // ياكى wake_agent، دەرۋازا ۋەزىپە پەقەت wake قىلسا بولىدۇ) return fmt.Errorf("must call emit({...}) or wake_agent(...)") } return nil}يېشىلىشى + load() چەكلىنىشى + نەتىجە چىقىشى (emit()ياكى دەرۋازا ۋەزىپىنىڭ wake_agent()). ئۇزۇن «چەكلەنگەن فۇنكسىيە نامى» تىزىملىكى يوق؛ ھاجەتسىز، ئىقتىدار يۈزىنىڭ ئۆزى يېپىق.
ئىككى قوغدىغۇچ ۋە كۈتۈلمىگەن تور تاللىشى
قۇرۇلمىلىق قۇم ساندۇقى «نېمىنى چاقىرىدۇ»نى كونترول قىلدى. قالغان ئىككى ئىشنى قاتتىق توسۇش، يەنە تور تاللىشىنى چۈشەندۈرۈش كېرەك:
- ئىچكى ساقلىغۇچنى پارتلىتىش— يەككە HTTP جاۋاب گەۋدىسى 8 MiB دىن ئاشمايدۇ؛ كونترولسىز چوڭ بەت جەرياننى يىقىتالمايدۇ.
- ئاخىرلاشماس ئايلىنىش— بىر Starlark ئىجراسىنىڭ قەدەم چېكى 100 مىليون،
while Trueۋاقىتتىن ئېشىشنى ساقلىماي قەدەم چېكىدە كېسىلىدۇ. ئۇنىڭغا ئىجرا ۋاقىت چېكى (script ئېلان قىلغانtimeout_s، بولمىسا 300s) ۋە ھەمكارلىقلىق بىكار قىلىش قوشۇلىدۇ. - تور——
http_get / http_postscript نىڭ جەريان سىرتىغا سوزۇلغان بىردىنبىر قولى. تورنىمۇ قورشاپ قويايمۇ؟ سىناپ كۆردۇق، ئاخىرىقەستەن قورشالمىدى— بۇنى ئايرىم سۆزلەيلى.
دەرسلىك جاۋابى بىر SSRF قوغدىغۇچىسىقويۇش دەيدۇ: dial قەۋىتىدە «يېشىلگەن ھەقىقىي IP» بويىچە loopback، شەخسىي تور، link-local، بۇلۇت مېتامەلۇمات ئادرېسىنى (169.254.169.254، Capital One 2019 بۇلۇت كىنىشكىسى ئوغرىلانغان SSRF كىرىشى) قارا تىزىملىك بىلەن توسۇش، DNS rebinding نىمۇ مۇداپىئە قىلىش. بىز دەسلەپ دەل شۇنداق يازغان.
كېيىن ئۇنى ئېلىۋەتتۇق، سەۋەبى كونكرېت: نۇرغۇن ئىشلەتكۈچىدە fake-ip ھالىتىدىكى ئاشكارا ۋاكالەتچى(Clash / Surge تىپىدىكى) بار؛ ئۇ ئاممىۋى تور نامىنى ئالدى بىلەن ساقلاپ قويۇلغان ئادرېسقا خەرىتىلەپ، ئاندىن ۋاكالەتچى ئىچىدە يوللايدۇ. قوغدىغۇچى نىشان IP نى شەخسىي بۆلەك دەپ كۆرۈپ دەرھال توسىدۇ. نەتىجىدە بىر تۈركۈمنورمال ئاممىۋى تور ئېلىشىنى ئۆز قوغدىغۇچىمىز خاتا توستى。
بۇ دەل مەھسۇلات ئورنىغا تېگىدۇ:بۇ ئۆز ماشىنىڭىزدا يۈرىدىغان ئۈستەل يۈزى ئەپى، تور كونتېكىستىڭىزنى ئورتاقلىشىشى كېرەك— ۋاكالەتچىڭىز، hosts، يەرلىك تورىڭىز. يەرلىك قورالنىڭ localhost قا كىرىشى، ۋاكالەتچىڭىزدىن تورغا چىقىشى نورمال (IDE، Docker، dev server ھەر كۈنى شۇنداق، ھېچكىم يوچۇق دېمەيدۇ). ئىچكى تورنى مەجبۇر توسۇش ھەقىقىي ئىشنى توسۇپ، راست تەھدىتنى توسىماسلىقى مۇمكىن.
تېخىمۇ تۈپ قەۋەت:script نىڭ يامان ئىش قىلالىشى قايسى IP غا ئۇلىنىشىغا ئەمەس، قولىغا قايسى ئىقتىدار كىرگۈزۈلگەنلىكىگە باغلىق— قۇرۇلمىلىق قۇم ساندۇقى ئىقتىدار يۈزىنى شۇ ئون نەچچە ئىچكى فۇنكسىيەدە چەكلىگەن. ھۆججەت، shell، خالىغان socket يوق، جەريان سىرتىغا چىقىدىغىنى پەقەت http_get / http_post. بۇ ئالدىنقى شەرتتە «قايسى IP غا ئۇلىنىدۇ» باشقا بىر مەسىلە؛ قايسى تور بۆلىكىنى توسۇشنى پەرەز قىلىپ نورمال ئېقىمنى زىيانغا ئۇچراتقاندىن،تورنى ساھىب ماشىنا مەنىسىدە ئېچىپ، قوغداش كۈچىنى ئىقتىدار يۈزىگە مەركەزلەشتۈرگەن ياخشى。
ھەقىقىي بىخەتەرلىك چېكىئىقتىدار يۈزى، IP قارا تىزىملىكى ئەمەس. قۇم ساندۇقى «نېمىنى چاقىرىدۇ»نى چەكلىسە، تورنى ساھىبقا قايتۇرغىلى بولىدۇ. ئۆز ماشىنىڭىزدىكى قورال تور كۆرگۈچىڭىز ۋە تېرمىنالىڭىز بىلەن ئوخشاش تورنى ئىشلىتىشى كېرەك.
قوشۇمچە: Starlark سۈكۈت، ئەمما بىردىنبىر ئەمەس. ماتور كۆرۈنمە يۈز ئابستراكسىيەسى قۇرغان، scheduler Runtime بويىچە يوللايدۇ؛ يەنەئىختىيارىي python3 ماتورىتېخىمۇ كۈچلۈك ئىپادىلەش كېرەك بولغان ئاز سانلىق كونا ۋەزىپىگە قالدۇرۇلغان. لېكىن ئۇ shell ئارقىلىق سىستېما تەرجىمانىنى چاقىرىدۇ، شۇڭا سۈكۈت ئەمەس. HexClaw نىڭ قاتتىق شەرتىيەككە ئىككىلىك ھۆججەت، سىرتقى تايىنىش نۆل؛ ساپ Go Starlark ئۈچ چوڭ سۇپىدا ئوخشاش ھەرىكەت قىلىدۇ، ئىشلەتكۈچى ھېچ نەرسە ئورناتمايدۇ، شۇڭا سۈكۈتكە لايىق.
ئىككىنچى سوئال: بۇ ئىش script قا تۈزۈلمەسلىكى كېرەك بولسىچۇ؟
«ئېلىش — تازىلاش — ساقلاش» مېخانىكىلىق ئىشقا script بەك ماس. ئەمما بىر تۈرنى تۇراقلىق script قىلسا ۋەيران بولىدۇ؛ مەسىلەن «ھەر كۈنى تۈنۈگۈنكى خەۋەرنى يىغىنچاقلاپ باھا بەر». يىغىنچاقلاش، باھالاش تونۇش ئىشى؛ مەزمۇن ھەر كۈنى باشقا، قىممىتى دەل ھەر قېتىم نەق مەيداندا تەپەككۇر قىلىشتا. تۇراقلىق script قا توڭلىتىش ئەڭ قىممەتلىك قىسمىنى چىقىرىۋەتكەنگە باراۋەر.
شۇڭا ماتور تۈزۈشتىن بۇرۇن بىر قېتىم تۈرلەيدۇ (cron/agent_mode.go):
// «تونۇش پېئىلى» ماس كەلسە → ھەر قېتىم Agent نەق مەيداندا تەپەككۇر قىلىدۇ → agent ھالىتىvar reasoningVerbs = []string{ "总结", "分析", "判断", "评估", "筛选出最", "点评", "撰写", "起草", "解读", "建议", "诊断", ...}// يىغىش / چۈشۈرۈش / ساقلاش / ماسقەدەملەش قاتارلىق مېخانىكىلىق پېئىللار قەستەن تىزىملىكتە يوق → script قا تۈزۈشfunc ClassifyTaskMode(prompt string) string { lower := strings.ToLower(prompt) for _, v := range reasoningVerbs { if strings.Contains(lower, v) { return RuntimeAgent } } return "" // سۈكۈت: script ھالىتى (ئىجرادا LLM نۆل)}مېخانىكىلىق I/O ۋەزىپە script قا تۈزۈلىدۇ (ئىجرادا LLM نۆل)؛ تونۇش ۋەزىپىسى agent ھالىتىدەپ بەلگىلىنىپ، ھەر قوزغىلىشتا تولۇق بىر Agent ئىجرا بولىدۇ. بۇ ئېنىق ئاچقۇچلۇق سۆز تۈرلىشى، يەنە LLM چاقىرىش ئەمەس؛ چىقىمى نۆل، سىنىغىلى بولىدۇ.
بۇ ئايرىش سىزىقى «ۋاقىتلىق ۋەزىپە»نىڭ ئىقتىدار دائىرىسىنى ئىككى خىل ئىشقا كېڭەيتتى:
- script ھالىتى (مېخانىكىلىق، token نۆل)— ۋاقىت بويىچە بەت / API ئېلىش، بەت ئۆزگىرىشىنى كۆزىتىش (
sha256+ ئىجرالار ئاراstate_get/setتەكرارسىزلاش، پەقەت «ئالدىنقى قېتىمدىن كېيىنكى يېڭى مەزمۇن»)، قۇرۇلمىلىق سانلىق مەلۇماتنى تازىلاش؛ نەتىجە بىۋاسىتەkb_ingestبىلەن بىلىم ئامبىرىغا يېزىلىدۇ. - agent ھالىتى (تونۇش، ھەر ئايلانمىدا بىر تەپەككۇر، تولۇق قورال زەنجىرى)— يەرلىك ھۆججەت رەتلەش، ھەپتىلىك خىزمەت دوكلاتى، يىغىلغان مەزمۇننى يىغىنچاقلاش / تەھلىل / باھالاش. ئۇ پاراڭ بىلەن ئوخشاش
eng.Processنى ئىشلەتكەچ، ھۆججەت قورالى، بىلىم ئامبىرى، Skill، MCP نىڭ ھەممىسى بار؛ يەرلىك ھۆججەتمۇ ئوقۇيدۇ، سىرتقى قورالمۇ چاقىرىدۇ.
بۇ چېگرانىڭ پاكىز قوشۇمچە نەتىجىسى بار: Starlark قۇم ساندۇقىداھۆججەت سىستېمىسى زىيارىتى يوق، شۇڭا «يەرلىك ھۆججەت رەتلەش» تەبىئىي agent ھالىتىگە چۈشىدۇ.ئايرىش پەقەت token تېجەش ئەمەس، تەبىئىي ئىقتىدار چېگرىسىمۇ— مېخانىكىلىق ئىش نۆل ھوقۇقلۇق قۇم ساندۇقىغا، تونۇش ئىشىدىلا تولۇق قورال زەنجىرى ئېچىلىدۇ.
تېخىمۇ ئىلگىرىلەپ، بۇ سىزىق ھازىر تۇراقلىق ئىككىدىن بىرىنى تاللاش ئەمەس. script يەنەئەرزان «دەرۋازا»بولالايدۇ: ھەر tick تا token نۆل، پەقەت «ھەقىقىي ماتېرىيال» بولغاندا ئىچكى wake_agent(context)نى چاقىرىپ، شۇ ئايلانمىنى ۋاقىتلىق تولۇق Agent قا ئۆستۈرىدۇ (token سەرپ قىلىدۇ، سائىتىگە ئەڭ كۆپ بىر قېتىم).ئىش ھايۋىنى ئادەتتە يېتىپ يەم تېجەيدۇ، ئېغىر ئىش بولغاندىلا تۇرىدۇ؛ ئويلاشقا ئەرزىگەندىلا مېڭىنى ئويغىتىدۇ— بۇ «شەرتلىك ئۆستۈرۈش دەرۋازىسى» Hermes نىڭ wakeAgent ىدىن ئۆگىنىلگەن. دەرۋازا script ى پەقەت wake_agent قىلىپ، emitقىلمىسىمۇ قانۇنلۇق چىقىرىلما.
نېمىشقا مۇشۇنداق «ئاددىي» ئاچقۇچلۇق سۆز تۈرلىشىگە جۈرئەت قىلىمىز؟ چۈنكىئىككى خاتا ھۆكۈمنىڭ بەدىلى ئوخشاش ئەمەس. كود ئىزاھى روشەن: تونۇش ۋەزىپىسى script دەپ خاتا بېكىتىلسە، تۈزۈلگەن نەرسە ئىشلىمەيدۇ، ئەمما كېيىنكى «ئۆزىنى ئوڭشاش» قوغدايدۇ؛ مېخانىكىلىق ئىش agent دەپ خاتا بېكىتىلسە ھەر قېتىم بىر ئاز token ئارتۇق كېتىدۇ.بىر يۆنىلىشتىكى خاتا بەدال كىچىك، يەنە بىرىنىڭ قوغداش يولى بار ئىكەن، پېئىل تىزىملىكى ئېھتىياتچان قالىدۇ؛ تونۇش سۆزىنى ئاز بەلگىلىسۇن، ۋەزىپىنى ئاسانلا token سەرپ قىلىشقا ئىتتەرمىسۇن.
agent ھالىتىدە رېئاللىقتىن كەلگەن يەنە ئىككى دەرۋازا بار:
- چاستوتا قوغدىغۇچىسى— agent ۋەزىپە ھەر قېتىم تولۇق سۆھبەت سەرپ قىلىدۇ، ئەڭ ئاز ئارىلىق 1 سائەت. «ھەر مىنۇتتا تەھلىل» ۋەزىپىسى قۇرغاندا شۇ يەردە توسۇلۇپ، @hourly / @daily غا ئۆزگەرتىش تەلەپ قىلىنىدۇ.
- توقۇش قوغدىغۇچىسى— ۋەزىپە «ئامبارغا كىرگۈزۈش» دېسە، ھەقىقىي
knowledge_ingestقورالىنى چاقىرىشى شەرت. Agent «كىرگۈزۈش تامام» دەپ، ئەمما ھېچ كىرگۈزۈش قورالى چاقىرمىسا، ماتورمەغلۇپدەپ بەلگىلەيدۇ، مۇۋەپپەقىيەت ئەمەس. ساقلانمىغان نەرسە ساقلانمىغان؛ «تامام دېيىش» نەتىجە ئەمەس، توقۇش.
ئۈچىنچى سوئال: تۇراقلىق كود ئۆزگىرىدىغان دۇنياغا يولۇققاندا
تۈزۈلگەن script «قۇرۇلغان دەقىقىدىكى بەت قۇرۇلمىسى»غا ئاساسلانغان. ئەمما بەت يېڭىلىنىدۇ؛ بۈگۈن ئىشلىگەن script كېلەر ئاي تەرەپنىڭ بەتتىكى <!--data:--> ئىزاھ شەكلىنى ئۆزگەرتىشى بىلەن قۇرۇق ئېلىشى مۇمكىن.
«بىر قېتىم تۈزۈش، ئىجرادا token نۆل»نىڭ بەدىلى شۇ —script تۇراقلىق، دۇنيا ئۆزگىرىدۇ. بۇ پۈتۈن لايىھەدىكى ئەڭ ئاسان كۆزدىن قاچىدىغان، ئەمما «تاپشۇرۇپ قويۇپ ئارلاشمىسا بولامدۇ»نى ئەڭ بەلگىلەيدىغان قىسىم.
HexClaw نىڭ جاۋابىئۆزىنى ئوڭشاش: script ئۇدا مەغلۇپ بولۇپ چەككە يەتسە، ماتور مەغلۇبىيەت كونتېكىستى بىلەن قايتا تۈزۈيدۇ (maybeSelfHeal):
const selfHealThreshold = 3 // ئۇدا 3 مەغلۇبىيەتتىن كېيىن قوزغىلىدۇconst selfHealMaxPerWindow = 2 // 24h تا ئەڭ كۆپ 2 قېتىم ئوڭشاشconst selfHealWindow = 24 * time.Hour// خاتالىق سەۋەبىنى prompt قا قوشۇپ، نىشانلىق تۈزىتىشenriched := fmt.Sprintf( "%s\n\n[自愈上下文] 该任务此前编译的脚本已连续失败 %d 次,最近错误:\n%s\n"+ "请根据错误原因生成修正后的脚本。", job.SourcePrompt, selfHealThreshold, failCtx)كود ئىزاھىدا بۇ مېخانىزمغا ماس بىر مىسال بار: ئۇJIT تۈزگۈچنىڭ «ئەلالاشتۇرۇشتىن قايتىشى» (deoptimization) بىلەن ئوخشاش قۇرۇلمىدا:
JIT قىزىق كودنى تېز يولدا (تۈزۈلگەن ماشىنا كودى) دەپ پەرەز قىلىدۇ؛ ئىجرا ۋاقتىدا پەرەز توغرا ئەمەس (تۈر ئۆزگەرگەن) ئىكەنلىكىنى كۆرسە،ئاستا يولغا (تەرجىمان) قايتىپ قايتا ئەلالاشتۇرىدۇ。
بۇ يەردىمۇ ئوخشاش: ئادەتتە تېز يول (token نۆل script)، «بەت مۇنداق» پەرەزى بۇزۇلسا ئاستا يولغا (LLM نى بىر قېتىم چاقىرىپ قايتا تۈزۈش) قايتىپ، يېڭى script چىقىرىدۇ.
قانداق كۆرۈنىدۇ؟ ھەقىقەتەن يۈز بېرىدىغان ئەھۋالنى ئالايلى: رەت تەرتىپىنى ئالىدىغان script بەت ئىچىدىكى <!--data:...--> دېگەن ئىچكى JSON نى يېشىدۇ. بىر كۈنى بەت يېڭىلىنىپ بەلگە <!--board:...-->غا ئۆزگىرىدۇ؛ script re_findall قۇرۇق نەتىجە ئالىدۇ،emit خاتالىق بېرىدۇ. ئۇدا ئۈچ قېتىم مەغلۇپ بولسا، ماتور جىمجىت «ئەڭ يېڭى خاتالىق: data block missing» بىلەن ئەسلى تەلىپىڭىزنى مودېلغا قايتا بېرىپ، <!--board:--> نى ئالىدىغان يېڭى script قا تۈزۈيدۇ. كېيىنكى ۋاقىتتا ۋەزىپە ئۆزى ئوڭشىلىدۇ؛ سىز ھەتتا كېسەل بولغانلىقىنىمۇ سەزمەسلىكىڭىز مۇمكىن.
ئاچقۇچ، بۇ ئۆزىنى ئوڭشاشچەكلىك، خاتالىقتا ساراڭدەك قايتا سىناش ئەمەس:
- 24h تا ئەڭ كۆپ 2 قېتىم— مەڭگۈلۈك بۇزۇلغان ئۈستۈنكى مەنبە (تور بېكەت پۈتۈنلەي تاقالغان) ۋەزىپىنى چەكسىز قايتا تۈزۈشكە، token نى چەكسىز سەرپ قىلىشقا ئېلىپ كەلمەيدۇ. نورما تۈگىسە ماتور «داۋاملىق مەغلۇبىيەت، قولدا كۆرۈڭ» ئاگاھلاندۇرۇشى بېرىدۇ. ئاگاھلاندۇرۇشنىڭ ئۆزىمۇ چەكلىك (بىر سوۋۇتۇش كۆزنىكىدە بىرلا)، كېچىدە ئۇدا ئاۋارە قىلمايدۇ.
- ئەڭ يېڭى مۇۋەپپەقىيەتلىك ئوڭشاشتىن كېيىنكى مەغلۇبىيەتلا سانىلىدۇ— ئوڭشالغاندىن كېيىن كونا مەغلۇبىيەتلەر قايتا چەككە يېتىپ «ۋاقتىدىن بۇرۇن ئوڭشاش» قوزغاتمايدۇ. قارار كىرگۈزۈش تەرتىپىدىكى قۇر نومۇرىنى ئىشلىتىپ، datetime تىزىقچە سېلىشتۇرۇش ئورىكىدىن ساقلىنىدۇ.
- agent ۋەزىپىسى ئۆزىنى ئوڭشاشقا قاتناشمايدۇ— ئۆزگەرتىدىغان تۈزۈلگەن script يوق؛ باشقا يولدا ماڭىدۇ: ئۇدا مەغلۇپ بولۇپ چەككە يەتسە ئاگاھلاندۇرۇپ ئادەم چاقىرىدۇ، جىمجىت مەڭگۈ مەغلۇپ بولۇۋەرمەيدۇ.
ئۆزىنى ئوڭشاش «مەغلۇپ بولسا مەڭگۈ قايتا سىناش» ئەمەس؛ ئۇ token نى كۆيدۈرۈپ، ئىشلەتكۈچىنى بىزار قىلىدۇ. بۇچېكى بار (ئۇدا 3 خاتالىق)، نورمىسى بار (24h تا 2)، ئاخىرى بار (ئوڭشالمىسا ئادەمگە بېرىش)قايتىش يولى؛ ئىشەنچ بىلەن تاپشۇرغىلى بولىدىغان شەكىل شۇ.
ئاددىي ئېيتساق، ئىش ھايۋىنىنىڭ يولىنى دۇنيا بۇزسا ئۆزى يېڭى يول تاپىدۇ؛ ئىككى قېتىم ئايلانسىمۇ بولمىسا سىزنى چاقىرىدۇ.
بۇ ئۇسۇلنىڭ ئالاھىدىلىكىنىمۇ ئېنىقلايلى: ئوخشاش قوراللارمۇ «LLM چاقىرمايدىغان script» ئىجرا قىلالايدۇ. پەرق «token نۆلمۇ»دا ئەمەس،script قەيەردىن كەلدى، قەيەردە يۈرىدۇ، بۇزۇلسا كىم باشقۇرىدۇ:
- كۆپ ئۇچرايدىغان ئۇسۇل— سىز ياكى Agent shell / script بۇيرۇقىنى يېزىپ ئېسىپ قويىسىز، ئۆز ماشىنىڭىزنىڭتولۇق ھوقۇقلۇقمۇھىتىدا permission bit قا تايىنىپ ئىجرا بولىدۇ؛ بۇزۇلسا ئۆزىڭىز تۈزىتىسىز.
- HexClaw— بىر جۈملە تەبىئىي تىلىڭىزنىتۈزۈپبىرنۆل ھوقۇقلۇق قۇرۇلمىلىق قۇم ساندۇقىغاسالالايدۇ؛ بۇزۇلساخاتالىق بىلەن ئۆزىنى ئوڭشاپ قايتا تۈزۈيدۇ。
ئىككىسىمۇ «ۋاقىتلىق كود ئىجراسى»، پەرق بىر جۈملە:ئادەتتىكى ئۇسۇلدا «سىز ئۇنى ئاسرايسىز»، HexClaw دا «ئۇ ئۆزىنى ئاسرايدۇ».
تۆتىنچى سوئال: يەرلىك كىچىك مودېل JSON نىمۇ كۆتۈرەلمىسە
ئالدىنقى لايىھەنىڭ ھەممىسى مودېل script نى ياخشى يازالايدۇ دەپ پەرەز قىلدى. ئەمما HexClaw يەرلىك ئورۇنلاشتۇرۇلىدۇ،ئىشلەتكۈچىنىڭ قايسى مودېلنى ئىشلىتىشىنى تاللىيالمايسىز. نۇرغۇن كىشى يەرلىك glm-4-flash، كىچىك پارامېتىرلىق Qwen ئىشلىتىدۇ. يىغىش لوگىكىسىنى يازالايدۇ، ئەمما «ساپ JSON ئىچىگە كۆپ قۇر script سال» دېسىڭىز بۇزۇلىدۇ: markdown قورشۇقىدىكى Python چىقىرىدۇ، ياكى JSON توغرا بولسىمۇ script تا كىچىك خاتا (regex تەتۈر سىزىقى قېچىرىلمىغان) بار.
تۈزگۈچ بۇنىڭ ئۈچۈنئۈچ قەۋەت ئۆزىنى تۈزىتىش(cron/llm_compiler.go) قوشۇپ، قەۋەتمۇ-قەۋەت قوغدايدۇ:
- بىرىنچى قەۋەت · شەكىل تۈزىتىش— JSON يېشىلمىسا ئەسلىچە قايتۇرۇپ «ئالدىنقى جاۋاب تەلەپتىكى شەكىل ئەمەس، پەقەت ساپ JSON، قورشۇقسىز چىقار» دېگەننى قوشۇپ قايتا بىر ئايلانما. مودېلدا script بار بولغاچ ئەرزان، ئادەتتە ئۆتىدۇ.
- ئىككىنچى قەۋەت · قۇتقۇزۇش— قايتا سىناپمۇ توغرا JSON چىقمىسا regex بىلەن بۇزۇق چىقىرىلمىدىن script نى بىۋاسىتە ئېلىۋالىدۇ (قورشۇقتىكى كود ياكى توغرا قېچىرىلمىغان
scriptمەيدانى)، تۇراقلىق مېتامەلۇمات تولدۇرىدۇ. مودېل JSON ئوراشنى بىلمىسىمۇ script نىڭ ئۆزى ئىشلىشى مۇمكىن. - ئۈچىنچى قەۋەت · تەكشۈرۈش تۈزىتىشى— script قۇرۇلمىسى توغرا، بىخەتەرلىك تەكشۈرۈشى ئۆتمىسە،ماتور قايتۇرغان ئېنىق خاتالىقنىمودېلغا بېرىپ، «پەقەت مۇشۇ يەرنى تۈزەت» دەپ يەنە بىر ئايلانما.
// ئۈچىنچى قەۋەت: «ئېنىق ماتور خاتالىقى»نى مودېلغا قايتۇرۇپ پەقەت شۇ يەرنى تۈزەتكۈزۈشuser("The Starlark script failed validation with this exact error:\n" + verr.Error() + "\nFix ONLY that error, then re-emit one pure JSON object.")بۇ ئۈچىنچى قەۋەتتە مەن ياخشى كۆرىدىغان ئىزاھ بار:«چوڭراق مودېلغا ئالماشتۇرۇشمۇ قۇتقۇزالمايدىغان كۆپ كىچىك خاتالىقنى قۇتقۇزالايدۇ.» چۈنكى چوڭ مودېل «قابىلىيەت»نى ھەل قىلىدۇ، بۇ خاتالىق «قول تېيىلىش». ئېنىق خاتالىقىنى كۆرسىتىپ تۈزەت دېيىش تېخىمۇ ئەقىللىق مېڭە ئالماشتۇرۇشتىن نىشانلىق.
مودېل مۇكەممەل بولسۇن ئەمەس، سىستېما خاتالىققا بەرداشلىق بەرسۇن.يەرلىك ئورۇنلاشتۇرۇشتا مودېلنى تاللىيالمايسىز، شۇڭا سىستېما مودېلنىڭ كەمتۈكلۈكىنى كۆتۈرسۇن. «كىچىك مودېلمۇ بۇ ئاپتوماتلاشتۇرۇشنى يۈرگۈزەلەيدۇ»نىڭ ئالدىنقى شەرتى شۇ.
تۆت جاۋابنى بىر «جۈملە دېيىش»كە ئۇلاش
ئالدىنقى تۆت سوئال «ئىشقا ئاشامدۇ»نى ھەل قىلىدۇ. ئەمما ئىشلەتكۈچى ھېس قىلىدىغىنى «بىر جۈملە دېگەندىن كېيىن نېمە بولدى». بۇ قەۋەتتىمۇ ئىنژېنېرلىق بار.
تۈزۈش LLM چاقىرىدۇ، ئاستا بولسا 30–50 سېكۇنت. يېرىم مىنۇت ئايلىنىش بەلگىسىنىلا كۆرسىتىپ، نەگە تىقىلغانلىقىنى بىلدۈرمەسلىك ناچار تەجرىبە. شۇڭا قۇرۇش تۆت كۆزەتكىلى بولىدىغان باسقۇچقا بۆلۈنۈپ، SSE بىلەن ئالدى يۈزگە ئېقىملىق ئەۋەتىلىدۇ (cron/compiler.go):
const ( StageAnalyzing = "analyzing" // تەلەپ يېشىش / provider تاللاش StageCallingLLM = "calling_llm" // LLM بىلەن script ھاسىل قىلىش (ئەڭ ئۇزۇن قىسىم) StageValidating = "validating" // AST + گرامماتىكا + چىقىرىش كېلىشىمىنى تەكشۈرۈش StagePersisting = "persisting" // تەرتىپلەش + ئامبارغا كىرگۈزۈش)كۆزگە كۆرۈنمەيدىغان، ئەمما پايدىلىق لايىھە:ئارقا تەرەپ كۆرۈنمە يۈز بايقاش بىلەن ئېقىملىق يولنى بەلگىلەيدۇ. تۈزگۈچ ئىلگىرىلەشچان كېڭەيتىش كۆرۈنمە يۈزىنى ئىجرا قىلسا بۆلۈپ يوللايدۇ؛ قىلمىسا پۈتۈن تۈزۈشنى بىر باسقۇچ قىلىدۇ —يەنىلا ئىشلەيدۇ، پەقەت تەپسىلات كۆرۈنمەيدۇ. ئىقتىدار تەدرىجىي كۈچىيىدۇ، ھەممىسى ياكى ھېچنەرسە ئەمەس. يۇقىرىدىكى «شەكىل تۈزىتىش»مۇ «چىقىرىش شەكلى خاتا، ئاپتوماتىك تۈزىتىپ قايتا سىنىلىۋاتىدۇ…» ئىلگىرىلەش ئۇچۇرى سۈپىتىدە شۇ ئېقىمدا كېلىدۇ؛ تىقىلىپ قالمىغانلىقىنى بىلىسىز.
تۈزۈلگەندىن كېيىنمۇ AI ۋەزىپىنى بىۋاسىتە قۇرۇپ بەرمەيدۇ، ئالدى بىلەن بىرجەزملەشتۈرۈش كارتىسى(CronJobConfirmCard.vue):
- مەنبە قەۋەت بەلگىسى— جۈملە قانداق چۈشىنىلگەنلىكى badge بىلەن بەلگىلىنىدۇ:
⌘ Slash(slash بۇيرۇقى، ئەڭ يۇقىرى ئىشەنچ) /⚡ تونۇلدى(قائىدىلىك تېز يول، LLM يوق) /🤖 AI ياردىمى/💬 تولۇقلاش كېرەك. ئاددىي نىيەتنى قائىدە تونۇسا چوڭ مودېلنى چاقىرمايدۇ. - cron ئىپادىسىنىڭ خەنزۇچە ئالدىن كۆرۈنۈشى——
0 8 * * *يېنىدا بىۋاسىتە «ھەر كۈنى 08:00» كۆرسىتىلىدۇ؛ ئادەتتىكى ئادەم قايسى ۋاقىتنى قۇرغانلىقىنى دەرھال بىلىدۇ. - جەزملەشتۈرۈشتىن بۇرۇن ئۆزگەرتىش + «AI ئۆزگەرتىپ بەرسۇن»— نام، ۋاقىت، قىلىدىغان ئىش، ئۇقتۇرۇش ئورنى (chat / push / feishu / discord / wechat) شۇ يەردە تەھرىرلىنىدۇ. خاتا چۈشەنگەن بولسا «AI ئۆزگەرتىپ بەرسۇن»نى چېكىپ قايتا يېشىتىڭ.ئادەمنىڭ جەزملەشتۈرۈش دەرۋازىسى بار، AI ئۆز بېشىمچىلىق بىلەن ۋەزىپە قۇرمايدۇ.
تولۇق زەنجىرنى ئۇلىساق مۇنداق:
«يىغىش → بىلىم ئامبىرىغا قايتا يېزىش» ئايلىنىشىنىڭ ھەقىقىي تاماملانغان بىر قېتىملىقى مۇنداق:
ئاستىدا يەنە مۇقىملىق قەۋەتلىرى بار: قۇرۇش بىرلىككە كەلگەن كىرىشتىن (POST /api/v1/cronjob)، تەكرارسىزلىق ئاچقۇچى بىلەن (5 مىنۇتتا ئوخشاش تەلەپ ئىككى قۇرۇلمايدۇ)، ھەر ئىشلەتكۈچىنىڭ ئاكتىپ ۋەزىپە نورمىسى 30. يېڭىلاش «ئالدى ئۆچۈرۈپ كېيىن قۇرۇشتىن تۈزۈلگەن ئاتوم ئالماشتۇرۇش، مەغلۇپ بولسا ئەسلىگە قايتۇرۇش»نى ئىشلىتىدۇ. جەريان قايتا قوزغالغاندا SQLite تىن ئاكتىپ ۋەزىپىلەر قايتا يۈكلىنىدۇ (قايتا قوزغىتىشتا ۋەزىپە يوقالمايدۇ)، ھەر ۋەزىپىنىڭ ئىجرا تارىخى يېزىلغاندا ئەڭ يېڭى 200 گە قىسقارتىلىدۇ (چەكسىز چوڭىيىپ قوزغىلىشنى ئاستىلىتىشتىن ساقلاش). مەغلۇبىيەتكە ئايرىم يەتكۈزۈش نىشانى تەڭشىگىلى بولىدۇ (بولمىسا چەكلىك ئاگاھلاندۇرۇشقا قايتىدۇ). «ئىجرا مەغلۇبىيىتى» بىلەن «يەتكۈزۈش مەغلۇبىيىتى» ئايرىم خاتىرىلىنىپ، ئۆز مۇۋەپپەقىيىتىدە نۆللىنىدۇ؛ بىر قېتىم push بولمىسا پۈتۈن ۋەزىپە بۇزۇلدى دەپ خاتا قارالمايدۇ. ۋاقىت ئورۇنلاشتۇرغۇچى بىر runLoop كورۇتىندا كېيىنكى ۋاقىت بويىچە تارقىتىدۇ، ھەر ۋاقتى كەلگەن ۋەزىپە ئايرىم كورۇتىندا يۈرىدۇ، بىر-بىرىنى توسمايدۇ. cron مەنىسىدىكى يوشۇرۇن ئورەكلەرمۇ ھەل قىلىنغان —@hourly قايسى ۋاقىت رايونى، ئايدىكى كۈن (DoM) بىلەن ھەپتە كۈنى (DoW) بىرگە بېرىلسە بىرلەشمە ياكى كېسىشمە ئېلىنامدۇ؛ پەرەز بىلەن ماڭسا خاتا ۋاقىتتا قوزغىلىدۇ. بۇلارنىڭ ھەممىسى ئۆز ماشىنىڭىزدا ئادەمسىز ئىشلەيدىغان سىستېمىنىڭ بىر خاتا چېكىش، قايتا قوزغىتىش ياكى تور تەۋرىنىشى بىلەن ۋەزىپىنى قالايمىقان قىلماسلىقى ئۈچۈن.
ۋاقىتلىق ۋەزىپىدىكى يەنە ئىككى قاتتىق مەسىلىمۇ ھەل قىلىندى (تۆۋەندىكىسى ئاستى قەۋەت، پەقەت ئىشلەتمەكچى بولغان ئادەتتىكى ئوقۇرمەن ئاتلىسا بولىدۇ):ئۆتكۈزۈۋېتىلگەن قوزغىلىش (misfire)— ماشىنا ئۇخلىغان / قايتا قوزغالغاندا ۋاقىت ئۆتۈپ كەتسە، ئۆتكۈزگەن مۇددەت يېرىم دەۋردىن ئاشسا (120s–2h ئارىسىدا چەكلىنىدۇ)، كېيىنكى كەلگۈسى ۋاقىتقا ئىلگىرىلەيدۇ،پەقەت ئاتلايدۇ، يىغىلىپ قالغانلارنى توپلاپ ئىجرا قىلمايدۇ(قوزغالغان دەقىقىدە كېچىككەن ۋەزىپىلەر بېسىپ كەلمىسۇن). كەڭچىلىك مۇددىتى ئىچىدە بولسا بىر قېتىم تولۇقلايدۇ. بىر قېتىملىق ئەسكەرتىش بۇنىڭ سىرتىدا، كېچىكسىمۇ ئاۋاز بېرىشى كېرەك.قاپلاشقان ئىجرا— ئوخشاش ۋەزىپىنىڭ ئالدىنقىسى پۈتمەي كېيىنكى ۋاقتى كەلگەندە جەريان ئىچىدىكى بىر running بەلگىسى شۇ قېتىمنى بىۋاسىتە ئاتلايدۇ، ئۆزىنى ئۆزى دەسسىمەيدۇ. مەسىلىنىمۇ كۆرگىلى بولىدۇ: ئىجرا مەغلۇبىيىتى LastError، يەتكۈزۈش مەغلۇبىيىتى LastDeliveryErrorدەپ خاتىرىلىنىدۇ؛ ھەر ۋەزىپىنىڭ تارىخى بىلەن ئاپتوماتلاشتۇرۇش بېتىدە قايسىسى خاتالىقى دەرھال كۆرۈنىدۇ.
راستىنى ئېيتايلى: ئۇ نېمە قىلالمايدۇ؟
ئىنژېنېرلىق خاتىرىسىدە چېگرانى يازماسلىق كۆز بويامچىلىق. ۋەزىپە قۇرۇشتىن بۇرۇن بىلىشكە تېگىشلىك كونكرېت چەكلەر بار:
- Starlark تولۇق Python ئەمەس. import، ئۈچىنچى تەرەپ كۈتۈپخانىسى يوق؛ كىرگۈزۈلگەن ئون نەچچە ئىچكى فۇنكسىيەلا بار. numpy / pandas / مۇرەككەپ يېشىش كۈتۈپخانىسى كېرەك بولسا سۈكۈت ماتورى قىلالمايدۇ. ئىختىيارىي python3 ماتورىغا قايتىڭ (python3 نى ئۆزىڭىز ئورناتقان بولۇشىڭىز كېرەك) ياكى script ھالىتىنى ئىشلەتمەڭ.ئۇنىڭ ماھارىتى «ئېلىش → تازىلاش → ساقلاش/يەتكۈزۈش» I/O ئېقىمى، ئومۇمىي ھېسابلاش ئەمەس.
- ئۆزىنى ئوڭشاش ھەممىگە قادىر ئەمەس. «بەت ئازراق يېڭىلىنىپ قۇرۇق ئېلىش»نى يېڭى خاتالىقنى مودېلغا بېرىپ ماسلاشتۇرالايدۇ. ئەمما بېكەت پۈتۈنلەي تاقالسا، كىرىش تېمى قويسا، IP نى توسسا، قايتا تۈزۈشمۇ قۇتقۇزالمايدۇ. 24h نورمىسى تۈگىگەندە ماتور توختاپ ئاگاھلاندۇرىدۇ، قارارنى سىزگە قايتۇرىدۇ؛ بۇ لايىھە، bug ئەمەس.
- ئۆزىنى ئوڭشاش كۆزنىكى ئىچكى ساقلىغۇچتا. «24h تا 2 قېتىم» سانى جەريان ئىچىدە، sidecar قايتا قوزغالسا نۆللىنىدۇ. ئۈستەل يۈزى ئەپىدە قوبۇل قىلغىلى بولىدىغان تاللاش؛ قايتا قوزغىلىش ئاز، ئەڭ يامان ئەھۋالدا بىر نەچچە ئارتۇق ئوڭشاش، بىر جەريان ھاياتىدا كونترولدىن چىقمايدۇ. قاتتىق تۇراقلىق ساقلاش تەلەپ قىلىنسا، بۇ مەلۇم ئاددىيلاشتۇرۇش.
- بۇ ئۈستەل يۈزى يەككە ماشىنا ماتورى، مۇلازىمېتىر ئەمەس. پاراللېللىق≈1، «سىغىم» ۋەزىپە سانى (سۈكۈت 30/ئىشلەتكۈچى) ۋە بىر ئىجرا مەنبە چېكى (جاۋاب ≤ 8 MiB، قەدەم ≤ 100 مىليون، سۈكۈت ۋاقىت چېكى 300s)، QPS ئەمەس. كۆپ ئىجارەچى مۇلازىمەت قىلساق قۇم ساندۇقى جەريان/كونتېينېر ئايرىمىسىغا، يەككە ماشىنىدىكى
runLoopئورۇنلاشتۇرۇش تارقىتىلغان كېچىكتۈرۈش ئۆچرەتىگە ئۆزگىرىشى كېرەك. ھازىرقى قايتا كىرىش قوغدىغۇچىسى جەريان ئىچىدىكىrunningبەلگە، پەقەت بىر ماشىنا قاپلىشىنى توسىدۇ. كۆپ نۇسخىدا ئوخشاش ۋاقىتنى ھەر نۇسخا بىر قېتىم قوزغىتىدۇ، سىرتقى قۇلۇپ / تەكرارسىزلاش كېرەك. ئۇ باشقا بىر ئىنژېنېرلىق، بۇ ماقالە دائىرىسىدە ئەمەس. - ۋەزىپە تۈرلىشى ئاچقۇچلۇق سۆز بىلەن، LLM ئەمەس. چېگرا جۈملىسى خاتا ھۆكۈم قىلىنىشى مۇمكىن (بىر جۈملىدە يىغىش ھەم تەھلىل). تەلىيىگە ئۆزىنى ئوڭشاش ۋە ئادەم جەزملەشتۈرۈش دەرۋازىسى بار، بەدەل كونترولدا؛ ئەمما بۇ ھەقىقەتەن «چوڭقۇر چۈشىنىش» تۈرلىشى ئەمەس.
- agent ھالىتى ھەر قېتىم بىر سۆھبەت سەرپ قىلىدۇ. شۇڭا ئارىلىق مەجبۇرىي ≥ 1 سائەت، «كۈندىلىك يىغىنچاق»، «ھەپتىلىك دوكلات»تەك تۆۋەن چاستوتىلىق تونۇش ۋەزىپىسىگىلا ماس. ھەم تېز ھەم ئەقىللىق دېگەن فىزىكىلىق مەنىدە مۇمكىن ئەمەس.
بۇ ئەسلىدىن AI Agent قىلىدىغان ئىش
بىر ئايلانما تېخنىكا تەپسىلاتى پەقەت بىر نەرسىنى ئېنىقلاش ئۈچۈن:ۋاقىتلىق، تەكرار، مېخانىكىلىق ۋەزىپە ئادەمنىڭ دىققىتىنى ئالماسلىقى، ھەر قېتىم چوڭ مودېل تەپەككۇرىنى چاقىرماسلىقى كېرەك. AI Agent نىڭ بۇنى ئۈستىگە ئېلىشى ئۆز ۋەزىپىسى.
قايتا قارىساق بۇ ماتورنى «لايىھەلەندى» دېگەندىن، مەسىلىلەر قەۋەتمۇ-قەۋەت مەجبۇر چىقاردى دېگەن توغرا:«script قا تۈزۈش»پۇل ۋە ئېنىقسىزلىقنى تېجىدى → «AI كودىنى ماشىنىڭىزدا ئىجرا قىلغىلى بولامدۇ» دېگەندەنۆل ھوقۇقلۇق قۇم ساندۇقىقوشۇلدى (تورنىمۇ قۇلۇپلامدۇ؟ قۇلۇپلاپ كۆردۇق، ئاشكارا ۋاكالەتچىدىن ئۆتكەن نورمال ئېقىمنى خاتا توسقاچ ئېلىۋەتتۇق؛ چېگرا ئاخىرى «قايسى IP غا ئۇلىنىدۇ»دا ئەمەس، «نېمىنى چاقىرىدۇ»دا قالدى) → «بەزى ۋەزىپە تۈزۈلمەسلىكى كېرەك» دېگەندەمېخانىكىلىق / تونۇش ئايرىش قوشۇلدى → «ئۆزگىرىدىغان دۇنيا script نى بۇزىدۇ» دېگەندەئۆزىنى ئوڭشاش قوشۇلدى → «ئىشلەتكۈچىنىڭ يەرلىك مودېلى JSON نى كۆتۈرەلمەيدۇ» دېگەندەئۈچ قەۋەت ئۆزىنى تۈزىتىشقوشۇلدى. ھەر قەۋەت ئالدىنقى قەۋەتنىڭ بەدىلىدىن كەلگەن.
ئەمما «ئۈستىگە ئېلىش» «demo ئىجرا قىلىش» ئەمەس. مودېلغا كود يازدۇرۇپ بىر قېتىم مۇۋەپپەقىيەتلىك ئىجرا قىلىپ سۈرەت چىقىرىشنى ھەممە قىلالايدۇ. ھەقىقىي قىيىنىتاپشۇرۇپ قويۇپ، خاتىرجەم ئۇنتۇغىلى بولىدىغانئاساسىي قۇرۇلۇش قىلىش:
- Agent نىڭ ئۆزىنى سانلىق مەلۇمات بىلەن بېقىش— يىغىلغان، رەتلەنگەن نەتىجە بىلىم ئامبىرى ۋە ئەستە ساقلاشقا قايتا يېزىلىدۇ، كېيىن سورىغاندا ئۇئاللىبۇرۇن بىلىدۇ. جانسىز قورال نەتىجىنى سىزگە يوللايدۇ، Agent ئۆزىگە قايتۇرىدۇ؛ RSS ۋە Zapier بېرەلمەيدىغان ئايلىنىش شۇ.
- تۆۋەن چىقىم— بىر قېتىم تۈزۈش، كېيىن token نۆل؛ قوشۇمچە چىقىم سىزىقلىق ئەمەس، 0.
- تورسىز، ماشىنىدىن چىقمايدۇ— قۇرۇلمىلىق قۇم ساندۇقىدا ئېنىق كود يۈرىدۇ، سانلىق مەلۇمات داۋاملىق ئۆز ماشىنىڭىزدا.
- ماشىنىڭىزدا ئىجرا قىلىشقا جۈرئەت— ئىقتىدار بىخەتەرلىك مودېلى (سۈكۈت نۆل ھوقۇقلۇق قۇم ساندۇقى، ئىقتىدار ئېنىق كىرگۈزۈلۈپ بىرمۇبىر بېرىلىدۇ)، قېچىش يولىنى قوغلاپ ياماقلاش ئەمەس.
- دۇنيا ئۆزگەرسە ئۆزىنى ئوڭشاش— script بۇزۇلسا خاتالىق بىلەن قايتا تۈزۈيدۇ، ئوڭشالمىغاندىلا سىزگە قايتۇرىدۇ.
بۇلار تولۇق بولغاندىلا «Agent سىز ئۈچۈن ۋاقىتلىق ئىش قىلسۇن» شۇئاردىن ھەقىقىي تاپشۇرغىلى بولىدىغان نەرسىگە ئايلىنىدۇ.push ئۇقتۇرۇشى پەقەت بىر چىقىش ئېغىزى؛ ھەقىقىي قىممىتى سىز ئۈچۈن يىل بويى بارغانسېرى يېڭىلىنىدىغان «ئىككىنچى مېڭە»نى ئاسراش.
نىيەتنى كودقا تۈزۈپ ئۆز ماشىنىڭىزدا ئىجرا قىلىش؛ نۆل ھوقۇقلۇق قۇم ساندۇقى بىلەن جۈرئەتلىك، ئايرىش بىلەن تېجەشلىك، ئۆزىنى ئوڭشاش بىلەن ئۆزگىرىش ئىچىدە داۋاملىق ئىجرا قىلىش؛ ئاخىرى نەتىجىنى Agent نىڭ ئۆز بىلىمى ۋە ئەستە ساقلىشىغا قايتۇرۇش.HexClaw نىڭ «Agent ۋاقىتلىق ئاپتوماتلاشتۇرۇشنى ئۈستىگە ئالسۇن» دېگەن ئىنژېنېرلىق جاۋابى شۇ: سىزگە بىر script ئىجرا قىلىشلا ئەمەس، ئۆزى ئۈچۈن داۋاملىق يېڭىلىنىدىغان مېڭە بېقىش.
ئەڭ ياخشى ئاپتوماتلاشتۇرۇش — بىر جۈملە دەيسىز،
ئاندىن ئۇنتۇسىڭىز بولىدۇ؛ چۈنكى ئۆزى ئىجرا قىلىدۇ، خاتا بولسىمۇ ئۆزى يول ئىزدەيدۇ.
قوشۇمچە · ئالدىنقى ماقالىدىن بۇيان يەنە نېمە قوشۇلدى؟
ئالدىنقى «AI Agent كە ئۇيغۇرچە سۆزلەتكۈزۈش: HexClaw AI v0.4.0 نىڭ يەرلىكلەشتۈرۈش ئەمەلىيىتى» ئېلان قىلىنغاندىن بۇيان، مەھسۇلات ھازىر v0.4.6 گىچە يېڭىلاندى، تۆۋەندىكىلەر قوشۇلدى ياكى تولۇقلاندى (بەزىسى ئايرىم ماقالە بولىدۇ):
- 🔌 سانلىق مەلۇمات ئۇلىغۇچلىرى— GitHub / Yuque بۇلۇت خاتىرىسى / Feishu ھۆججەتلىرى / ئېلخەت ئۇلىنىشى، كىنىشكا شىفىرلىنىپ ساقلىنىدۇ
- 🧩 خىزمەت ئېقىمى— webhook قوزغىتىش + كۆپ ۋەزىپىنى بىر گرافىكقا ئۇلاش
- 🪪 بىرلىككە كەلگەن ئىجازەت دەرۋازىسى + ئادەمسىز خەتەر مەسلىھەتچىسى— ئاپتوماتلاشتۇرۇش ھەرىكىتىدىن بۇرۇن خەتەر باھالاش
- 🧠 تەھرىرلىگىلى بولىدىغان ياردەمچى خاراكتېرى (SOUL) + ئەستە ساقلاش ئامبىرى
- 📝 Prompt باشقۇرۇش— كۆپ ئىشلىتىلىدىغان prompt لارنى ئامبارغا ساقلاپ قايتا ئىشلىتىش
- 🎯 Skill / Prompt ئىزدەپ قايتۇرۇش— سۆھبەت كۆزنىكىدە قولدا ئىزدەپ ئېھتىياجغا قاراپ Skill ۋە prompt يۈكلەش قوشۇلدى (ئاپتوماتىك ئىزدەپ قايتۇرۇش بۇرۇن بار)
- 🧪 eval رامكىسى— Agent ھەرىكىتىگە قايتىش سىنىقى
«سانلىق مەلۇمات ئۇلىغۇچى × ۋاقىتلىق يىغىش»، «webhook خىزمەت ئېقىمى» بۇ ماقالىنىڭ «يېپىق ئايلىنىش» تېمىسىنى داۋاملاشتۇرۇپ ئايرىم يېزىلىدۇ.
كېڭەيتىپ ئوقۇش— HexClaw يۈرۈشلۈكىنىڭ ئالدىنقى ماقالىلىرى:
- HexClaw AI vs OpenClaw / Hermes — 2026-يىلى يەرلىك AI Agent نىڭ ئۈچ يولى
- Claude Code SOP — لايىھە يېتەكچىلىكى × سىناقنى تاماملاش × كۆپ Agent ھەمكارلىقى
- قۇرۇلما تەپسىلىي چۈشەندۈرۈشى — بىر ئادەم × Claude Code × 5 ئاي × 6 ئامبار
- تەپەككۇر جەريانى — Qwen / Gemma / DeepSeek-R1 نىڭ ئاخىرقى بىر كىلومېتىرىنى ئېچىش
- تولۇق قوللانما — 5 مىنۇتتا نۆلدىن ئىش قىلالايدىغان يەرلىك AI Agent قا
- ئىلگىرىكى رەھبەر Skill ى — رەھبەرنى AI Skill غا ئايرىپ چىقىرىش
- راك بېقىشتىن قىسقۇچپاقا بېقىشقىچە — مەھسۇلات ئېلانى / OpenClaw تېمىسىغا جاۋاب
پايدىلانغان ماتېرىياللار
- HexClaw AI ئېكولوگىيە ئامبارلىرى:
github.com/hexagon-codes - Starlark تىل ئۆلچىمى (Google، Bazel ئىشلىتىدىغان Python دىئالېكتى):github.com/bazelbuild/starlark
- starlark-go (ساپ Go ئىجراسى):github.com/google/starlark-go
- ئىقتىدارغا ئاساسلانغان بىخەتەرلىك مودېلى (capability-based security):en.wikipedia.org/wiki/Capability-based_security
- OWASP · Server-Side Request Forgery (SSRF):owasp.org/www-community/attacks/Server_Side_Request_Forgery
- JIT نىڭ deoptimization ئارقا كۆرۈنۈشى:en.wikipedia.org/wiki/Deoptimization
كود ۋە ھەرىكەتتە ئۈستۈنكى ئامبارنى ئاساس قىلىڭ؛ تەكشۈرۈش ۋاقتى: 2026-06-23.