ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

[AHK]用大模型写ahk脚本:TaoToken 统一 Key 接入与 config.toml 配置骨架

[AHK]用大模型写ahk脚本:TaoToken 统一 Key 接入与 config.toml 配置骨架 1. 为什么用大模型写 AHK 脚本总在“最后一公里”翻车AutoHotkey 是个很特别的语言v1 和 v2 语法差异巨大社区里流传的示例代码一半是 v1、一半是 v2还有不少是 v2.1-alpha 才支持的写法。你让大模型写一段“WinC 把当前窗口居中到主屏”它给你的代码看着挺像那么回事粘进.ahk一跑就报错——要么是WinGetPos返回值用法不对要么是MonitorGetWorkArea的参数形式过时。这不是模型不行而是 AHK 的版本碎片化太严重模型训练语料里混着各个年代的写法。我自己的做法是把“写脚本”拆成两件事一是让模型负责生成和改写代码逻辑二是把模型调用这件事本身固定下来不让它每次换工具、换编辑器就重新配一遍 Key。前者靠提示词和版本约束后者靠一个统一的 API 通道。这篇就围绕后者展开给你一套config.toml配置骨架再配一个 AHK 脚本调用示例最后用一个可复制的连通性验证动作把闭环跑通。适合已经在用 AHK 做本地自动化、又想稳定接入大模型辅助写脚本的开发者。核心检索词先摆出来AHK 脚本、大模型辅助编码、TaoToken 统一 Key、config.toml 配置。你能得到的是——一套不依赖具体编辑器、不绑定单一模型的接入方式以及一个能直接复制运行的 AHK 调用片段。2. TaoToken 前置统一 Key 与 API 通道准备在写任何 AHK 代码之前先把“模型通道”这件事定下来。TaoToken 在这里扮演的角色是一个统一的 API 入口你不需要为每个模型单独记一套地址和密钥而是用同一个 Key 走同一个 Base URL模型名在请求体里区分。对 AHK 这种需要手写 HTTP 请求的场景来说少一个变量就少一类报错。你需要准备的东西只有两样一个 API Key一个 Base URL。Key 在控制台的 API Keys 页面创建地址是 https://taotoken.net/api-keys 创建后复制保存后面写进config.toml。Base URL 用 https://taotoken.net/api 注意这个地址不带任何查询参数直接作为请求前缀。注意Key 只显示一次创建后立刻存到本地配置文件或密码管理器。不要写进会提交到 Git 的脚本里。如果你还没决定用哪个模型来辅助写 AHK可以先去模型对话页面试一下手感地址是 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。在那边发一段“用 AHK v2 写一个窗口居中脚本”看它返回的语法是否符合 v2 规范再决定把哪个模型名写进配置。这一步能帮你省掉后面反复改模型名的麻烦。3. config.toml 配置骨架把 Key、模型、超时都收口AHK 本身不读 TOML但你的项目里通常会有 Python、Node 或者别的胶水层来调用模型AHK 只负责触发。所以config.toml放在项目根目录作为所有调用方的统一配置源。下面这份骨架可以直接复制改三个值就能用。# config.toml # TaoToken 统一接入配置骨架 [api] # 统一 Base URL不要带尾部斜杠 base_url https://taotoken.net/api # 从控制台 API Keys 页面创建后填入 api_key sk-你的Key # 默认模型按需替换 default_model claude-3-5-sonnet # 单次请求超时秒 timeout 60 # 失败重试次数 max_retries 2 [models] # 辅助写 AHK 脚本常用的几个模型名按需增删 code claude-3-5-sonnet fast gpt-4o-mini reasoning deepseek-chat [ahk] # AHK 脚本生成时的版本约束写进提示词 target_version v2.0 # 生成代码的保存目录 output_dir ./ahk_scripts这份配置的关键点有三个。第一base_url和api_key分离换 Key 不用动代码。第二[models]段落把模型名集中管理AHK 调用时只传一个逻辑名比如code由胶水层映射到真实模型名。第三[ahk]段落里的target_version会拼进提示词强制模型输出 v2 语法减少前面说的版本错乱问题。如果你打算长期用 AHK 做自动化、并且希望模型调用更稳定可以了解一下 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。它适合那种“每天都要让模型改几段脚本”的节奏比单次调用更省心。4. AHK 脚本调用示例从配置读取到生成脚本下面这段 AHK v2 脚本做两件事读取config.toml里的 Base URL 和 Key然后向模型发一个请求让它生成一段“窗口居中”的 AHK v2 代码并把返回内容写进文件。为了不引入额外依赖这里用 AHK 自带的ComObject(WinHttp.WinHttpRequest.5.1)发 POST 请求。#Requires AutoHotkey v2.0 #SingleInstance Force ; 读取 config.toml 中的简单键值仅演示复杂 TOML 建议用胶水层解析 ReadConfig(path, section, key) { content : FileRead(path) inSection : false for line in StrSplit(content, n, r) { line : Trim(line) if (line [ section ]) inSection : true else if (SubStr(line, 1, 1) [) inSection : false else if (inSection InStr(line, key )) { val : Trim(StrSplit(line, , , 2)[2]) return StrReplace(val, , ) } } return } ; 调用模型生成 AHK 脚本 GenerateAhkScript(prompt) { cfgPath : A_ScriptDir \config.toml baseUrl : ReadConfig(cfgPath, api, base_url) apiKey : ReadConfig(cfgPath, api, api_key) model : ReadConfig(cfgPath, models, code) body : {model: model ,messages:[{role:user,content: prompt }]} http : ComObject(WinHttp.WinHttpRequest.5.1) http.Open(POST, baseUrl /v1/chat/completions, false) http.SetRequestHeader(Content-Type, application/json) http.SetRequestHeader(Authorization, Bearer apiKey) http.Send(body) if (http.Status ! 200) { MsgBox 请求失败状态码 http.Status n http.ResponseText return } return http.ResponseText } ; 热键WinAltG 生成窗口居中脚本 #!g:: { prompt : 用 AHK v2.0 语法写一个脚本热键 WinC 将当前活动窗口居中显示在主屏幕工作区。只输出代码不要解释。 result : GenerateAhkScript(prompt) if (result ! ) { outFile : A_ScriptDir \ahk_scripts\center_window.ahk FileAppend result, outFile MsgBox 已生成脚本 outFile } }这段代码里有两个容易踩的点。第一ReadConfig是个极简解析器只处理key value这种单行形式如果你的 TOML 里有嵌套表或数组建议换成 Python 脚本读取后再传给 AHK。第二WinHttp的Send是同步的超时时间受系统默认值影响如果模型响应慢可以在Open之后加http.SetTimeouts(60000, 60000, 60000, 60000)。生成出来的脚本大概率还需要你手动微调因为模型对MonitorGetWorkArea的参数形式经常记混。正确的 v2 写法是传引用变量#Requires AutoHotkey v2.0 #SingleInstance Force #c:: { activeWin : WinExist(A) WinGetPos(X, Y, winWidth, winHeight, activeWin) mainScreen : MonitorGetPrimary() MonitorGetWorkArea(mainScreen, Left, Top, Right, Bottom) newX : Left (Right - Left - winWidth) // 2 newY : Top (Bottom - Top - winHeight) // 2 WinMove(newX, newY,,, activeWin) }把这段和模型生成的对比一下你就能看出模型常犯的错把WinGetPos()当成返回对象用、把MonitorGetWorkArea的返回值当成对象。所以提示词里最好明确写“使用引用变量形式获取窗口和显示器信息”。5. 验证请求与成功结果一次可复制的连通性动作配置写完了先别急着跑完整脚本用一个最小请求验证通道是否通。最直接的方式是用 curl 发一条消息看返回结构里有没有choices字段。curl -s -X POST https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的Key \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 回复两个字通了}] }成功的话你会看到类似这样的返回{ id: chatcmpl-xxx, object: chat.completion, choices: [ { index: 0, message: { role: assistant, content: 通了 }, finish_reason: stop } ] }看到choices[0].message.content里有内容说明 Key、Base URL、模型名三者都对上了。这时候再回到 AHK 脚本里按WinAltG如果弹出“已生成脚本”并且ahk_scripts\center_window.ahk文件里有内容整条链路就通了。如果 curl 通了但 AHK 报错问题多半在 AHK 的 JSON 拼接上。AHK 字符串拼接容易漏引号建议把body先写到一个临时文件里用FileRead读进来再Send这样能避免转义问题。6. 本篇常见错排查报错一WinGetPos返回空值或报“参数无效”。这是 v1 和 v2 混用最典型的表现。v2 里WinGetPos必须传引用变量不能写成pos : WinGetPos()。检查你的提示词里有没有明确“AHK v2.0 引用变量形式”没有就补上。报错二MonitorGetWorkArea只传一个参数。v2 里这个函数需要显示器编号加四个引用变量少一个都会报错。模型经常只写MonitorGetWorkArea(mainScreen)你要在提示词里给出正确签名示例。报错三curl 返回 401。Key 错了或者没带Bearer前缀。检查Authorization头是不是Bearer sk-xxx格式注意 Bearer 和 Key 之间有一个空格。报错四curl 返回 404。Base URL 拼错了。确认是https://taotoken.net/api/v1/chat/completions不要写成https://taotoken.net/api/chat/completions漏掉v1。报错五AHK 脚本里FileRead找不到 config.toml。A_ScriptDir是脚本所在目录不是工作目录。把config.toml和.ahk文件放同一层或者用绝对路径。报错六模型返回的代码带 Markdown 代码块标记。提示词里加一句“只输出代码不要用 包裹”否则你写进.ahk文件的内容会带反引号AHK 直接报语法错误。排障过程中如果反复卡在鉴权或请求格式上直接对照接入文档走一遍最省时间地址是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。文档里有各语言的最小请求示例比对着改 AHK 的请求头更快。7. 把闭环固定下来从配置到脚本的日常节奏整套流程跑通之后你日常的动作就三步改config.toml里的模型名或提示词模板按热键触发 AHK 脚本把生成的.ahk文件拖进 AutoHotkey 运行。模型负责写逻辑你负责验证和微调Key 和地址永远不动。如果你后面想让模型直接改现有脚本可以把prompt改成“读取 center_window.ahk 的内容把热键从 WinC 改成 WinShiftC只输出修改后的完整代码”然后把文件内容拼进请求体。这样连手动改热键的功夫都省了。最后留一个实用技巧在config.toml的[ahk]段落里加一个prompt_template字段把常用的版本约束和输出格式要求写进去AHK 脚本读取后拼到用户输入前面。这样你每次只需要描述“要什么功能”不用重复交代“用 v2 语法、只输出代码”。配置一次后面所有脚本生成都受益。
返回列表