零基础也能看懂的Goose与简历优化实战指南

古韵新声
2026-07-08 15:09
阅读 243

嗨,大家好!我是你们的老朋友,一个在大厂搬砖3年、业余在B站做技术UP主的程序员。最近后台收到很多私信,说想转行做开发但不知道简历怎么写,也有粉丝问我有没有什么工具能帮他们快速搭建技术项目来丰富简历。今天这篇文章,我就把自己这几年踩过的坑、总结的经验,结合一个叫做 Goose 的工具,手把手带你走一遍"从零到能写进简历"的完整流程。


一、为什么要写这篇教程?

我当初学编程的时候,最大的痛点不是代码写不出来,而是不知道学完能干什么。看了无数教程,跟着敲了一堆 Hello World,但一到写简历就傻眼了——项目经验那一栏空空如也。

后来我发现,很多初学者都卡在这个环节:技术学了,但不知道怎么变成简历上的亮点

所以今天这篇文章,我会用 Goose(一个开源的AI开发助手CLI工具)带你做一个真实的小项目,并且教你怎么把这个项目漂亮地写进简历里。

先简单认识一下 Goose

特性 说明
全称 Block Open Source Goose
类型 AI-powered 开发助手 CLI 工具
核心能力 代码生成、调试、自动化任务执行
支持语言 Python、JavaScript、Go、Shell 等
安装方式 通过 brewcargo 或预编译二进制
适用场景 快速原型开发、自动化脚本、学习辅助

简单来说,Goose 就像是一个住在你终端里的AI程序员搭档。你告诉它你想干什么,它帮你写代码、跑命令、甚至帮你调试报错。


二、环境准备:5分钟搭好开发环境

我当初装环境的时候,经常一装就是一下午。现在我把步骤精简到最少,跟着做就行。

2.1 安装 Goose

macOS 用户:

brew install block-goose

使用 Cargo(Rust 包管理器)安装:

cargo install goose-cli

Windows / Linux 用户:

直接去 GitHub Releases 页面下载预编译二进制文件:

https://github.com/block/goose/releases

下载后解压,把可执行文件放到你的 PATH 目录下即可。

2.2 验证安装

goose --version

如果输出版本号,说明安装成功。

2.3 配置 API Key

Goose 需要连接大模型来工作,你需要配置一个 API Key:

# 以 OpenAI 为例
export GOOSE_PROVIDER=openai
export GOOSE_MODEL=gpt-4
export OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx

💡 小贴士: 建议把上面的配置写到你的 ~/.bashrc~/.zshrc 里,这样每次打开终端就自动生效了。

2.4 启动 Goose

goose session start

看到类似下面的提示,就说明你已经进入 Goose 的交互式会话了:

🪿 Goose is ready! What would you like to build?
>

三、核心概念:用最简单的话解释 Goose

3.1 Goose 的工作模式

我当初刚用 Goose 的时候,以为它就是个聊天机器人。其实不是,它有几种不同的工作模式:

模式 说明 适用场景
Chat 模式 纯对话,不执行任何操作 问问题、讨论方案
Auto 模式 自动执行命令和代码 快速实现需求
Approve 模式 每步操作都需要你确认 生产环境、重要操作

用一句话总结:Chat 模式是顾问,Auto 模式是打工人,Approve 模式是需要你签字的打工人。

3.2 Extension(扩展)机制

Goose 的强大之处在于它的扩展系统。你可以给它挂载各种工具:

Goose 核心
├── File Extension      → 读写文件
├── Shell Extension     → 执行终端命令
├── Git Extension       → Git 操作
├── Browser Extension   → 浏览器自动化
└── Custom Extension    → 你自己写的扩展

这就好比 Goose 是一个手机,Extension 就是 App Store 里的应用。你装得越多,它能做的事就越多。

3.3 Session(会话)与 Context(上下文)

每次你启动 goose session start,就创建了一个新的会话。Goose 会在会话中记住你之前说过的话和做过的事。

关键点: 会话是有上下文的,聊得太多会导致上下文溢出。所以建议一个任务一个会话,做完就 exit 退出。


四、实战项目:用 Goose 搭建一个"个人简历生成器"

好,到了最激动人心的环节。我们要用 Goose 做一个Markdown 简历转 HTML 的小工具

为什么做这个?因为:

  1. 它足够简单,零基础也能跟上
  2. 它足够实用,你自己就能用
  3. 它写进简历里很好看——"独立开发了一个基于 Markdown 的简历生成工具"

4.1 项目初始化

先创建项目目录:

mkdir resume-generator
cd resume-generator

然后启动 Goose:

goose session start

4.2 让 Goose 帮你搭建项目结构

在 Goose 的交互界面中输入:

请帮我创建一个 Python 项目,结构如下:
- main.py:主程序入口
- templates/:存放 HTML 模板
- samples/:存放示例 Markdown 简历
- requirements.txt:依赖文件

请帮我生成所有文件的基础代码。

Goose 会自动帮你创建文件并写入代码。它会输出类似这样的内容:

🪿 正在创建项目结构...

✅ 创建目录: templates/
✅ 创建目录: samples/
✅ 创建文件: main.py
✅ 创建文件: requirements.txt
✅ 创建文件: README.md

4.3 编写核心代码

接下来,我们让 Goose 帮我们写核心转换逻辑:

请帮我在 main.py 中实现以下功能:
1. 读取一个 Markdown 文件
2. 使用 markdown 库将其转换为 HTML
3. 将 HTML 嵌入到一个漂亮的模板中
4. 输出为一个完整的 HTML 文件

请使用 Python 的 markdown 库和 jinja2 模板引擎。

Goose 生成的 main.py 大致如下:

import markdown
from jinja2 import Template
import sys
import os

# HTML 模板
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ title }} - 个人简历</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 
                         'PingFang SC', 'Hiragino Sans GB', sans-serif;
            line-height: 1.8;
            color: #333;
            background: #f5f5f5;
            padding: 40px 20px;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 60px;
            border-radius: 8px;
            box-shadow: 0 2px 12px rgba(0,0,0,0.1);
        }
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            border-bottom: 3px solid #3498db;
            padding-bottom: 10px;
            margin-bottom: 20px;
        }
        h2 {
            font-size: 1.5em;
            color: #2c3e50;
            margin-top: 30px;
            margin-bottom: 15px;
            border-left: 4px solid #3498db;
            padding-left: 12px;
        }
        h3 {
            font-size: 1.2em;
            color: #34495e;
            margin-top: 20px;
        }
        p {
            margin-bottom: 10px;
        }
        ul, ol {
            padding-left: 25px;
            margin-bottom: 15px;
        }
        li {
            margin-bottom: 5px;
        }
        .contact-info {
            color: #666;
            font-size: 0.95em;
            margin-bottom: 20px;
        }
        code {
            background: #f0f0f0;
            padding: 2px 6px;
            border-radius: 3px;
            font-size: 0.9em;
        }
        @media print {
            body {
                background: white;
                padding: 0;
            }
            .container {
                box-shadow: none;
                padding: 20px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        {{ content }}
    </div>
</body>
</html>
"""

def convert_markdown_to_html(md_file_path, output_path=None):
    """将 Markdown 文件转换为 HTML 简历"""
    
    # 读取 Markdown 文件
    with open(md_file_path, 'r', encoding='utf-8') as f:
        md_content = f.read()
    
    # 转换为 HTML
    html_content = markdown.markdown(
        md_content,
        extensions=['tables', 'fenced_code', 'toc']
    )
    
    # 提取标题(取第一行作为标题)
    first_line = md_content.strip().split('\n')[0]
    title = first_line.replace('#', '').strip()
    
    # 渲染模板
    template = Template(HTML_TEMPLATE)
    final_html = template.render(
        title=title,
        content=html_content
    )
    
    # 确定输出路径
    if output_path is None:
        base_name = os.path.splitext(md_file_path)[0]
        output_path = f"{base_name}.html"
    
    # 写入文件
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(final_html)
    
    print(f"✅ 简历已生成: {output_path}")
    return output_path

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("用法: python main.py <markdown文件路径> [输出文件路径]")
        print("示例: python main.py samples/my_resume.md")
        sys.exit(1)
    
    md_file = sys.argv[1]
    output_file = sys.argv[2] if len(sys.argv) > 2 else None
    
    if not os.path.exists(md_file):
        print(f"❌ 文件不存在: {md_file}")
        sys.exit(1)
    
    convert_markdown_to_html(md_file, output_file)

4.4 安装依赖

pip install markdown jinja2

或者让 Goose 帮你更新 requirements.txt

markdown==3.5.1
jinja2==3.1.2

4.5 写一份示例简历

samples/ 目录下创建一个 my_resume.md

# 张三

📧 zhangsan@email.com | 📱 138-0000-0000 | 🔗 github.com/zhangsan

## 教育背景

### XX大学 · 计算机科学与技术 · 本科
2020.09 - 2024.06

- GPA: 3.7/4.0
- 相关课程:数据结构、操作系统、计算机网络、数据库原理

## 专业技能

- 熟悉 Python、JavaScript,了解 Go、Java
- 熟悉 Vue3、React 前端框架
- 熟悉 MySQL、Redis 数据库
- 了解 Docker、Kubernetes 容器化部署
- 熟悉 Git 版本控制与团队协作流程

## 项目经历

### 个人简历生成器(Markdown to HTML)
2024.01 - 2024.02

- 独立开发了一个基于 Python 的 Markdown 简历转 HTML 工具
- 使用 Jinja2 模板引擎实现样式与内容分离
- 支持表格、代码高亮、目录生成等 Markdown 扩展语法
- 响应式设计,支持移动端查看与打印导出

### 在线任务管理系统
2023.09 - 2023.12

- 基于 Vue3 + Node.js + MySQL 的全栈项目
- 实现了任务的增删改查、分类管理、优先级标记
- 使用 JWT 实现用户认证,Redis 缓存热点数据
- 部署在阿里云 ECS,使用 Nginx 反向代理

## 自我评价

热爱技术,善于学习。在校期间积极参与开源社区,
保持良好的编码习惯和文档意识。

4.6 运行项目

python main.py samples/my_resume.md

输出:

✅ 简历已生成: samples/my_resume.html

打开 samples/my_resume.html,你就能看到一份排版精美的 HTML 简历了!

4.7 用流程图梳理整个流程

┌─────────────────┐
│  编写 Markdown   │
│    简历文件      │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Python 读取     │
│  .md 文件内容    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ markdown 库将    │
│ MD 转为 HTML    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ Jinja2 模板引擎  │
│ 嵌入 CSS 样式   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  输出完整的      │
│  HTML 文件       │
└─────────────────┘

五、进阶:给项目加上更多功能

做到这里,你的项目已经能用了。但如果你想让简历上的描述更亮眼,可以再加几个功能:

5.1 支持多套主题

# 在 main.py 中添加主题选择功能
THEMES = {
    'default': HTML_TEMPLATE,
    'dark': DARK_TEMPLATE,
    'minimal': MINIMAL_TEMPLATE,
}

def convert_with_theme(md_file_path, theme='default', output_path=None):
    """支持主题切换的转换函数"""
    with open(md_file_path, 'r', encoding='utf-8') as f:
        md_content = f.read()
    
    html_content = markdown.markdown(md_content, extensions=['tables', 'fenced_code'])
    
    first_line = md_content.strip().split('\n')[0]
    title = first_line.replace('#', '').strip()
    
    template_str = THEMES.get(theme, HTML_TEMPLATE)
    template = Template(template_str)
    final_html = template.render(title=title, content=html_content)
    
    if output_path is None:
        base_name = os.path.splitext(md_file_path)[0]
        output_path = f"{base_name}_{theme}.html"
    
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(final_html)
    
    print(f"✅ 简历已生成 (主题: {theme}): {output_path}")

5.2 命令行参数优化

使用 argparse 让命令行更友好:

import argparse

def parse_args():
    parser = argparse.ArgumentParser(description='Markdown 简历生成器')
    parser.add_argument('input', help='输入的 Markdown 文件路径')
    parser.add_argument('-o', '--output', help='输出文件路径', default=None)
    parser.add_argument('-t', '--theme', help='主题名称', 
                       choices=['default', 'dark', 'minimal'], 
                       default='default')
    parser.add_argument('--list-themes', action='store_true', 
                       help='列出所有可用主题')
    return parser.parse_args()

5.3 功能对比表

功能 基础版 进阶版
MD 转 HTML
自定义样式
多主题支持
命令行参数 基础 argparse 完善
打印优化 基础 增强
PDF 导出 可集成 wkhtmltopdf

六、重头戏:怎么把这个项目写进简历?

这才是本文的重点。很多初学者项目做了,但简历上写得很拉胯。我来教你怎么包装。

6.1 错误示范 ❌

项目经历:
简历生成器 - 用 Python 写的一个小工具,可以把 Markdown 转成 HTML。

问题: 太笼统,没有技术细节,没有量化数据,看不出你的能力。

6.2 正确示范 ✅

项目经历:

Markdown 简历生成器 | 独立开发 | Python, Jinja2, Markdown
2024.01 - 2024.02

• 独立设计并开发了一款基于 Python 的 Markdown 简历转 HTML 工具,
  支持将结构化 Markdown 文档自动渲染为响应式 HTML 页面
• 采用 Jinja2 模板引擎实现内容与样式分离,支持多主题切换
  (默认/暗色/极简),提升可维护性与扩展性
• 集成 Markdown 扩展语法支持(表格、代码高亮、目录生成),
  满足多样化排版需求
• 优化打印样式(@media print),支持直接打印导出为 PDF,
  无需额外依赖
• 项目已开源至 GitHub,获得 XX 个 Star

6.3 简历写作公式

我总结了一个公式,适用于所有项目经历的描述:

动词 + 技术栈 + 做了什么 + 达到了什么效果/解决了什么问题
要素 说明 示例
动词 用强有力的动词开头 设计、开发、优化、重构、实现
技术栈 明确列出用到的技术 Python, Jinja2, Markdown
做了什么 具体描述功能点 实现多主题切换
效果 量化或具体化成果 提升可维护性,支持3种主题

6.4 不同岗位侧重点不同

目标岗位 简历侧重点 描述关键词
Python 后端 代码结构、设计模式、性能 模块化、可扩展、模板引擎
前端开发 样式设计、响应式、用户体验 CSS、响应式、打印优化
全栈开发 端到端能力、部署 完整流程、命令行工具、开源
测试/QA 测试覆盖、边界处理 异常处理、输入校验、日志

七、常见问题解答

Q1:Goose 生成的代码质量怎么样?能直接用吗?

A: Goose 生成的代码可以作为起点,但我强烈建议你逐行阅读并理解。我当初就是太依赖工具,结果面试的时候被问到项目细节答不上来。记住:工具是帮你提效的,不是替你思考的。

Q2:我没有 API Key 怎么办?

A: 几个替代方案:

方案 说明
OpenAI 需要付费,效果最好
本地模型 (Ollama) 免费,但需要较好的硬件
其他兼容 API 如 DeepSeek、智谱等,部分有免费额度

Q3:项目太简单了,面试官会不会觉得水?

A: 关键不在项目多复杂,而在于你能不能讲清楚。一个简单的项目,如果你能说清楚:

  • 为什么选这个技术栈
  • 遇到了什么问题,怎么解决的
  • 如果再做一次,你会怎么改进

那就比一个复杂但说不清楚的项目强得多。

Q4:Goose 报错了怎么办?

A: 常见错误及解决方案:

错误1: "API key not found"
→ 检查环境变量是否正确设置: echo $OPENAI_API_KEY

错误2: "Module not found: markdown"  
→ 安装依赖: pip install -r requirements.txt

错误3: "Permission denied"
→ 检查文件权限: chmod +x main.py

Q5:怎么把这个项目部署到线上?

A: 最简单的方案是用 GitHub Pages:

# 1. 初始化 Git 仓库
git init
git add .
git commit -m "init: resume generator project"

# 2. 推送到 GitHub
git remote add origin https://github.com/你的用户名/resume-generator.git
git push -u origin main

# 3. 开启 GitHub Pages(在仓库 Settings → Pages 中设置)

八、学习建议与避坑指南

8.1 我踩过的坑

  1. 不要一上来就追新技术。 我当初一上来就学微服务、K8s,结果基础不牢,面试全挂。先把 Python 基础、数据结构搞扎实。

  2. 不要只看不练。 看教程的时候觉得"我会了",一写代码就废。每个知识点都要动手敲一遍。

  3. 不要忽视文档能力。 写 README、写注释、写博客,这些都是加分项。我面试的时候,面试官看到我 GitHub 上的 README 写得很好,直接加分。

  4. 不要害怕用 AI 工具。 Goose、Copilot 这些工具是大势所趋。关键是你用它来加速学习,而不是替代学习

8.2 下一步学习路径

当前阶段(本教程)
│
├── ✅ 学会使用 Goose 辅助开发
├── ✅ 完成简历生成器项目
├── ✅ 学会项目包装写进简历
│
▼
下一阶段
│
├── 📌 给项目加上单元测试(pytest)
├── 📌 学习 Docker 容器化部署
├── 📌 接入 CI/CD(GitHub Actions)
├── 📌 写一份高质量的技术博客
│
▼
进阶阶段
│
├── 📌 做一个完整的全栈项目
├── 📌 学习数据库设计与优化
├── 📌 了解系统设计与架构
├── 📌 参与开源项目贡献

8.3 推荐资源

资源类型 推荐 说明
Python 基础 《Python Crash Course》 入门神书
简历指导 超级简历(wondercv.com) 免费模板
Goose 文档 github.com/block/goose 官方文档
面试准备 《代码面试指南》 刷题必备

九、总结

今天我们完成了以下几件事:

  1. 认识了 Goose —— 一个能帮你写代码、跑命令的 AI 开发助手
  2. 搭建了开发环境 —— 从安装到配置,5分钟搞定
  3. 做了一个实战项目 —— Markdown 简历生成器,从零到可运行
  4. 学会了简历包装 —— 怎么把项目经历写得让面试官眼前一亮
  5. 明确了学习路径 —— 下一步该学什么,怎么学

我当初要是有人这么带我就好了。所以我把这些经验写出来,希望能帮到正在入门的你。

记住:技术本身不是目的,用技术解决问题才是。 不要为了学技术而学技术,要为了做出东西而学技术。

如果你跟着这篇教程做完了项目,欢迎在评论区或者B站私信告诉我,我会逐个看你们的项目并给出建议。

我们下期见!🪿


作者: 大厂搬砖3年的技术UP主
声明: 本文为原创教程,欢迎转载但请注明出处
互动: 觉得有用的话,点个赞再走吧~你的支持是我更新的最大动力!

评论 0

最热最新
暂无评论
古韵新声Lv.1
0
影响力
0
文章
0
粉丝