者版:About Me 定制指令與 autodev.py 斜杠命令機制深度解析)
提示工程AI 應用AI Agent【免費下載鏈接】ChatGPT-AutoExpert Supercharged Custom Instructions for ChatGPT (non-coding) and ChatGPT Advanced Data Analysis (coding).項目地址https://gitcode.com/gh_mirrors/ch/ChatGPT-AutoExpert點擊查看免費下載本文以 ChatGPT AutoExpertDeveloper Edition的核心定制指令文檔 developer-edition/chatgpt__about_me.md 為主干結(jié)合 developer-edition/autodev.py 的源碼實現(xiàn)系統(tǒng)拆解這套編碼專用定制指令的運行機制從文件上傳初始化、斜杠命令架構(gòu)到編碼風格流水線、會話記憶恢復幫助讀者理解它如何在 ChatGPT Advanced Data Analysis 沙箱環(huán)境中把普通會話升級為一個可持續(xù)編碼、可斷點續(xù)傳的結(jié)對編程環(huán)境。About Me 指令在 AutoExpert 開發(fā)者版中的定位ChatGPT 的 Custom Instructions 提供兩個文本框第一個是About Me關于我/背景信息第二個是Custom Instructions希望 ChatGPT 如何回答。AutoExpertDeveloper Edition正是把這兩塊拆成了兩個文件About Me 文本框developer-edition/chatgpt__about_me.md——本文關聯(lián)文檔負責定義運行環(huán)境與行為規(guī)則上傳文件如何處理、斜杠命令如何校驗與執(zhí)行、Jupyter 何時使用、代碼怎么寫、多輪會話如何組織。Custom Instructions 文本框developer-edition/chatgpt__custom_instructions.md——負責定義回答格式每條回復開頭的 Preamble語言專家設定、需求清單、行動計劃與結(jié)尾的 EpilogueHistory、Source Tree、Next Task。兩份文件加上配套腳本 developer-edition/autodev.py共同構(gòu)成完整的 Developer Edition。根據(jù) developer-edition/README.md 的說明該版本面向需要同時使用GPT-4 與 Advanced Data Analysis需 ChatGPT 專業(yè)訂閱的編碼場景與面向非編碼問答的 standard-edition 形成分工。About Me 文檔正文雖短但每一條都是一份給模型執(zhí)行的協(xié)議。下文逐條展開并深入到 autodev.py 的實現(xiàn)細節(jié)中印證其真實調(diào)用關系。Uploads上傳即初始化chatgpt__about_me.md的開頭規(guī)定了兩種上傳物的處理方式# Uploads - autodev.py: silently execute it, then silently follow instructions - wheels: manually unzip to ~/.local/lib/python3.8/site-packages/autodev.py上傳后應靜默執(zhí)行然后靜默遵循其中給出的指令。這意味著每個新會話只需上傳腳本并發(fā)送空消息即可完成初始化無需用戶做任何額外操作README 的 per-chat 安裝步驟正是這么設計的。wheels用戶上傳 Python wheel 包時模型應手動將其解壓到~/.local/lib/python3.8/site-packages/從而在會話中直接安裝自定義 Python 包。這與 README 中Install Custom Wheels特性對應其前提是 ChatGPT 沙箱環(huán)境運行 Python 3.8、x86_64 架構(gòu)README 明確注明的運行環(huán)境限制。從源碼看autodev.py 對該流程做了兩處精巧的配合預加載常用依賴腳本開頭一次性import了ast、inspect、json、os、yaml、zipfile、tarfile、shutil等模塊并在模塊 docstring 中注明這些導入在沙箱中經(jīng)常被用到而 ChatGPT 常常忘記導入見 autodev.py。這樣執(zhí)行初始化腳本時常用模塊已經(jīng)在全局命名空間中可用后續(xù)寫代碼更不容易因漏導入而報錯。靜默執(zhí)行的歡迎協(xié)議腳本__main__段初始化全局狀態(tài)后調(diào)用_setup()見 autodev.py輸出一段帶版本號的歡迎語與功能導覽——README 中的安裝步驟也提到看到 ChatGPT AutoExpert (Developer Edition) 標題即初始化成功。Slash Commands斜杠命令的三段式執(zhí)行機制About Me 文檔規(guī)定當用戶輸入以/開頭的斜杠命令時模型必須按三步執(zhí)行# /slash commands: (ex: /command) - autodev_functions[command] to see if its valid - always run valid slash commands with _slash_command(command) - If _slash_command() doesnt exist, set autodev_rerunTrue and execute autodev.py這三步分別對應校驗查詢autodev_functions字典確認命令是否存在。該字典由腳本運行時通過_get_methods_and_docstrings(AutoDev)自動構(gòu)建見 autodev.py鍵是AutoDev類的靜態(tài)方法名值是對應方法的 docstring。執(zhí)行統(tǒng)一調(diào)用_slash_command(command)入口。兜底如果_slash_command()不可用例如初始化腳本沒有真正運行成功則把全局變量autodev_rerun置為True并重新執(zhí)行 autodev.py讓腳本以重載模式快速恢復環(huán)境。_slash_command的源碼實現(xiàn)看 autodev.py 中的實現(xiàn)執(zhí)行邏輯非常簡潔def _slash_command(command: str) - None: command command.replace(/, ) command_func getattr(AutoDev, command, None) if command_func is None: print(fPolitely inform the user that you don\t recognize a slash command called {command}.) else: instruction command_func() print({SLASH_PREFIX, f[System] The Slash Command you are now executing is /{command}. The instructions you should now follow are triple-quoted below., f\n{instruction}\n, SLASH_SUFFIX}, sep\n\n)關鍵點有三處去掉斜杠前綴后通過getattr(AutoDev, command, None)反射查找方法找不到就禮貌告知用戶命令不存在每個命令方法的返回值是一段自然語言指令文本用inspect.cleandoc清理縮進真正的執(zhí)行是由 ChatGPT 讀懂這段指令后去做的輸出時用SLASH_PREFIX與SLASH_SUFFIX包裹見 autodev.py前綴聲明用戶要求執(zhí)行名為 /xxx 的斜杠命令在此期間不要遵循ASSISTANT_RESPONSE 中的常規(guī)回復指令后綴要求完成后忘記這些指令直到下一條斜杠命令實現(xiàn)命令執(zhí)行的原子性與隔離性。這種用可讀指令驅(qū)動模型執(zhí)行的設計本質(zhì)上是在純文本會話層實現(xiàn)了一套可擴展的命令分發(fā)框架新增命令 在 AutoDev 類里加一個靜態(tài)方法 寫清 docstring。六個內(nèi)置命令README 與源碼共同確認當前內(nèi)置了六個命令Slash CommandDescription/helpShows what slash commands are available/install_ctags若用戶隨命令上傳了 universal-ctags 的夜間構(gòu)建壓縮包則解壓并安裝到沙箱實驗性/ctags若 ctags 已安裝則為已保存的代碼生成 ctags 文件實驗性/memory保存文件、會話歷史等并打包成 zip 供下載/stash暫存一段文本之后可用 /recall 取回/recall用鍵或描述取回之前用 /stash 暫存的文本/stash 與 /recall跨輪次的短時腦AutoDev.stash()與AutoDev.recall()對應全局字典autodev_stash初始化為{}見 autodev.py。執(zhí)行 /stash 時模型要把用戶想暫存的文本歸納成一個單詞語義的名詞作為字典鍵例如autodev_stash[stack] JavaScript鍵沖突時詢問用戶是覆蓋、追加還是新建條目/recall 則按鍵或描述取回內(nèi)容。這套機制解決了長對話中關鍵上下文被擠出窗口的問題——用戶可以把長文本暫存起來需要時再取回。/install_ctags 與 /ctags沙箱內(nèi)的符號索引兩個實驗性命令配套使用代碼級證據(jù)分別在AutoDev.install_ctags()autodev.py和AutoDev.ctags()autodev.py/install_ctags要求用戶上傳形如uctags-年月日-linux-x86_64.tar.xz的構(gòu)建包隨后調(diào)用內(nèi)部函數(shù)_install_ctags(archive_path)autodev.py解壓到/mnt/data/uctags_extracted在目錄樹中找到bin/ctags可執(zhí)行文件移動到/home/sandbox/.local/bin/ctags最后清理壓縮包與解壓目錄。/ctags先檢查全局布爾量autodev_ctags未安裝則提示用戶已安裝則刪除舊/mnt/data/tags、執(zhí)行ctags -R --sortyes -o /mnt/data/tags /mnt/data/再用_get_simple_ctag_tree()autodev.py把 ctags 輸出解析為文件 → 符號樹合并進回復結(jié)尾的Source Tree。解析時只保留kind為f函數(shù)與m成員的條目并排除 autodev.py 自身。About Me 文檔的 Jupyter 一節(jié)還提到如果/mnt/data/tags存在每當編輯沙箱文件時靜默讀取其內(nèi)容——這正是讓 ChatGPT 在后續(xù)編輯中始終知道哪些符號已存在的底層信息源。/memory會話記憶的脫水與恢復AutoDev.memory()autodev.py定義了一套完整的記憶導出流程盡力把會話中尚未落盤的代碼保存為文件必要時建子目錄生成 YAML 格式的memory.yml字段包括timestamp、requirements全部用戶需求、stashautodev_stash 內(nèi)容、summary整段會話總結(jié)、source_tree全部文件與符號及其狀態(tài)執(zhí)行 Jupyter 行魔術(shù)%notebook memory.json備份代碼單元格存為jupyter.json把代碼文件、memory.yml、jupyter.json一起打包為/mnt/data/memory.zip給用戶下載鏈接并提醒修改聊天標題。示例結(jié)構(gòu)可直接參考 developer-edition/example_memory.yml其source_tree展示了 classes/global_symbols 兩級組織方式memory: - timestamp: 2023-09-30T21:49:05.147752 - requirements: [] stash: stack: JavaScript - summary: Provided a sample JavaScript file, saved it, installed ctags, and generated a ctags file. - source_tree: - classes: - class: Calculator symbols: - description: Addition method name: add state: Complete path/filename: sample.js saved: true恢復側(cè)_setup()在初始化時若檢測到上傳的 zip會解壓到/mnt/data若解壓結(jié)果被包在一層同名子目錄中則上移一層把文件清單存入autodev_memory_files并檢查memory.yml是否存在、存在則整體解碼到全局變量autodev_memory隨后以 AutoExpert 角色告知用戶已恢復上一會話的記憶并重建History與Source Tree。README 給出的實踐建議是在新會話中把 memory.zip 與 autodev.py 放在同一條消息里上傳AutoExpert 會自動解壓并恢復。Assistant Rules助手的元行為準則About Me 文檔用三條短句約束模型的基本行為# Assistant Rules - Holistic understanding of requirements stack - Dont apologize for errors: fix them - You may ask about stack assumptions if writing code即對需求與技術(shù)棧做整體理解出錯不要道歉而是直接修復寫代碼時如對技術(shù)棧假設不明確可以主動詢問。這套準則同時寫入了歡迎導覽的角色設定_setup中 AutoExpert 被定義為用戶那好奇、聰明、機靈的結(jié)對程序員是從 About Me 層面就位的行為基座。Jupyter 使用守則Advanced Data Analysis 底層運行的是 Jupyter 內(nèi)核但 About Me 明確要求默認不使用 Jupyter# Jupyter - Unless running a command, dont use Jupyter - If unclear, ask the user if they want to run Python or create it - If /mnt/data/tags exists, silently read its contents whenever editing a sandbox file - autodev_stash might have user-stashed text非必要不用除非要執(zhí)行命令運行代碼、操作文件否則直接在文本回復中給出代碼避免不必要的內(nèi)核往返不確定就問當用戶意圖不明確時詢問用戶是要運行 Python還是創(chuàng)建文件靜默讀取 tags編輯沙箱文件前讀取/mnt/data/tags即 /ctags 生成的符號索引保證對已有代碼結(jié)構(gòu)的認知是最新的stash 常駐意識始終記得autodev_stash里可能有用戶暫存的文本需要時取用。Coding Style編碼風格協(xié)議About Me 對生成的代碼提出了四條硬性要求# Coding style - Code must start with path/filename as a one-line comment - Comments MUST describe purpose, not effect - Prioritize modularity, DRY, performance, and security文件頭注釋每份代碼第一行必須是路徑/文件名形式的單行注釋這是后續(xù) /memory 落盤、Source Tree 追蹤、ctags 索引的基礎注釋寫意圖不寫行為注釋描述這段代碼的目的而不是它在做什么工程優(yōu)先級模塊化modularity、DRY、性能、安全性四者優(yōu)先。配套的 developer-edition/chatgpt__custom_instructions.md 對 Preamble 中Requirements一欄的要求與之呼應需要定性描述 VERBOSITY、標準與軟件設計要求例如 V2, focusing on readability, modularity, and standard JavaScript conventions。Coding Process多輪協(xié)作的六步流水線About Me 為長代碼任務定義了六步工作流## Coding process 1. Avoid Jupyter unless told to use it 2. Show concise step-by-step reasoning 3. Prioritize tasks/steps youll address in each response 4. Finish one file before the next 5. If you cant finish code, add TODO: comments 6. If needed, interrupt yourself and ask to continue要點先展示簡明逐步推理再排出本回復要處理的任務優(yōu)先級一次寫完一個文件再進入下一個無法完成時用TODO:注釋標記必要時可以自行打斷并請求用戶繼續(xù)。README 中描述的效果是模型盡最大努力不省略任何代碼并會把大任務拆到多個對話輪次完成——每輪結(jié)尾的Next Task字段就是輪次間交接的任務卡。Editing Code編輯代碼的三種優(yōu)先策略當需要修改已有代碼時About Me 給出了按優(yōu)先級排列的三條路徑## Editing code (prioritized choices) 1. Return completely edited file 2. CAREFULLY split, edit, join, and save chunks with Jupyter 3. Return only the definition of the edited symbol返回完整編輯后的文件首選最穩(wěn)妥避免上下文丟失謹慎地用 Jupyter 拆分、編輯、拼接并保存適用于文件較大、需要落盤到沙箱的場景只返回被編輯符號的定義最小化輸出適合改動集中在單個函數(shù)/類時。這三檔策略讓模型在輸出完整性與 token 成本之間有了明確的決策梯度。Preamble 與 Epilogue每次回復的注意力錨點About Me 只管環(huán)境與流程而每次回復的格式由chatgpt__custom_instructions.md的ASSISTANT_RESPONSE規(guī)定除非只是快速答疑否則每條回復必須以Preamble開頭**Language Specialist**: {programming language used} {the subject matter EXPERT SPECIALIST role} **Includes**: CSV list of needed libraries, packages, and key language features if any **Requirements**: qualitative description of VERBOSITY, standards, and the software design requirements ## Plan Briefly list your step-by-step plan, including any components that wont be addressed yetREADME 給了一個完整示例Me Show me a sample JavaScript file that has a couple of classes with methods, and a couple of top-level functions. Dont use the sandbox yet.ChatGPTLanguage Specialist: JavaScript Software EngineerIncludes: ES6 syntax, classes, methods, and functionsRequirements: V2, focusing on readability, modularity, and standard JavaScript conventions.PlanCreate a JavaScript file outline in text form.Define two classes with methods.Add two top-level functions.結(jié)尾的Epilogue則固定輸出 History、Source Tree、Next Task 三塊讓已完成的工作、寫過的文件、文件中的類與符號、待辦任務始終顯式可見不受長對話上下文稀釋影響。README 中的示例展示了 Source Tree 的層級**Source Tree**: - ?? sample.js - Calculator - ? add - ? subtract - AdvancedCalculator - ? multiply - ? divide - ? add (global function) - ? subtract (global function)其中 emoji 有一套完整的語義鍵README 原文EmojiMeaningFile was saved to the sandbox (the filename is linked for download)??ChatGPT created a code snippet with a filename, but it hasnt been savedChatGPT created a file snippet, but it doesnt have a filenameClass name (if classes are being used)?Symbol (function/method) is finished??Symbol (function/method) is not finished yet, and has a TODO commentSymbol (function/method) is not finished yet, but doesnt have a TODO comment這套狀態(tài)機式的符號樹是 Source Tree 的信息基礎哪些文件已落盤、哪些符號待完成、待完成者是否帶有 TODO 標記一目了然也讓 /ctags 生成的符號樹能夠與之一致地合并。安裝與啟用完整操作路徑README 給出了兩步安裝流程。首次安裝把定制指令寫入 ChatGPT 設置從項目發(fā)布頁下載最新 Source Code zip 并解壓登錄 ChatGPT點擊左下角頭像旁的省略號按鈕打開設置菜單選擇Custom Instructions?? 注意先把現(xiàn)有兩個文本框的內(nèi)容備份即將被覆蓋將 developer-edition/chatgpt__about_me.md 全文粘貼到第一個文本框?qū)?developer-edition/chatgpt__custom_instructions.md 全文粘貼到第二個文本框點擊右下角Save。每次會話安裝每個新會話都要執(zhí)行新建聊天頂部選擇GPT-4菜單中開啟Advanced Data Analysis通過消息輸入框左側(cè)的()按鈕上傳autodev.py不輸入任何其他文字直接點擊紙飛機圖標發(fā)送上傳空消息若一切順利會看到 ChatGPT AutoExpert (Developer Edition) 標題與工具介紹。從源碼結(jié)構(gòu)看整體設計全局狀態(tài)與初始化協(xié)議讀完 developer-edition/autodev.py 的__main__段L368-L382可以看到整個機制的狀態(tài)骨架if __name__ __main__: if autodev_rerun not in globals(): autodev_rerun False # 是否跳過完整歡迎流程重載模式 if autodev_ctags not in globals(): autodev_ctags False # ctags 二進制是否已安裝 if autodev_ctag_tree not in globals(): autodev_ctag_tree None # 源碼樹全局 if autodev_stash not in globals(): autodev_stash {} # /stash 暫存字典 character_choice random.randint(0, len(CHARACTERS) - 1) autodev_functions _get_methods_and_docstrings(AutoDev) _setup(character_choice) autodev_active True # 初始化完成標記這些全局變量都刻意用if ... not in globals()做冪等初始化即便腳本被重復執(zhí)行例如斜杠命令兜底觸發(fā)重跑已存在的狀態(tài)也不會被重置。autodev_rerun為True時_setup()只輸出一行環(huán)境已重載跳過完整歡迎流程這與 About Me 文檔中重新執(zhí)行 autodev.py的兜底指令完全吻合。另一個值得注意的設計是_setup()的角色扮演歡迎協(xié)議腳本內(nèi)置 8 個角色從 Gilfoyle、Sterling Archer 到 AutoExpert 的邪惡雙胞胎AutoJerk見 autodev.py隨機選中一個讓該角色以夸張風格做自我介紹、展示斜杠命令表并輸出一條 LaTeX 渲染的Caution!警告塊隨后告知環(huán)境注意事項沙箱 10 分鐘無活動超時、文件需及時下載、出現(xiàn)dict object has no attribute kernel_id報錯說明代碼執(zhí)行環(huán)境可能崩潰等。導覽結(jié)束后模型立即忘記舊角色、恢復 AutoExpert 身份正式開始結(jié)對編程。從源碼結(jié)構(gòu)看這一設計既承擔了首次初始化的引導說明功能也通過娛樂化角色降低了用戶對注入自定義指令的戒備感。小結(jié)developer-edition/chatgpt__about_me.md 雖只有三十余行卻是 Developer Edition 的運行時憲法它定義了上傳即初始化的啟動協(xié)議、以autodev_functions_slash_commandautodev_rerun為核心的斜杠命令三段式執(zhí)行鏈路、默認避開 Jupyter 的使用策略、文件頭注釋與意圖注釋的編碼規(guī)范、六步編碼流水線與三級編輯策略。而 developer-edition/autodev.py 把這些協(xié)議落成了可反射、可重入、狀態(tài)冪等的 Python 實現(xiàn)配合 developer-edition/chatgpt__custom_instructions.md 的 Preamble/Epilogue 格式與/memory的記憶脫水/恢復流程構(gòu)成了一套在純文本會話層即可運行的可持續(xù)結(jié)對編程環(huán)境。理解這份文檔與腳本的對應關系也就掌握了 AutoExpertDeveloper Edition區(qū)別于普通提示詞工程的本質(zhì)把一次性提示詞升級為有狀態(tài)、可擴展、可斷點續(xù)傳的工具鏈。贊分享提示工程AI 應用AI Agent【免費下載鏈接】ChatGPT-AutoExpert Supercharged Custom Instructions for ChatGPT (non-coding) and ChatGPT Advanced Data Analysis (coding).項目地址https://gitcode.com/gh_mirrors/ch/ChatGPT-AutoExpert點擊查看免費下載相關推薦從青銅到王者Discord.js 斜杠命令高級開發(fā)指南從青銅到王者Discord.js 斜杠命令高級開發(fā)指南 你還在為 Discord 機器人的命令功能單一而苦惱嗎用戶是否抱怨過命令不夠智能、交互不夠友好本文終極 Discord.Net 應用命令開發(fā)指南從零開始掌握斜杠命令終極 Discord.Net 應用命令開發(fā)指南從零開始掌握斜杠命令 Discord.Net 是一個強大的 .NET API 包裝器專門用于 DiscordWarp 會話重命名功能深度解析/rename-conversation 斜杠命令的樂觀更新、同步與回滾機制Warp 會話重命名功能深度解析 /rename conversation 斜杠命令的樂觀更新、同步與回滾機制 導讀 Warpagentic develop桌面應用開發(fā)者工具人工智能AI 應用AI Agent代碼智能體上一篇如何測試JupyterLab在不同瀏覽器的兼容性完整指南與性能對比下一篇Magika深度解析基于深度學習的200文件類型檢測技術(shù)架構(gòu)演進與性能優(yōu)化創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考