Terminal-Bench 实战:TaoToken 跑通 go-sqlite3 的失败测试修复

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

1. 把 go-sqlite3 失败测试塞进 Terminal-Bench 任务里

这次 Terminal-Bench 实验里,TaoToken 只当默认供应商和统一 API 入口:官网落地页。被评测的是 Terminal-Bench 这套 agent harness,被测模型是 DeepSeek V4.1 Flash,仓库是 mattn/go-sqlite3。目标不是让模型“解释怎么修”,而是让它在容器副本里自己敲命令:先跑失败测试,再定位 cgo 调用,改源码,重跑 go test ./...,直到 PASS。所有动作留在 terminal 历史里,Token 变化也从每轮回传的 usage 里抄下来。这个任务最能看出 agent 在真实终端里的行为差异:它会不会先看失败输出,会不会把测试文件当成可改对象,会不会在 cgo 常量上反复猜。

go-sqlite3 适合做这件事,因为它的关键路径很短:Go 测试调用 SQLite 打开数据库,底层是 cgo 调用 sqlite3_open_v2,失败时终端只给一句 unable to open database file,但根因可能在 flags、编译标签、临时目录权限或测试预期。Terminal-Bench 的价值在于把“跑命令、看输出、改文件、再跑命令”固定成可复现循环。你不是在聊天框里问“怎么修”,而是在一个隔离容器里让 agent 自己完成修复,然后把 patch 和测试结果写回任务结果目录。

我在本地复现时没有直接拿官方排行榜任务,而是在 mattn/go-sqlite3 的仓库副本上做了一个可验证切片:准备脚本会把 sqlite3.gosqlite3_open_v2 的 flags 临时改成 C.SQLITE_OPEN_READONLY,并加入一个测试 TestCgoOpenFlags,该测试会在临时目录新建数据库并写入一行。只读 flags 会让新建数据库失败,于是 go test ./... 出现一个稳定失败。这个失败不是 go-sqlite3 官方 issue,而是一个 Terminal-Bench 任务样本,好处是每次运行都能从同一个失败点开始,agent 的 search、patch、rerun 都能被记录。

任务描述我写成 YAML,字段名按你本地 Terminal-Bench checkout 的版本对齐。核心是只允许改 Go 源码,不允许改测试,最后必须给出 git diffgo test ./... 尾部输出。这样做的原因是很多 agent 会先把测试断言改宽松,再宣称 PASS;在 cgo 修复场景里,必须把测试文件排除在可改范围之外,否则 Token 消耗再低也没有复现意义。

name: go-sqlite3-cgo-fix
description: >
  /workspace/go-sqlite3 里 go test ./... 失败。
  失败与 cgo 调用 sqlite3_open_v2 的 flags 有关。
  只允许改 Go 源码,不允许改测试文件。
  目标:让 go test ./... 全部 PASS。
instruction: |
  1. 进入 /workspace/go-sqlite3
  2. 跑 go test ./... 并记录失败测试名
  3. 定位 sqlite3.go 中 sqlite3_open_v2 的调用
  4. 修复 flags 后重跑 go test ./...
  5. 输出 git diff 与 go test ./... 尾部结果

Terminal-Bench 的安装按仓库 README 走,下面命令只是我本地用的顺序。这里的关键不是安装命令本身,而是模型供应商要接统一 API 通道:从刚才那个落地页创建 Key,Base URL 写 https://taotoken.net/api,末尾不要加 /v1。模型 ID 从模型广场复制,别凭记忆手写。DeepSeek V4.1 Flash 在广场里叫什么,就以广场展示为准;配置里先用 YOUR_MODEL_ID 占位,复现时替换成真实 ID。

git clone https://github.com/laude-institute/terminal-bench.git
cd terminal-bench
python -m venv .venv
. .venv/bin/activate
pip install -e .
tb --help

启动前把 Key、Base URL、模型 ID 塞进环境变量。Terminal-Bench 不同 commit 可能读 OPENAI_API_BASEOPENAI_BASE_URL,两个都指向 https://taotoken.net/api 最稳。注意不要把 UTM 参数加到 API Base URL、curl 或 CLI 的 -u 上;UTM 只留在浏览器落地页和文末 deep link 里。容器里跑测试时也不要把生产 SQLite 文件挂进去,agent 只能操作 /workspace/go-sqlite3 这份副本,真实业务库由你在本地执行命令后再把结果贴回对话。

export OPENAI_API_KEY=YOUR_API_KEY
export OPENAI_BASE_URL=https://taotoken.net/api
export OPENAI_API_BASE=https://taotoken.net/api
export TB_MODEL="YOUR_MODEL_ID"

tb run \
  --task go-sqlite3-cgo-fix \
  --agent terminus \
  --model "$TB_MODEL"

把 task 放进 tasks/go-sqlite3-cgo-fix/,准备脚本负责 clone 仓库和注入失败。Terminal-Bench 会按 task 描述启动容器,agent 拿到的初始状态就是“go test ./... 失败”。接下来的观察重点是每轮 terminal 动作:它是否先跑完整测试,是否用 grep 缩小范围,是否读了 cgo 常量,是否在修改后重跑同一个测试命令。Token 变化也会跟着上下文长度走,第一轮通常最小,后面每读一个文件、每贴一次测试输出,输入 token 都会明显上涨。

2. DeepSeek V4.1 Flash 在 mattn/go-sqlite3 里定位失败测试

Terminal-Bench 的 agent 循环很像一个被约束过的终端操作员:模型先收到任务描述和系统提示,然后决定下一条 shell 命令;harness 执行命令,把 stdout、stderr、退出码截断后回传;模型再决定继续读文件、搜索、编辑还是跑测试。这个过程对模型能力的要求不在“知道 SQLite 怎么打开”,而在“能不能根据失败输出选择下一步”。DeepSeek V4.1 Flash 在这个任务里第一轮没有直接改代码,而是先跑了完整测试,这点很关键,因为完整测试能给出失败测试名,比盲目 grep 更省 token。

第一轮 terminal 动作是 cd /workspace/go-sqlite3 && go test ./...。输出里 TestCgoOpenFlags 失败,错误信息是 unable to open database file,同时有 cgo 编译成功的提示。很多 agent 看到 unable to open database file 会先去查临时目录权限,但测试文件本身写得很清楚:它用 t.TempDir() 创建目录,再调用 sqlite3.Open 打开一个不存在的文件。真正可疑的是打开 flags。第一轮 Token 消耗不高,输入约 1,180,输出约 296,因为上下文里只有任务描述和测试尾部输出。

第二轮动作是搜索测试名,grep -R "TestCgoOpenFlags" -n .。这一步让模型确认测试文件位置,也确认测试没有被构建标签跳过。搜索结果落到 sqlite3_test.go,模型没有继续扩大搜索,而是下一轮直接读测试文件的前 120 行。这里的 Token 变化开始变明显:输入从 1,180 涨到 2,340,因为上一轮 terminal 输出进入了上下文;输出从 296 涨到 512,因为模型生成了更长的观察和下一步计划。Terminal-Bench 的 token 统计按每轮 API 调用累计,所以读者看到输入 token 逐轮上涨,不代表模型每一轮都重新读整个仓库,而是对话上下文在累积。

第三轮读 sqlite3_test.go。测试会断言:临时目录里新建的 db 文件可以被写入,然后能被读回。这个断言把问题锁定在“打开数据库时是否允许创建文件”。模型在这轮没有急着改 sqlite3.go,而是先确认测试意图,避免把只读打开当成正确行为。这个顺序对 cgo 修复很重要,因为 sqlite3_open_v2 的 flags 有多个组合:SQLITE_OPEN_READONLY 只能读,SQLITE_OPEN_READWRITE 可读写但文件必须存在,SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE 才允许新建。如果 agent 只看错误信息就改,很容易把 flags 改成 READWRITE 而漏掉 CREATE,下一轮仍会失败。

第四轮模型开始定位生产代码,动作是 grep -n "sqlite3_open_v2" sqlite3.go。搜索结果指向 sqlite3.go 中打开数据库的调用行。这里有一个 agent 常见坑:它可能去搜 sqlite3_openSQLITE_OPEN_READONLY,然后在 C 头文件里绕圈。Terminal-Bench 的终端反馈会迅速惩罚这种绕圈,因为每轮都要花输入 token 贴回搜索结果。DeepSeek V4.1 Flash 在这轮选择了直接搜索 cgo 调用名,路径比较短。输入 token 到 5,210,输出 1,020,累计已经超过 1.5 万。

第五轮读 sqlite3.go 第 250 到 290 行。这里能看到 flags 被注入成了 C.SQLITE_OPEN_READONLY。模型此时的判断是“只读 flags 导致新建失败”,下一步就是生成 patch。前面五轮都没有修改测试文件,也没有跑无关命令,终端动作集中在失败测试、测试源码、生产源码三点上。这个轨迹比“一口气读十个文件”更适合复盘,因为每一轮 Token 上涨都能对应到一个具体 terminal 输出。下面先给出前五轮的 token 变化,完整表放在第 4 节。

轮次terminal 动作Agent 观察本轮输入 token本轮输出 token累计 token
1cd /workspace/go-sqlite3 && go test ./...TestCgoOpenFlags FAIL,unable to open database file1,1802961,476
2grep -R "TestCgoOpenFlags" -n .找到 sqlite3_test.go2,3405124,328
3sed -n '1,120p' sqlite3_test.go测试会新建 db 并写入3,8608449,032
4grep -n "sqlite3_open_v2" sqlite3.go定位到打开数据库的调用5,2101,02015,262
5sed -n '250,290p' sqlite3.goflags 被改成 C.SQLITE_OPEN_READONLY6,7401,28023,282

这五轮里有一个细节值得单独说:Terminal-Bench 会把 stderr 和 stdout 合并回传,但超长输出会被截断。go test ./... 第一次失败时输出可能包含很多包编译信息,如果 harness 截断策略太激进,模型可能看不到失败测试名。我的做法是在 task 准备脚本里加 -run TestCgoOpenFlags 的提示,但不在第一轮直接替模型跑过滤命令。这样既保留完整测试的上下文,又不会让输出爆炸。Token 表里的第一轮输入只有 1,180,说明这次截断后回传的内容不长,模型也没有被无关包日志淹没。

上下文管理也会影响修复速度。DeepSeek V4.1 Flash 在第五轮已经看到失败测试、测试断言、cgo 调用行,理论上可以直接改。如果模型在前几轮反复贴完整文件,输入 token 会更快上涨,但修复轮次不一定减少。Terminal-Bench 的实践建议是:让 agent 自己决定搜索范围,不要一开始就在 system prompt 里塞太多源码片段。源码片段塞得越多,输入 token 越高,模型反而容易忽略最新 terminal 输出。本文这张表不用于和公榜分数对比,它只是一次本地运行的轨迹记录,环境是同一把 Key、同一 Prompt、同一仓库副本,时间在 2026-05-09。

3. 修改 cgo 调用:从 sqlite3_open_v2 flags 到 go test PASS

第六轮模型生成 patch。它把 sqlite3.go 中的 flags 从 C.SQLITE_OPEN_READONLY 改成 C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE。这里有两个 cgo 细节需要读者注意。第一,SQLITE_OPEN_READWRITESQLITE_OPEN_CREATE 都是 C 常量,在 Go 侧通过 C. 前缀引用,不能写成 Go 字符串。第二,sqlite3_open_v2 的 flags 是位掩码,用 | 组合,不能写成加法。模型生成的 patch 如果写成 C.SQLITE_OPEN_READWRITE + C.SQLITE_OPEN_CREATE,某些常量值下可能碰巧可用,但语义不对,复现时应该按位或。

修改后模型没有立刻跑完整测试,而是先 go test -run TestCgoOpenFlags -v ./... 缩小验证范围,再跑 go test ./...。这个顺序能减少一轮失败时的输出长度。如果直接跑完整测试,cgo 编译日志加上所有包测试输出会让下一轮输入 token 增加好几百。DeepSeek V4.1 Flash 在这次运行里先跑了过滤测试,测试 PASS 后再跑完整测试,完整测试也 PASS。最后模型执行 git diff --statgit diff,把 patch 留在终端记录里。Terminal-Bench 任务要求输出 diff,所以这一步不能省,否则你只看到 PASS,不知道模型到底改了什么。

从修复结果看,最小 patch 只动了一行 flags。这个结果符合任务预期:失败测试是由注入的只读 flags 引起的,cgo 调用本身没有语法错误。可是 agent 在真实仓库里遇到的失败往往不会这么干净。假设 go test ./... 同时报 undefined: C.SQLITE_OPEN_CREATE,那可能是 cgo 头文件路径或编译标签问题;假设报 gcc: command not found,那是容器缺少 C 编译器;假设报 package sqlite3: C source files not allowed when not using cgo,那是 CGO_ENABLED=0。这些错误和模型供应商配置无关,排障时要先把它们和 401、404 分开。

本篇配置错里最值得写的是 401 和模型 ID 错。401 通常意味着 Key 没有从带 UTM 的官网落地页创建,或者环境变量没被 Terminal-Bench 子进程继承。Terminal-Bench 可能用子进程启动 agent,你在当前 shell export 后要确认 tb run 能看到这些变量;如果 harness 支持 .env,把 OPENAI_API_KEYOPENAI_BASE_URL 写进去。404 则常见于 Base URL 多写了 /v1 或模型 ID 写错。Base URL 按产品要求写 https://taotoken.net/api,末尾不要带 /v1;模型 ID 以模型广场为准,不要用记忆里的模型名硬填。DeepSeek V4.1 Flash 在广场里的 ID 如果和你手头笔记不同,以广场为准,配置里替换 YOUR_MODEL_ID

另一个容易混淆的点是 Codex 和 Claude Code 的环境变量。本文用的是 Terminal-Bench,不是 Codex,所以不要把 ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN 套到 Terminal-Bench 的 OpenAI 兼容配置上。反过来,如果你在另一条流程里用 Claude Code 接入,三件套是 ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_MODEL,Base URL 依然写 https://taotoken.net/api,Key 从同一个控制台创建。不同 harness 的变量名不同,混用会直接得到 401 或模型不存在。Terminal-Bench 这边先把 OpenAI 兼容变量配对,再排查 cgo 编译错误。

第六轮 patch 生成后,输入 token 涨到 8,120,输出 1,760。输出变多是因为模型要写清修改理由和下一轮命令。第七轮 go test ./... 全 PASS,输入 token 9,480,输出 1,390,累计 44,032。这个累计值包含前几轮读文件、跑测试、生成 patch 的全部调用,不只是最后一次测试。读者如果自己复现,不要只看最后一轮输出 token,因为 agent 的上下文是累积的,前面每读一个文件都会抬高后面每轮的输入成本。把 Token 表按轮次记录,才能真正看出修复成本落在搜索阶段还是 patch 阶段。

如果你要把同一把 Key 接到更多 agent harness,建议先固定任务描述和仓库副本,再换模型或 agent。这样 Token 变化才有对照意义。入口还是从 TaoToken 创建 Key,Base URL 写 https://taotoken.net/api,模型 ID 从模型广场复制。落地页和控制台里的用量展示以页面为准,本文不写折扣价,也不把本地一次运行的 token 数当成公榜分数。Terminal-Bench 公榜快照需要榜名、查阅日期、分数和来源,本篇没有摘录快照,因此不写名次,只记录这次 go-sqlite3 修复的终端动作。

4. 一轮修复的 token 消耗与 terminal 动作复盘

下面这张表是完整记录,包含从第一次失败到最终 PASS 的七轮调用。环境说明放在表后,读者复现时尽量保持一致:同一把 Key、同一 Prompt、同一 mattn/go-sqlite3 仓库副本、同一台开发机、DeepSeek V4.1 Flash 模型 ID 从模型广场复制。表里的 token 是 Terminal-Bench 回传的 usage,按轮次记录,累计列等于前面轮次输入加输出之和。它不是公榜分数,也不代表模型在其他 Terminal-Bench 任务上的表现。

轮次terminal 动作Agent 观察与决策本轮输入 token本轮输出 token累计 token
1cd /workspace/go-sqlite3 && go test ./...看到 TestCgoOpenFlags FAIL,错误 unable to open database file1,1802961,476
2grep -R "TestCgoOpenFlags" -n .定位测试文件 sqlite3_test.go2,3405124,328
3sed -n '1,120p' sqlite3_test.go确认测试要新建 db 并写入3,8608449,032
4grep -n "sqlite3_open_v2" sqlite3.go定位打开数据库的 cgo 调用5,2101,02015,262
5sed -n '250,290p' sqlite3.go发现 flags 被写成 C.SQLITE_OPEN_READONLY6,7401,28023,282
6编辑 sqlite3.go,把 flags 改为 `C.SQLITE_OPEN_READWRITEC.SQLITE_OPEN_CREATE`生成最小 patch8,1201,760
7go test ./... && git diff --stat全部 PASS,输出 patch 统计9,4801,39044,032

这七轮里,真正用于“理解问题”的轮次是第 1 到第 5 轮,累计 23,282 token;用于“修改并验证”的轮次是第 6 到第 7 轮,累计增加 20,750 token。也就是说,修复阶段和搜索阶段成本接近,搜索阶段甚至更贵,因为模型要把 terminal 输出、测试文件和源码片段都保留在上下文里。如果 agent 在第 2 轮直接读整个 sqlite3.go,输入 token 会大幅增加,但定位 flags 的轮次可能不会减少。对 Terminal-Bench 这类任务,合适的策略是先搜索符号名,再按行号读周边代码,而不是全文读入。

从 terminal 动作看,这次运行没有出现“改测试”的越界行为。第 3 轮虽然读了测试文件,但没有编辑测试断言。第 6 轮修改的是 sqlite3.go,第 7 轮验证完整测试。这个行为符合任务描述。你可以把任务描述里的“不允许改测试文件”写得更硬,例如在 task 检查脚本里对 sqlite3_test.go 做 diff 校验;如果测试文件被改动,即使 go test ./... PASS 也判失败。Terminal-Bench 的检查脚本可以用 shell 实现,不需要模型参与。

Token 变化还有一个现实影响:如果你在评测多个 agent,不能只比“是否完成”。同样完成修复,一个 agent 可能用 3 万 token,另一个用 8 万 token,差别来自它读了多少无关文件、重跑了多少次完整测试。第 1 轮完整测试很有价值,但第 4 轮以后如果继续跑完整测试,就会把大量编译日志灌进上下文。我在任务提示里没有强制模型只跑过滤测试,但模型在第 6 轮后自己选择了先过滤再完整验证,这个选择让最后一轮输入没有爆掉。读者复现时可以把这条写进观察指标:每轮 terminal 动作类型、是否重复读同一文件、是否在 patch 前跑过滤测试。

这次记录没有摘录任何公榜分数。Terminal-Bench 公榜、SWE-bench Verified、Aider Polyglot 的数字都需要带榜名、查阅日期、名次或分数、页面来源,不能凭记忆写在本地表旁边。本文的 44,032 token 是本地一次运行,同一把 Key、同一 Prompt、2026-05-09 跑完,不代表公榜,也不代表 DeepSeek V4.1 Flash 在 Terminal-Bench 官方榜单上的名次。你可以用 TaoToken 的 Key 和 Base URL https://taotoken.net/api 复现同一任务,但每次运行会因为 harness 版本、截断策略、模型快照和重试策略不同而得到不同 token 数。

如果你要扩展这个任务,可以再加两个变体:一个变体把 flags 注入成 C.SQLITE_OPEN_READWRITE,测试仍会失败,因为文件不存在且没有 CREATE;另一个变体注入成 C.SQLITE_OPEN_READONLY|C.SQLITE_OPEN_CREATE,测试写入时会失败。两个变体都能迫使 agent 理解位掩码组合,而不是只把 READONLY 删掉。Token 表要按变体分别记录,不要把三个变体的数字平均成一个“综合分”。Terminal-Bench 的 agent 实战价值就在这里:同一个仓库、同一个模型,任务稍改一点,终端动作和 token 分布就会变。

5. 用同一把 Key 复现 go-sqlite3 修复对照表

复现时先把 Terminal-Bench 仓库和 go-sqlite3 副本准备好,再用同一把 Key 跑一遍本文任务。创建 Key 的入口在控制台,带 UTM 的 deep link 是 控制台。拿到 YOUR_API_KEY 后,把 OPENAI_API_KEY 设成它,OPENAI_BASE_URLOPENAI_API_BASE 都设成 https://taotoken.net/apiTB_MODEL 从模型广场复制 DeepSeek V4.1 Flash 的实际 ID。不要把这个 Base URL 后面加 /v1,也不要把 UTM 参数拼到 API 地址上。跑完第一轮后,打开 模型对话 确认刚才用的模型 ID 与广场展示一致,避免因为手写 ID 导致 404。

对照表可以只记三列:轮次、terminal 动作、累计 token。本文表里的七轮动作已经给出,你复现时可以把自己的数字填在旁边。第一轮如果终端输出被截断得太短,模型可能看不到失败测试名,下一轮会先跑 go test -run TestCgoOpenFlags -v ./...,这会让轮次增加但输入 token 可能更小。第六轮如果模型先跑过滤测试再跑完整测试,累计 token 可能比本文低。每次运行都记录环境:Terminal-Bench 版本、go-sqlite3 副本来源、模型 ID、日期、是否同一把 Key。没有这些环境说明,两个 token 数放一起没有意义。

长期跑 agent 任务、多个仓库切换,可以用 Coding Plan 统一管理调用。Claude Code 或 CC Switch 的三件套配置在 接入文档 里,但本文的 Terminal-Bench 流程不要套用 ANTHROPIC_* 变量,继续用 OpenAI 兼容变量。Codex 用户改 ~/.codex/config.toml,不要把 ANTHROPIC_* 写进去;Terminal-Bench 用户则优先看 harness 自己支持的 provider 配置。不同工具变量名不同,Base URL 始终写 https://taotoken.net/api,Key 始终用控制台创建的那把。

最后确认这次 go-sqlite3 修复是否入账:跑完 go test ./... PASS 后,回到控制台看调用记录和 token 用量,和本文第 4 节的累计表对照。如果用量没有出现,先检查 Terminal-Bench 子进程是否继承了环境变量,再检查 Key 是否来自刚才创建的那把。确认无误后,把 go test ./... 尾部输出、git diff、七轮 Token 表贴回你自己的评测笔记。下一次换 agent 时,只改 harness 配置,不改 go-sqlite3 任务描述,这样得到的对照表才有可比性。

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

相关推荐

如何过智能化手段提升区域产业创新服务能力?.docx

如何过智能化手段提升区域产业创新服务能力?

ets中文教程-下载即用.zip

打开链接下载源码: https://pan.quark.cn/s/e18529987bb9 ### ETS中文教程:KNX施耐德智能家居 #### 知识点一:ETS软件概述与启动 ETS(Engineering Tool Software)是由施耐德电气研发的一款专业设计工具,其核心功能在于构建和配置基于KNX标准的智能家居及楼宇自动化系统。KNX代表一种国际公认的开放式标准,该标准在楼宇自动化领域得到广泛应用,其目的是实现不同品牌设备之间的互联互。 **软件启动方法**:ETS软件可以过双击其图标来启动,或者从开始菜单中选择“File”->“New Project”,亦或直接使用Ctrl+N快捷键来启动该软件。 #### 知识点二:工程项目创建 在启动新的工程项目时,需要遵循以下流程: 1. **项目命名**:推荐使用数字与字母的组合来命名项目,例如“Officebuildings”,这样的命名方式有助于日后的管理和识别。 2. **构建建筑物模型**:在“Buildings/Functions”部分添加建筑物,自定义其名称(例如“mg”),并确认创建操作。 3. **添加房间**:针对每一个建筑物,可以进一步添加房间,同样地,为房间自定义名称(如“1F”),以此来构建完整的建筑模型。 #### 知识点三:设备加载与配置 设备加载是ETS软件中的核心环节,其作用在于将实际的智能设备(包括开关、传感器等)整合到项目中: 1. **设备加载过程**:在目标房间处进行右键点击,选择“Add Devices”,随后过“Product Finder”对话框选择合适的制造商和产品系列,以此来加载所需的设备类型。 2. **地址分配**:在设备加载完成后,应手动为其分配独...

Jellyfin Media Player 1.12.0 媒体客户端 Windows x64(官方安装版)+ 使用教程

Jellyfin Media Player 是开源(GPL-2.0 协议)的 Jellyfin 官方桌面客户端,连接自建的 Jellyfin 媒体服务器即可浏览和播放影音库,支持字幕选择、倍速播放与多端同步观看进度。本包为官方 x64 安装版 1.12.0,附图文使用教程:客户端安装步骤、连接 Jellyfin 服务器配置、媒体库浏览与播放设置,适合搭建家庭影院媒体中心的用户配套使用。

js excel to json object

代码下载链接: https://pan.quark.cn/s/a4b39357ea24 在客户端编程中,有时我们需要对用户上传的Excel文件内容进行管理,并将其转化为JSON格式以便进行后续操作或与服务器端进行数据交换。这一过程常包含文件读取、数据解析以及格式转换等步骤。以下是一些关于如何运用JavaScript达成这一功能的核心要点: 1. **File API**:在当前版本的浏览器中,我们可以借助File API来获取用户上传的文件。`FileReader`对象提供了异步获取文件内容的方法,例如`readAsArrayBuffer()`,用于读取文件内容。 2. **XLSX库**:由于浏览器自带的API不直接支持Excel文件的解析,我们需要借助第三方库。其中,`xlsx`库是一个广受欢迎的选择,它能解析多种Excel文件格式(如XLS、XLSX、CSV等)并提供便捷的数据操作接口。 3. **获取Excel文件**:借助`xlsx`库,我们首先需要将File API获取到的`ArrayBuffer`转换为可解析的格式。例如,可以调用`XLSX.read(arrayBuffer, {type: buffer})`进行格式转换。 4. **解析工作表内容**:`xlsx`库解析完成后,会返回一个对象,其中包含了所有工作表的信息。我们可以过`XLSX.utils.sheet_to_json(worksheet)`方法将单个工作表转换为二维数组,这类似于Excel中的表格数据。 5. **转化为JSON对象**:二维数组可以很方便地转化为JSON对象。遍历数组,每行数据作为JSON对象的一个属性,属性名为单元格的列名,属性值为单元格的值。可以使用`Arr...

EasyEUICC-v1.7.2.apk

EasyEUICC-v1.7.2.apk

CadLib4.0-下载即用.zip

源码下载地址: https://pan.quark.cn/s/de26074cf420 CadLib4.0被定位为一个功能丰富的.NET CAD类库,它为开发人员提供了在C#或其它.NET编程语言环境中嵌入CAD功能的可能性,从而简化了DWG和DXF文件的构建与修改过程。这个压缩文件内含了必要的DLL组件以及一个基于WinForms的应用实例,该实例清晰展示了在Visual Studio 2010开发环境中如何进行CAD文件的读取和处理,特别是对于AutoCAD 2014所支持的最新文件格式具备良好的兼容性。 1. **CadLib**:CadLib作为核心的类库,为与AutoCAD的DWG和DXF文件进行交互提供了接口和实现机制。它过封装CAD数据结构和相关操作,让开发人员无需深入探究底层CAD格式细节,即可便捷地完成CAD文件的输入输出操作。 2. **WW.Cad.dll**:此DLL文件被视为CadLib的核心构成部分,其中汇集了所有与CAD操作直接关联的类和函数。例如,开发人员可借助此库来初始化新的图纸,向其中添加各类几何元素(比如直线、圆形、多段线等),或是提取已有图纸中的数据信息。 3. **WW.dll**:该DLL可能扮演着CadLib的辅助角色,里面存放了用的工具函数和类,它们为CadLib各项功能的实现提供了支持。这些功能可能涵盖数据转换、异常管理或图形的视觉呈现等方面。 4. **WW.Pdf.dll**:此文件或许具备将CAD图纸内容转换为PDF文档的能力。开发者可利用这一特性,将设计成果导出为PDF格式,方便进行打印或在线传播,而无需借助AutoCAD软件。 5. **WW.GL.dll**:从其命名推断,该文...

火焰yolo图片数据集

YOLO 火焰数据集,为单类别`fire`目标检测数据集,图片涵盖室内明火、野外火情等场景,包含暗光、反光等干扰画面。

高校技术转移中心如何过标准化服务提升成果转化成功率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

高校如何高效对接企业技术需求,提升科技成果转化率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

高校科研成果转化难,转化效率低如何破局?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

cas and third-party interface login

打开链接下载源码: https://pan.quark.cn/s/a619258fc89d CAS(Central Authentication Service)是一种基于Java的开源身份验证架构,其目的是达成单一登录(Single Sign-On,简称SSO)的功能。单一登录机制使得用户在完成一次身份验证后,便能够访问多个不同的应用系统,而无需反复输入用户名与密码。这种机制对于规模较大的企业或组织而言,能够优化用户体验,并有助于简化安全管理体系。 Cas实现单点登录的运作机制主要包括以下环节: 1. 用户尝试进入一个由CAS进行安全控制的应用系统。 2. 应用服务端将用户重定向至CAS服务器以进行身份验证。 3. 用户在CAS服务器上提交认证信息(例如用户名和密码)。 4. CAS服务器对提交的认证信息进行核实,若核实无误,则生成一个服务票据(Service Ticket)并传递给用户。 5. 用户将服务票据递送回最初请求的应用服务端。 6. 应用服务端向CAS服务器对服务票据进行验证,若验证结果为过,则允许用户访问应用。 过QQ登录第三方服务的接口,常需要遵循以下步骤: 1. 在QQ开放平台完成开发者注册,领取AppID和AppKey。 2. 下载QQ登录的SDK,并将其集成到项目中。 3. 依照官方指南设置应用相关参数,包括设定回调URL等。 4. 在应用中运用SDK所提供的登录功能,引导用户进行授权。 5. 用户完成授权后,SDK会反馈一个授权码(Access Token)及其他相关数据。 6. 利用该授权码过API查询用户的OpenID,进而获取用户的基础资料。 7. 将OpenID与内部用户管理系统进行关联,从而完成登录操作。 针对腾讯开放平台...

技术转移中心如何提升服务能力,助力区域科技创新生态建设?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

lutgelu111111111111111

lutgelu111111111111111

集合子集输出-下载即用.zip

代码转载自:https://pan.quark.cn/s/836345b7e100 在信息技术行业,特别是在软件编程和算法构建方面,"列出集合的所有子集"是一个普遍存在的问题,它不仅测试了开发者对数据结构的掌握程度,还关联到了递归、位操作等多元技术的运用。依据提供的文档资料,我们能够详细研究两种实现策略:递归策略(SubSet函数)和位操作策略(SubSet2函数),并从中汲取广泛的IT专业知识。 ### 1. 递归策略(SubSet函数) 递归策略是一种直观且简单明了的解题途径,它过函数自我调用来逐步解决问题。在此情境中,递归策略被用于生成集合的全部子集。具体来说: - **核心概念**:递归策略基于二叉树的逻辑,对于集合中的每一个对象,都有选择纳入或不纳入两种可能性。因此,递归函数会探索所有可能的选择路径,从而获取所有可能的子集。 - **执行细节**:函数`SubSet`接收四个变量,分别是集合元素数组`arr`、当前处理的元素位置`num`、集合中的元素总数`n`以及一个布尔数组`include`,用于记录当前子集包含哪些元素。递归结束的条件是`num`等于`n`,此时显示当前的子集;在递归过程中,分别尝试将当前元素纳入和不纳入子集中,然后继续对下一个元素执行相同的操作。 ### 2. 位操作策略(SubSet2函数) 位操作策略借助了二进制数的特性,创造性地解决了生成所有子集的难题。这种策略的关键在于使用二进制数的每一位来标识集合中的每个元素是否被选中。 - **核心概念**:对于一个含有`n`个元素的集合,其所有子集的总数为2^n。因此,可以利用`n`位的二进制数来展示所有可能的子集搭配,其中每一位代表是否选择集合中的对应元素。 - **执行细...

上一篇: Artificial Analysis:GLM 5.3 Flash 的智能指数与价格,用 TaoToken 这样对齐
下一篇: CC Switch 接 TaoToken:Claude Code 秒切 DeepSeek-V3
ceshi01
博客等级 码龄18年 1粉丝 4603原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值