██████╗ ██████╗ ███╗ ███╗███╗ ███╗ █████╗ ███╗ ██╗██████╗ ██╔════╝██╔═══██╗████╗ ████║████╗ ████║██╔══██╗████╗ ██║██╔══██╗ ██║ ██║ ██║██╔████╔██║██╔████╔██║███████║██╔██╗ ██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██║╚██╔╝██║██╔══██║██║╚██╗██║██║ ██║ ╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║██║ ██║██║ ╚████║██████╔╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝
██╗ ██████╗ ██████╗ ███████╗
██║██╔═══██╗██╔══██╗██╔════╝
██║██║ ██║██████╔╝███████╗
██ ██║██║ ██║██╔══██╗╚════██║
╚█████╔╝╚██████╔╝██████╔╝███████║
╚════╝ ╚═════╝ ╚═════╝ ╚══════╝
📺 使用AI找到最适合你的简历和偏好的工作
🧘🏻 一个无干扰的、本地优先的命令行界面,用于抓取在线工作并根据你的需求进行筛选
使用AI,Command Jobs确保只找到与你的经验、技能和职位偏好完全匹配的最佳工作
不要再浪费时间在那些不适合你的在线工具上,使用命令行工作搜索工具才是你的最佳选择
Command Jobs 是唯一一个从你工作的地方——终端——运行的工作搜索工具。 是的,它也不会让你浏览数百个职位列表只为了找到几个好匹配
这才刚刚开始!关注我们,我们将继续改进它
🙏🏼🤗❤️
注意:如果你想添加另一个工作列表来源,请转到此问题并将其添加为推荐来源
更新
-
在公共场合中构建:
-
❤️ 如果你想贡献于这个项目并想尝试编写测试,那将是惊人的!🤗 这是一个编写新测试的票证,以及当前测试代码的演练:请求创建:显示简历文本的测试 🙏🏼
-
从
git clone
到找到最佳匹配的视频演示 -
这是该应用程序一些内部的功能。非常高层次的概述,如果你想了解更多,或希望有更深入的解释,请创建一个问题,谢谢
-
刚写了第一个测试!😅 这很大程度上要归功于Agentic的Glide,他们最近推出了它(查看公告)。我本打算从ncurses切换到python-prompt-toolkit,如果不成功,再从python切换到Go,这样我可以用Bubble Tea构建Command Jobs 🤩😍🤤
-
看看这个很棒的ancv,一个用来在终端中构建一个很酷的ASCII版本简历的工具!🤗(喜欢这个维恩图的笑话)需要将其作为库与Command Jobs集成
-
试用了ShellGPT并做了一个小PR在
README
中突出其聊天界面。这是一个从终端使用GPT的非常酷的工具。接下来我想尝试用aider进行一些编码 -
决定尽可能公开地构建这个项目,本着这种精神,我刚刚录制了一段编码会话,展示了我如何尝试解决一个问题(问题#12),并找到了另外3个问题!
如果你刚开始编程,它也是一个基本软件项目管理的相当不错的概述。在视频中,我展示了不仅仅是编写代码的整个工作流程,还包括管理环境、处理错误、在Github中记录过程、管理git和分支、提交、推送和合并代码、更新文档(比如现在)、以及分享/推广
-
-
感谢Hacker News社区的鼓励、热情和支持。查看这个线程: Show HN: Tech jobs on the command line
功能
-
直接从终端查看和导航AI匹配的工作列表
-
从Hacker News上的"Ask HN: Who's hiring?"帖子抓取工作列表
-
使用GPT处理列表为你找到最合适的工作
- 应用程序会询问GPT每个工作列表是否适合你的简历
- 提示包括简历、工作列表、用于json格式化结果的部分、角色描述、工作偏好部分以及一些额外的问题
- 你会得到一个根据你的简历和偏好筛选出来的最佳匹配列表
在进行中
-
直接在终端中跟踪工作申请
-
从额外来源抓取工作列表
-
添加定期抓取的cronjob
-
关于找到的新匹配的提醒
-
你想要看到什么? 请添加票证
使用
在完成配置并成功运行Command Jobs之后
你将获得一个包含以下选项的菜单。要导航菜单,只需使用箭头键并按Enter选择选项。你可以随时通过按q
退出
首次运行应用程序时,打开编辑简历部分并粘贴你的简历文本,不需要包含你的姓名或联系信息(你可以在config/base_resume.sample
中查看示例简历。或者,你可以将简历文本直接粘贴到代码基文件夹中的base_resume.txt
文件中
然后,通过运行抓取“Ask HN: Who's hiring?” 将一些职位列表导入应用程序。你可以在本地数据库中的导航作业部分看到前几个职位列表(如果你想查看更多,你也可以直接使用sqlite3打开job_listings.db
并查看内容)
接下来,确保你已经检查过你的.env
文件并根据你的工作匹配偏好调整了提示
一旦你准备好简历、本地数据库中的工作和配置了提示,运行使用AI为简历找到最佳匹配。它将遍历职位列表以找到与你的简历和工作偏好匹配的职位(目前,每次运行限制为5个检查,你可以通过在src/database_manager.py
中的fetch_job_listings
查询中更改LIMIT
来修改这一点)
当GPT分析完成后,你就可以访问AI找到X个匹配你的简历的职位选项,在那里你可以导航找到的最佳匹配
菜单包括:
- 编辑简历: 添加或替换用于AI匹配的简历文本
- 抓取“Ask HN: Who's hiring?”: 从Hacker News中抓取职位列表
- 在本地数据库中导航工作: 浏览本地存储的职位列表
- 使用AI为简历找到最佳匹配: 使用AI匹配简历和职位列表
- AI找到X个匹配你的简历的职位: 审查个性化的职位匹配
要退出应用程序,按q
快速开始
从git clone
到找到最佳匹配的免费视频演示
以下是逐步操作
-
克隆仓库:
git clone https://github.com/nicobrenner/commandjobs.git
cd commandjobs
-
通过Docker运行
-
构建Docker镜像:
docker-compose -f docker/docker-compose.yml build
-
运行Docker容器(确保你已经在
.env
文件中设置了OpenAI API密钥 - 请参阅下面的配置部分):docker-compose -f docker/docker-compose.yml run app
-
-
(如果你不想使用Docker)在虚拟环境中使用Python运行
-
设置并激活Python虚拟环境:
python3 -m venv venv
source venv/bin/activate
-
安装依赖:
pip install -r config/requirements.txt
-
运行应用程序(确保你已经在
.env
文件中设置了OpenAI API密钥 - 请参阅下面的配置部分):python src/menu.py
-
配置
-
通过复制
config/sample.env
文件在项目的根目录中创建.env
文件,并添加你的OpenAI API密钥:cp config/sample.env .env
编辑 .env 文件 添加你的OpenAI API密钥OPENAI_API_KEY=your_openai_api_key_here OPENAI_GPT_MODEL=gpt-3.5-turbo BASE_RESUME_PATH=base_resume.txt HN_START_URL=https://news.ycombinator.com/item?id=40563283&p=1 ...
注意: 上面的HN_START_URL是2024年4月的
获取OpenAI API密钥
如果你没有OpenAI API密钥,请按照这些说明获取一个。
-
修改提示以符合你的偏好。提示有5个部分:
COMMANDJOBS_ROLE
: 列出你正在寻找的职位
COMMANDJOBS_ROLE=后端工程师,或全栈工程师,或高级工程师,或高级技术负责人,或工程经理,或高级工程经理,或创始工程师,或创始全栈工程师,或类似职位
COMMANDJOBS_IDEAL_JOB_QUESTIONS
: 解释什么是你的理想工作
COMMANDJOBS_IDEAL_JOB_QUESTIONS=公司使用Ruby, Rails, Ruby on Rails或Python,职位不需要以下任何知识或经验:{job_requirement_exclusions}, 该职位是远程的,面向美国且职位描述与简历相符?(是或否),用一句话解释是或否是否适合简历上的经验。
COMMANDJOBS_EXCLUSIONS
: 列出需要避免的内容(这需要一些反复试验,每次匹配时进行迭代)
COMMANDJOBS_EXCLUSIONS=视频管理系统(VMS),计算机视觉系统,Java,C++,C#,Grails,机器学习(ML),PyTorch,训练模型
COMMANDJOBS_PROMPT
: 提示内容包括所有其他元素以及我们希望从GPT那里获得答案的问题
COMMANDJOBS_PROMPT=鉴于以下职位列表HTML和简历文本。列表:\n{job_html}\n\n简历:\n{resume}\n\n请提供以下有关该职位的信息:职位的简短2句总结,公司名称,[可用职位列表,如果有可用的单个对应链接],技术栈描述,他们是否使用Rails?(是或否),他们是否使用Python?(是或否),这些职位是远程的吗(不是混合,不是现场)?(是或否),他们在美国招人吗?(是或否),如何申请该职位?(最多一条描述,必要时包含链接或电子邮件地址),该职位是否优先考虑具有特定行业背景(例如,技术,金融,医疗保健)的候选人?该职位是否适合简历?(只有在职位是为{roles} {ideal_job_questions}时才说是)\n\n请以JSON格式提供输出,使用以下示例作为参考,总是使用相同的键,但用之前请求的答案替换值:\n{output_format}
COMMANDJOBS_OUTPUT_FORMAT
: 这指定了提示的输出格式,包括一个示例作为参考 - 结构和字段必须与提示中的问题匹配
COMMANDJOBS_OUTPUT_FORMAT="{\n \"small_summary\": \"Wine和C语言系统编程的开源开发者\",\n \"company_name\": \"CodeWeavers\",\n \"available_positions\": [\n {\n \"position\": \"Wine和通用开源开发者\",\n \"link\": \"https://www.codeweavers.com/about/jobs\"\n }\n ],\n \"tech_stack_description\": \"C语言系统编程\",\n \"use_rails\": \"否\",\n \"use_python\": \"否\",\n \"remote_positions\": \"是\",\n \"hiring_in_us\": \"是\",\n \"how_to_apply\": \"通过我们的网站申请,链接如下:https://www.codeweavers.com/about/jobs\",\n \"back_ground_with_priority\": null,\n \"fit_for_resume\": \"否\",\n \"fit_justification\": \"该职位是为Wine和开源开发者,简历上没有相关经验。该职位在美国是远程的\"\n }"
-
修改查询以筛选匹配的职位。
在文件
src/display_matching_table.py
中,方法__init__
有一个变量(self.good_match_filters
),包含以下SQL条件:json_valid(gi.answer) = 1 AND json_extract(gi.answer, '$.fit_for_resume') = 'Yes' AND json_extract(gi.answer, '$.remote_positions') = 'Yes' AND json_extract(gi.answer, '$.hiring_in_us') <> 'No'
这3个条件代表了AI找到的匹配项的默认筛选标准。以下是3个默认匹配标准的细分:
-
AI认为列表与简历和偏好相匹配
AND json_extract(gi.answer, '$.fit_for_resume') = 'Yes'
-
该职位是或可以是远程的
AND json_extract(gi.answer, '$.remote_positions') = 'Yes'
-
该职位在美国招聘(该值可以是Yes或NULL或'',所以该条件检查字段
'$.hiring_in_us'
不是'No'
)AND json_extract(gi.answer, '$.hiring_in_us') <> 'No'
注意:数据库是一个sqlite3数据库,因此你也可以直接打开它
sqlite3 job_listings.db
,然后尝试如下查询,并进行实验以查看你找到什么。无论是否筛选,所有的答案和提示都应该存储在gpt_interactions
表中(查看有关内部结构的最新更新视频):SELECT COUNT(gi.job_id) FROM gpt_interactions gi JOIN job_listings jl ON gi.job_id = jl.id WHERE json_valid(gi.answer) = 1 AND json_extract(gi.answer, '$.fit_for_resume') = 'Yes' AND json_extract(gi.answer, '$.remote_positions') = 'Yes' AND json_extract(gi.answer, '$.hiring_in_us') <> 'No'
你应该根据自己的偏好进行调整,并且可以与想要从提示中获得的问题/答案进行混合匹配
-
-
增加每批次检查的职位列表数量的限制
选项
COMMANDJOBS_LISTINGS_PER_BATCH
(应该在你的.env
文件中,参见sample.env
)确定每次执行菜单选项“使用AI查找最佳匹配”时处理的职位列表数量。如果你使用默认值10,这意味着每次运行选项“查找最佳匹配”时,命令职位会向gpt
发出10个请求。一旦你信任该应用,我建议将限制设置为500,这样该应用就可以在一次操作中处理所有抓取的职位列表。
贡献
优先级
- ❤️如果你想为该项目做出贡献并希望尝试编写测试,那将是非常棒的!🤗 这是编写新测试的任务,以及当前测试代码的逐步演示:请求创建:测试显示简历文本 🙏🏼
我们欢迎各种贡献,尤其是改进爬虫和增强用户体验。如果你希望提供帮助,请在我们的GitHub仓库上提交问题或拉取请求。
以下是该应用的一些内部结构概述:
问题
遇到任何问题?请在项目的GitHub存储库上提交问题。我们感谢你的反馈和对改进Command Jobs的贡献!
许可
这个项目是开源的,在Apache 2.0 许可证下可用。
相关项目
- ancv,在你的终端获得一个漂亮的简历版本,非常酷