/agentic-portfolio — 为任意 GitHub 用户构建基于免费 LLM 的智能体作品集网站
此技能将搭建 agentic-portfolio 应用(Next.js 15 App Router + CopilotKit + /free-llm 生存链)。参考实现位于 github.com/wjlgatech/agentic-portfolio —— 将其克隆为模板,然后为目标用户重新填充 content/ 目录下的数据。所有个人内容都是数据,应用代码可直接复用。
0. 输入与前置条件
- GitHub 登录名(例如
wjlgatech)。如需获取私有仓库和高亮信息,请运行gh auth status—— 用户必须使用repo范围进行身份验证。仅公开仓库无需身份验证。 node >= 18、npm、gh、python3。
1. 拉取活跃仓库(最近 12 个月)
SINCE=$(python3 -c "import datetime as d;print((d.date.today()-d.timedelta(days=365)).isoformat())")
gh api -X GET 'user/repos?per_page=100&sort=pushed&affiliation=owner' --paginate \
--jq ".[] | select(.pushed_at >= \"$SINCE\") | {name,private,fork,lang:.language,desc:.description,pushed:.pushed_at[0:10],stars:.stargazers_count,url:.html_url}" \
> repos.ndjson
# 对于其他用户的公开仓库:gh api "users/<login>/repos?per_page=100&sort=pushed" ...
排除 fork(fork: true)和元仓库(dotfiles、现有的 portfolio)。
2. 整理到 content/projects.json
对于每个保留的仓库,输出 {name, category, highlight, featured, private, language, stars, pushed, url}:
- Category —— 分组到少量类别中(例如 Agentic OS · Frameworks & Tooling · AI Products · Faith/Family · Open Knowledge);选择符合用户实际工作的名称。
- highlight —— 一条 IP 安全的说明。对于 私有 仓库:仅限高级别描述,并将
url: null(绝不要链接或暴露内部信息)。 - featured —— 标记大约 15–18 个最强的项目作为默认视图。
3. 填写 content/profile.ts 和 content/portfolio.yaml
profile.ts:姓名、标语、使命、价值观、热爱以及 12X 未来实践(十二项复合性原则)。根据用户的简介和仓库主题进行起草;并明确标记这是供他们编辑的内容。portfolio.yaml:控制面板 —— 部分顺序/可见性/标签、主题以及 文章 列表(初始为空)。所有者通过与智能体对话(“添加我的 LinkedIn 文章 …”)或手动填写文章。LinkedIn 需要登录验证 —— 请用户粘贴他们的帖子,或接受公开文章 URL 并逐个 WebFetch。- 在部署时设置
PORTFOLIO_OWNER_TOKEN,以便只有所有者可以应用智能体的编辑(访客保持只读)。未设置时本地开发无限制。
4. 应用代码 —— 从模板复制,不要重写
可复用部分(对所有用户相同):
app/page.tsx、app/layout.tsx、app/globals.cssapp/api/copilotkit/route.ts+lib/llm.ts(免费 LLM 链 —— 仅在服务端使用密钥)components/Copilot.tsx、components/Projects.tsx、components/Articles.tsx- 配置文件:
package.json(将 Next 固定到打了补丁的 15.x)、tailwind.config.ts、tsconfig.json、postcss.config.mjs、.env.example
5. 验证,然后部署
npm install && npm run build # 在推送前必须通过
gh repo create <login>/<repo-name> --public --source=. --remote=origin --push
然后在 Vercel 上部署(导入仓库 → 添加一个免费密钥,例如 NVIDIA_API_KEY → 部署)。
防护措施
- 绝不要泄露私有 IP。 私有仓库:仅限高亮摘要,
url: null。 - **密钥保留在服务端。**只有
app/api/copilotkit/route.ts读取 LLM 密钥。 - **优先使用免费套餐。**保持
lib/llm.ts的顺序为 NIM → Groq → Gemini → 付费。 - 构建必须通过 才能进行任何推送。如实报告构建状态。
- 手动确认仓库推送,除非用户已明确表示“创建并推送”。