ARTICLE DETAIL

资讯详情

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

ANSA二次开发 BCGUI Examples 实战:把 Base URL 改到 TaoToken 跑通第一个脚本

ANSA二次开发 BCGUI Examples 实战:把 Base URL 改到 TaoToken 跑通第一个脚本 1. ANSA 二次开发 BCGUI Examples 入门从脚本加载到回调跑通的最小闭环ANSA 二次开发里BCGUI 是绕不开的一块。它负责把脚本能力变成可交互的窗口让工程师点按钮、填输入框就能触发计算或数据处理。BCGUI Examples 则是官方给的一组蓝本覆盖了从最简单的窗口创建到列表视图、进度条、标签页容器等复杂交互。很多人第一次打开这些示例时代码能看懂但真要在本地跑起来、看到回调触发、确认日志输出中间总会卡在环境变量、脚本加载路径、Base URL 配置这些环节上。这篇内容面向的是刚接触 ANSA 二次开发、想用 BCGUI Examples 跑通第一个脚本的读者。我会以官方示例为蓝本把脚本加载、界面回调、调试输出这条最小闭环拆开给出可复制的环境变量与 Base URL 配置片段并附上逐步验证动作。如果你之前只写过 ANSA 的普通脚本没碰过 BCGUI那这篇正好可以跟着做。核心检索词先明确ANSA 二次开发、BCGUI Examples、脚本加载、回调函数、Base URL 配置。这几个词会贯穿全文也是你在搜索时最可能用到的组合。我试过把 BCGUI 示例直接丢进 ANSA 的脚本编辑器里运行结果窗口一闪而过或者回调函数根本没被调用。后来发现问题往往不在代码本身而在脚本加载方式和运行环境。BCGUI 的窗口对象需要正确的生命周期管理回调函数需要以字符串形式注册数据传递需要理解 BCSetUserDataKey 和 BCGetUserDataKey 的用法。这些细节在官方文档里分散在各处示例代码又省略了部分上下文所以第一次跑通需要一点耐心。下面我会先讲清楚 BCGUI Examples 到底能做什么、适合谁然后给出 TaoToken 的前置配置接着是可复制的配置片段和验证请求最后是常见报错排查。整个流程你可以在本地复现不需要额外的硬件或特殊权限。1.1 BCGUI Examples 能做什么适合谁BCGUI 是 ANSA 内置的 GUI 构建模块全称是 Basic Custom GUI。它提供了一组函数让你用脚本创建窗口、按钮、输入框、列表、进度条等控件。BCGUI Examples 则是官方随文档提供的一组示例脚本每个示例聚焦一个或几个控件的用法。从 excerpt 里可以看到第一个示例是伪代码的代码实现。要让一个 widget 显示出来必须调用 BCShow。BCShow 会递归调用子 widget 的显示逻辑所以只需要对顶层 BCWindow 调用一次 BCShow整个窗口树就会显示出来。BCWindowCreate 里的 BCOnExitDestroy 选项意味着窗口关闭时会被销毁另一个选项 BCOnExitHide 不推荐使用因为错误使用可能导致内存泄漏。第二个示例创建了一个带两个 BCLineEdit 和一个 BCPushButton 的窗口。上面的 BCLineEdit 接受 double 输入按下按钮时触发平方根计算结果写到下面的输出 BCLineEdit。BCPushButton 按下时把计算值打印到 Output 窗口。两个回调函数都把输出 BCLineEdit 作为数据传递。这里还提到了 BCSetUserDataKey 和 BCGetUserDataKey用于传递更多数据。第三个示例创建了一个 BCListView填充当前 ANSA 数据库里所有的 PSHELL。如果 PSHELL 太多会用 BCProgressBar 替代 BCLineEditPath 来显示进度处理完再换回来。这里用了 BCWidgetStack 来实现这个效果。列表项显示 visibility、Color、PID、Name、Element number、MID、FROZEN_ID。可见性可以通过复选框控制双击打开实体卡编辑右键从列表移除但不删除 PSHELL。Name 和 MID 可以通过列表修改MID 会校验有效性无效则恢复旧值并在 BCListViewInfoBox 显示警告。列表有多条件过滤器BCListView 本身放在 BCWidgetExpand 里可以扩展到全尺寸而不改变 BCWindow 大小。BCLineEditPath 在列表顶部用于加载新数据库触发列表更新。第四个示例演示了容器 widget 的用法比如 BCDrawerGrids、BCToolBoxes、BCTabWidgets。还演示了 widget 状态如何保存到当前 xml 文件并按需读取。BCWindow 的位置和大小是自动保存的。示例里创建了一个名为 AutoSavingSettings 的 BCWindow包含一个带两个标签的 BCTabWidget。第一个标签包含 BCToolBox第二个包含 BCButtonLineEdit、BCGridLayout、BCTextEdit 和 BCLabelTicker。只有第一个标签的 widget 状态可以保存到 xml所以 BCDialogButtonBox 里的两个额外按钮只在当前标签时启用。当前标签变化时BCWindow 的 BCCaption 会变但 BCName 必须唯一且不变因为所有设置都以这个名称保存到 xml。这些示例覆盖了 BCGUI 的核心用法窗口创建、控件布局、回调注册、数据传递、状态保存、列表操作、进度显示。适合的人群包括ANSA 二次开发初学者、需要给脚本加界面的工程师、想理解 BCGUI 回调机制的开发者。如果你已经能写 ANSA 脚本但想让脚本更好用、更易交付BCGUI 是值得投入时间的方向。1.2 为什么要把 Base URL 改到 TaoToken在 ANSA 二次开发里脚本本身是本地运行的但如果你想让脚本具备调用大模型的能力比如自动生成注释、智能补全、代码解释就需要一个稳定的 API 入口。TaoToken 提供的就是这样一个入口它兼容常见的 API 调用方式你可以把 Base URL 指向它然后用统一的 Key 来管理调用。把 Base URL 改到 TaoToken 的好处是你不需要在脚本里硬编码多个供应商的地址也不需要为每个模型单独配置。一个 Base URL一个 Key就能在 ANSA 脚本里调用不同的模型。对于 BCGUI Examples 来说这意味着你可以在回调函数里加入模型调用比如点击按钮后把输入框的内容发给模型把返回结果显示在输出框里。TaoToken 的 API 地址是 https://taotoken.net/api官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。你可以在官网注册后获取 API Key然后在环境变量或脚本配置里设置 Base URL 和 Key。需要注意的是TaoToken 是一个合法的 API 服务入口不是灰色中转。它的使用方式符合常规的 API 调用规范你只需要按照文档配置 Base URL 和 Key 即可。1.3 环境变量与 Base URL 配置片段在 ANSA 脚本里你可以通过环境变量来管理 Base URL 和 API Key这样脚本本身不需要硬编码敏感信息。下面是一个可复制的配置片段你可以放在 ANSA 的启动脚本里或者放在系统的环境变量里。# ANSA 二次开发环境变量配置示例 import os # 设置 TaoToken 的 Base URL os.environ[TAOTOKEN_BASE_URL] https://taotoken.net/api # 设置 API Key实际使用时请替换为你自己的 Key os.environ[TAOTOKEN_API_KEY] sk-your-actual-key-here # 设置默认模型 ID os.environ[TAOTOKEN_MODEL_ID] claude-3-5-sonnet # 在脚本中读取 base_url os.environ.get(TAOTOKEN_BASE_URL) api_key os.environ.get(TAOTOKEN_API_KEY) model_id os.environ.get(TAOTOKEN_MODEL_ID) print(fBase URL: {base_url}) print(fModel ID: {model_id})如果你使用的是 JSON 配置文件可以这样写{ taotoken: { base_url: https://taotoken.net/api, api_key: sk-your-actual-key-here, model_id: claude-3-5-sonnet, timeout: 30 } }在 ANSA 脚本里读取 JSON 配置import json with open(taotoken_config.json, r, encodingutf-8) as f: config json.load(f) base_url config[taotoken][base_url] api_key config[taotoken][api_key] model_id config[taotoken][model_id]如果你用的是 TOML 格式[taotoken] base_url https://taotoken.net/api api_key sk-your-actual-key-here model_id claude-3-5-sonnet timeout 30读取 TOMLimport tomllib with open(taotoken_config.toml, rb) as f: config tomllib.load(f) base_url config[taotoken][base_url] api_key config[taotoken][api_key] model_id config[taotoken][model_id]这些配置片段可以直接复制到你的 ANSA 脚本项目里。注意把 api_key 替换成你自己的 Key不要提交到公开仓库。1.4 脚本加载与回调注册的最小闭环BCGUI 示例跑通的关键在于理解脚本加载和回调注册的流程。下面以第二个示例为蓝本给出一个最小闭环。首先创建一个 BCWindow并设置 BCOnExitDestroy# 创建 BCWindow window_name MyFirstBCGUI w BCWindowCreate(window_name, BCOnExitDestroy)然后创建两个 BCLineEdit 和一个 BCPushButton# 创建输入 BCLineEdit input_edit BCLineEditCreate(w, Input, ) # 创建输出 BCLineEdit output_edit BCLineEditCreate(w, Output, ) # 创建 BCPushButton button BCPushButtonCreate(w, Calculate, sqrt)接下来定义回调函数。回调函数是普通脚本函数名称以字符串形式传递给 BCGUI 函数def on_sqrt_pressed(data): # data 是传递进来的输出 BCLineEdit input_value BCLineEditGetText(input_edit) try: value float(input_value) result value ** 0.5 BCLineEditSetText(data, str(result)) except ValueError: BCLineEditSetText(data, Invalid input) def on_print_pressed(data): # data 是传递进来的输出 BCLineEdit result BCLineEditGetText(output_edit) print(fCalculated value: {result})注册回调# 注册回调把 output_edit 作为数据传递 BCPushButtonSetFunction(button, on_sqrt_pressed, output_edit)注意BCPushButtonSetFunction 的第二个参数是回调函数名的字符串第三个参数是用户数据。回调函数被调用时会收到这个用户数据作为参数。最后调用 BCShow 显示窗口BCShow(w)完整的脚本如下# ANSA BCGUI 最小闭环示例 window_name MyFirstBCGUI w BCWindowCreate(window_name, BCOnExitDestroy) input_edit BCLineEditCreate(w, Input, ) output_edit BCLineEditCreate(w, Output, ) button BCPushButtonCreate(w, Calculate, sqrt) def on_sqrt_pressed(data): input_value BCLineEditGetText(input_edit) try: value float(input_value) result value ** 0.5 BCLineEditSetText(data, str(result)) except ValueError: BCLineEditSetText(data, Invalid input) BCPushButtonSetFunction(button, on_sqrt_pressed, output_edit) BCShow(w)把这段脚本保存为 .py 文件在 ANSA 里通过脚本编辑器加载运行。如果一切正常你会看到一个窗口里面有输入框、输出框和按钮。在输入框里输入一个数字点击按钮输出框会显示平方根结果。1.5 验证请求与成功结果确认跑通第一个 BCGUI 示例后你需要确认回调确实被触发、日志确实有输出。下面给出逐步验证动作。第一步确认窗口显示。运行脚本后ANSA 界面应该弹出一个名为 MyFirstBCGUI 的窗口。如果窗口没有出现检查 BCShow 是否被调用以及 window_name 是否唯一。第二步确认回调触发。在输入框里输入 16点击 Calculate 按钮。输出框应该显示 4.0。如果输出框没有变化检查 BCPushButtonSetFunction 的注册是否正确回调函数名是否拼写正确。第三步确认日志输出。在 ANSA 的 Output 窗口里你应该能看到脚本的 print 输出。如果看不到检查 ANSA 的日志级别设置或者把 print 换成 ANSA 的日志函数。第四步确认 Base URL 配置生效。如果你在脚本里加入了模型调用可以在回调函数里打印 base_url 和 model_id确认读取正确。def on_sqrt_pressed(data): print(fBase URL: {os.environ.get(TAOTOKEN_BASE_URL)}) print(fModel ID: {os.environ.get(TAOTOKEN_MODEL_ID)}) input_value BCLineEditGetText(input_edit) try: value float(input_value) result value ** 0.5 BCLineEditSetText(data, str(result)) except ValueError: BCLineEditSetText(data, Invalid input)运行后Output 窗口应该显示 Base URL 和 Model ID。如果显示为空检查环境变量是否设置正确。第五步确认窗口关闭行为。按 Escape 或点击关闭按钮窗口应该被销毁。如果窗口隐藏了但进程还在检查 BCWindowCreate 的选项是否为 BCOnExitDestroy。1.6 常见报错排查在跑 BCGUI Examples 的过程中你可能会遇到一些报错。下面列出几个常见的。报错一401 Unauthorized。如果你在脚本里调用了模型 API但返回 401说明 API Key 无效或未设置。检查环境变量 TAOTOKEN_API_KEY 是否设置Key 是否过期。报错二local proxy failed。这个报错通常出现在网络配置层面。检查你的 Base URL 是否指向 https://taotoken.net/api不要有多余的路径或参数。报错三reading choices 相关错误。如果你在解析模型返回的 JSON 时遇到 reading choices 报错说明返回结构不符合预期。检查请求的 model_id 是否正确以及 API 版本是否匹配。报错四OAuth 相关错误。如果你使用了 OAuth 认证方式检查 token 是否过期刷新 token 的流程是否正确。报错五回调函数未定义。如果点击按钮后报错说回调函数未定义检查函数名是否与注册时的字符串一致函数是否在注册之前定义。报错六窗口名称重复。如果创建窗口时报错说名称重复检查是否有其他窗口使用了相同的 BCName。BCWindow 的名称必须唯一。报错七内存泄漏。如果窗口关闭后内存没有释放检查是否使用了 BCOnExitHide 而不是 BCOnExitDestroy。官方强烈建议使用 BCOnExitDestroy。报错八BCListView 不更新。如果修改了数据但列表没有刷新检查是否在修改后调用了列表更新函数或者是否在正确的时机触发了更新。1.7 接入文档与 API Keys 获取如果你还没有 TaoToken 的 API Key可以访问 API Keys 页面获取https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。获取后按照上面的配置片段设置环境变量。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有详细的 API 调用说明和参数列表。你可以对照文档确认 Base URL、请求头、请求体的格式。如果你需要长期在 ANSA 里做编码和 Agent 相关的开发可以考虑 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。它提供了更适合持续编码场景的配置方式。如果你想先验证模型是否可用可以直接在模型对话页面测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。输入一段文本看看返回是否正常。控制台在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content你可以在这里管理 Key、查看用量、调整配置。1.8 把 BCGUI 示例扩展成实用工具跑通第一个示例后你可以基于 BCGUI Examples 扩展出更实用的工具。比如把第三个示例的 BCListView 改造成一个 PSHELL 批量重命名工具或者把第四个示例的标签页容器用来组织多个功能模块。扩展时注意几点回调函数尽量保持简短复杂逻辑放到单独的函数里数据传递优先使用 BCSetUserDataKey 和 BCGetUserDataKey避免全局变量窗口名称保持唯一避免冲突状态保存依赖 BCName不要随意修改。如果你在扩展过程中遇到问题可以回到官方示例对照看看对应的控件用法。BCGUI 的函数命名比较规范BC 开头后面跟控件名和操作名比如 BCLineEditCreate、BCPushButtonSetFunction、BCListViewAddItem。熟悉这个命名规律后查文档会快很多。最后记得把配置文件和脚本分开管理不要把 API Key 硬编码在脚本里。用环境变量或配置文件读取这样脚本可以安全地分享和版本控制。
返回列表