news 2026/9/24 17:30:43

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一天一个开源项目(第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_KEY="sk-你的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_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 找到,Key 管理在 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。

6. 把链路跑顺之后

跑通一遍之后,你会发现 PenguinHarness 真正省时间的地方不在"生成"那一下,而在 RSI 循环:Agent 自己跑基准、找失分点、出改进版本,每一轮都有快照,可以回退。人的角色从"写代码"变成"设目标和审批"。而 TaoToken 的统一 Key 在这里的价值,是让你在切换模型做对比时不用反复改配置——想换模型,改一行 model_id 就行。

如果你打算长期用它做编码或 Agent 自动化,可以看看 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,适合需要稳定额度和多模型切换的场景。想先验证模型效果,直接去模型对话页面试几句:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 。接入细节和参数说明都在文档里,遇到配置问题先翻文档再排查,能省不少时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 17:29:31

CMO环境模型-地形模型详解

6.2 地形模型(Terrain) Terrain.cs 共 386 行,负责高程查询、视线(LOS)判定与地形坡度计算。全球最大地形高程常量 GlobalMaxTerrainElevation 8 850 m(珠峰高度)。 高程查询接口为 GetElevat…

作者头像 李华
网站建设 2026/9/24 17:28:12

零基础学ESP32:舵机控制——让设备精准转动到指定角度!

前面我们学了控制LED亮灭、控制继电器开关、让蜂鸣器唱歌——但这些都只是"开"和"关"两种状态。今天要学一个能精准控制角度的设备:舵机。 航模飞机的机翼控制、小车车轮的转向、家用电器的开关、机器人关节的转动……这些需要"转到某个精…

作者头像 李华
网站建设 2026/9/24 17:27:02

【股票交易】第 47 章 图表的基本语言

回到目录文章目录47.1 价格图表:同一段交易历史的不同表达线形图 :先观察整体变化柱状图与 K 线图:增加周期内部的信息线性坐标与对数坐标:金额变化和比例变化47.2 K 线:四个价格能够告诉我们什么一根 K 线的构成阳线不…

作者头像 李华
网站建设 2026/9/24 17:26:17

Codex修Bug总翻车?先检查你的任务描述里有没有这3个坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 17:25:29

如何安装 RevokeMsgPatcher:微信QQ防撤回补丁 5 分钟上手

如何安装 RevokeMsgPatcher:微信QQ防撤回补丁 5 分钟上手 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode…

作者头像 李华