2026/9/24 17:31:03

一天一个开源项目(第205篇):PenguinHarness - 让 AI 来构建 AI

一天一个开源项目(第205篇):PenguinHarness - 让 AI 来构建 AI 1. 为什么我想把 PenguinHarness 接上统一 Key第一次看到 PenguinHarness 的介绍时我脑子里冒出来的不是又一个 Agent 框架而是它到底怎么把一句话变成能跑的应用。这个项目由 LlamaFactory 作者 Yaowei Zheng 主导定位是本地优先的多智能体应用开发平台核心主张就一句Let AI Build AI。它把脚手架生成、代码实现、基准评估、版本优化串成一条自动链路你描述目标Agent 负责实现而且每一次工具调用都能在 Trace 视图里看到。它适合谁想快速验证 Agent 应用想法、又不想花一周搭框架的开发者需要定期跑数据分析、对成本敏感的团队以及想用本地模型或开源模型做自动化构建的人。PenguinHarness 内置了>npm install -g prismshadow/penguin-cli penguin web执行 penguin web 后浏览器打开 http://127.0.0.1:7364 就能看到 Web UI。如果你更想用桌面应用也可以去官网下载对应平台版本内置服务器不用终端。两种方式共享同一个数据目录 ~/.penguin/data/所以 Web UI 里跑的会话CLI 里也能看到。安装完成后先别急着生成应用我们先把模型配置理顺。PenguinHarness 的模型配置既可以用命令行 penguin config model add 添加也可以直接写配置文件。命令行方式适合快速试配置文件方式适合团队共享和版本管理。下面两种我都给你。3. 可复制的 config.toml 骨架与 TaoToken 接入PenguinHarness 的模型配置最终会落到数据目录下的 models 配置里。为了让你有一份能直接改的骨架我把关键字段整理成下面这份 config.toml。注意不同版本的 PenguinHarness 配置字段名可能略有差异如果某个字段不生效用 penguin config model add 生成一份默认配置再对照着改是最稳的做法。# ~/.penguin/config.toml # PenguinHarness 模型接入配置骨架 # 用 TaoToken 统一 Key 接入 OpenAI 兼容 endpoint [default] # 默认使用的模型别名对应下面 [models.xxx] 的键名 model taotoken-deepseek [models.taotoken-deepseek] # 供应商标识OpenAI 兼容协议统一填 openai provider openai # 模型 ID按 TaoToken 控制台里可用的模型名填写 model_id deepseek-v4 # TaoToken 统一 API 基址注意结尾不要多加斜杠 base_url https://taotoken.net/api # 统一 Key建议用环境变量注入不要硬编码进仓库 api_key ${TAOTOKEN_API_KEY} # 采样参数按任务类型微调 temperature 0.3 max_tokens 8192 [models.taotoken-qwen] provider openai model_id qwen-3.8-max base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} temperature 0.2 max_tokens 8192 [agent] # Agent 工作目录生成的应用默认落在这里 workspace_dir ./workspace # 是否开启工具调用审批true 时每次工具调用都会询问 require_approval true # 轨迹存储目录Trace 视图读取这里 trace_dir ~/.penguin/data/traces几个关键点解释一下。base_url 填 https://taotoken.net/api 不要写成带 /v1 的路径OpenAI 兼容客户端一般会自动补全如果你用的客户端要求带版本号再按它的要求调整。api_key 用 ${TAOTOKEN_API_KEY} 这种环境变量占位是为了避免把 Key 提交进 Git。设置环境变量export TAOTOKEN_API_KEYsk-你的TaoToken密钥如果你不想用配置文件命令行方式等价于penguin config model add \ --provider openai \ --model-id deepseek-v4 \ --base-url https://taotoken.net/api \ --api-key $TAOTOKEN_API_KEY配好之后用 penguin config model list 确认模型已经注册。如果列表里能看到 taotoken-deepseek说明配置被正确读取了。这一步别跳过很多模型调用失败其实是配置压根没加载。4. 本地启动与 Agent 调用从一句话到可运行应用配置就绪后先启动服务。两种模式# 带 Web UI penguin web # 无 UI 服务器模式适合远程或容器里跑 penguin server启动后最直接的验证方式是交互式对话penguin chat在对话里输入一句简单需求比如帮我列一下当前目录的文件结构看 Agent 是否能正常调用工具并返回结果。这一步通了说明模型接入没问题。接下来是重头戏一句话生成应用。PenguinHarness 的卖点就是从自然语言描述直接生成完整 Agent 应用。我们用一个 RAG 场景来跑penguin run -m 创建一个 RAG 应用读取 ./docs 目录支持自然语言问答执行后Agent 会走一遍脚手架生成 → 代码实现 → 基准评估 → 版本优化的流程。你会在终端看到工具调用日志在 Web UI 的 Trace 视图里看到完整的决策轨迹。生成完成后workspace 目录下会出现一个可运行的应用结构通常包含入口文件、依赖清单和运行说明。如果你想在代码里调用PenguinHarness 的 SDK 采用 async generator 模式把执行流建模成事件流每个工具调用都能审批import { createAgent, userText } from prismshadow/penguin-core; const agent await createAgent({ agentId: default_agent }); const session await agent.createSession({ workspaceDir: process.cwd(), }); for await (const output of session.run( [userText(分析 ./data/sales.csv输出月度趋势图)], { approve: async (toolCall) { console.log(即将执行: ${toolCall.name}); return allow; // 或 deny }, } )) { console.log(output); }approve 回调是这套设计里我很喜欢的一点文件读写、命令执行、网络请求每一次工具调用都经过这个钩子你可以决定放行还是拦截。配合 Trace 视图整个 Agent 的行为是可审计的不是黑盒。5. 本篇常见错排查配置和调用过程中最容易踩的坑集中在下面几类我按出现频率排一下。第一类是 base_url 写错。最常见的写法是 https://taotoken.net/api/v1 或漏掉 /api导致请求 404。正确基址是 https://taotoken.net/api 让客户端自己补路径。如果报错信息里出现 404 或 Not Found先检查这里。第二类是 Key 没生效。用 ${TAOTOKEN_API_KEY} 占位时如果环境变量没导出或者导出后没重启终端/服务配置读到的就是空字符串表现为 401 Unauthorized。排查方法echo $TAOTOKEN_API_KEY 看有没有值再确认启动 penguin 的终端和设置变量的终端是同一个。第三类是模型 ID 对不上。TaoToken 控制台里可用的模型名和你在 config.toml 里写的 model_id 必须一致写错会报 model not found。建议先在控制台确认模型列表再填进配置。第四类是工具调用被审批卡住。require_approval true 时每次工具调用都要人工确认如果你在非交互环境比如 CI里跑会一直挂起。这种场景把它设为 false或者用 SDK 的 approve 回调统一放行。第五类是数据目录权限问题。~/.penguin/data/ 下的 agents、sessions、traces、models 几个子目录需要可写容器里跑时如果挂载了只读卷会写不进快照。检查一下挂载权限。第六类是端口占用。penguin web 默认 7364如果被占用会启动失败换端口或先释放。遇到报错时优先看 Trace 视图里的原始请求和响应比猜要快得多。接入相关的文档可以在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 找到Key 管理在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。6. 把链路跑顺之后跑通一遍之后你会发现 PenguinHarness 真正省时间的地方不在生成那一下而在 RSI 循环Agent 自己跑基准、找失分点、出改进版本每一轮都有快照可以回退。人的角色从写代码变成设目标和审批。而 TaoToken 的统一 Key 在这里的价值是让你在切换模型做对比时不用反复改配置——想换模型改一行 model_id 就行。如果你打算长期用它做编码或 Agent 自动化可以看看 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 适合需要稳定额度和多模型切换的场景。想先验证模型效果直接去模型对话页面试几句https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。接入细节和参数说明都在文档里遇到配置问题先翻文档再排查能省不少时间。