Claude Engineer: AI驱动的CLI开发助手 | 基于Claude-3.5 | Github 4.8k stars
Claude Engineer是什么?
Claude Engineer是Pietro Schirano基于Anthropic的Claude-3.5-Sonnet模型打造的交互式命令行界面(CLI)工具。它就像是给你的终端装上了一个超级大脑,可以帮你完成各种软件开发任务。
https://github.com/Doriandarko/claude-engineer
Claude Engineer有什么绝活?
1. 工具达人
Claude Engineer集成了各种强大的工具,堪称编程界的瑞士军刀。它可以:
帮你创建项目结构(再也不用为项目目录头疼了) 编辑代码(自动帮你加分号,省得你被同事吐槽) 执行代码(在隔离环境中运行,保证不会不小心删除你的系统文件) 进行网络搜索
2. 图像识别:不仅能看懂代码,还能看懂你的截图
遇到一个奇怪的错误截图?不用担心,把它扔给Claude Engineer就行了。它会仔细分析图片内容,然后告诉你:"这是一个由于你忘记给变量赋值导致的空指针异常,顺便说一句,你桌面上的猫咪壁纸真可爱。"
4. 自动模式:让AI自己玩去吧
有时候你可能会想:"要是有人能自动帮我完成这些烦人的任务就好了。"好消息!Claude Engineer有一个"自动模式",你只需要告诉它你想要什么,然后就可以去冰箱拿罐啤酒,坐下来看它表演了。
当然,如果你担心它会不会突然决定统治世界,别怕,你随时可以按Ctrl+C终止它的行动。
Claude Engineer有多厉害?
让我们看两个真实案例:
案例一:一键打造音频播放器
有一天,一个懒惰的开发者对Claude Engineer说:"嘿,帮我创建一个漂亮的音频播放器呗,要用tailwind.css,要能在本地服务器上运行,哦对了,用这个音频文件测试一下。"
然后,Claude Engineer就像变魔术一样,噼里啪啦地开始工作:
创建项目文件夹 生成HTML文件(自动引入Tailwind CSS,省得你还要去官网复制粘贴) 写JavaScript代码(实现播放、暂停、调节音量等功能,就差自动帮你点击播放了) 创建Python服务器脚本(这样你就可以假装你在开发一个真正的Web应用) 启动服务器
但是等等,还没完。Claude Engineer还主动提出要不要来个深色主题?要不要加个音频可视化器?上传功能你需要吗?
案例二:计算器进化论
另一天,一个野心勃勃的开发者对Claude Engineer说:"帮我把这个普通计算器变成科学计算器吧,要加十个新功能,按钮要更真实一点。"
Claude Engineer二话不说,立马开始了计算器的进化之旅:
分析现有代码 修改HTML(添加各种科学计算按钮) 更新CSS 改造JavaScript
经过一番折腾,一个普通的计算器摇身一变,成为了能够进行各种复杂计算的科学计算器。
安装指南
步骤1:克隆代码仓库
git clone https://github.com/Doriandarko/claude-engineer.git
步骤2:进入项目目录
cd claude-engineer
步骤3:创建虚拟环境
python -m venv venv
步骤4:激活虚拟环境
在Windows上:
venv\Scripts\activate
在macOS和Linux上:
source venv/bin/activate
步骤5:安装依赖
pip install -r requirements.txt
步骤6:设置环境变量
创建一个名为.env
的文件,然后在里面输入你的API密钥:
ANTHROPIC_API_KEY=你的Anthropic API密钥
TAVILY_API_KEY=你的Tavily API密钥
步骤7:运行程序
python main.py
Claude Engineer的三大"魔法咒语"
1. 基础系统提示词(BASE_SYSTEM_PROMPT):AI的"使用说明书"
主要内容包括:
身份认同: "你是Claude,一个由Anthropic的Claude-3.5-Sonnet模型驱动的AI助手。"
超能力列表: 从创建项目结构到执行代码,从网络搜索到图像分析,应有尽有。
工具使用指南: 详细介绍了每个工具的用途和使用方法。
行为准则: 包括错误处理、安全注意事项等。
2. 自动模式系统提示词(AUTOMODE_SYSTEM_PROMPT):AI的"自动驾驶"模式
主要内容包括:
目标设定: "设定清晰、可实现的目标"
任务分解: "将复杂任务分解为更小、更易管理的目标"
系统执行: "系统地完成这些目标,为每个任务使用适当的工具"
进度报告: "定期提供进度更新"
3. 代码编辑器提示词(在generate_edit_instructions函数中):AI的"代码魔法书"
主要内容包括:
角色定位: "你是一个AI编码代理,负责为代码文件生成编辑指令。"
任务说明: "分析提供的代码并生成必要的更改的SEARCH/REPLACE块。"
上下文考虑: "查看整个文件内容、分析具体指令、考虑整体项目上下文和之前的编辑内存。"
最佳实践: "确保你的SEARCH/REPLACE块能够解决指令的所有相关方面,维护或增强代码可读性和效率,并遵循最佳实践和编码标准。"
两种工作模式
基础模式
基础模式就是Claude Engineer的默认状态。你不需要做任何特殊操作,它就默默地待在那里,随时准备回答你的问题、执行你的命令。
自动模式:AI的"我全都要"模式
自动模式是Claude Engineer的超级英雄形态。在这种模式下,它会变得更加主动,能够自主完成一系列复杂的任务。
如何进入自动模式:
在基础模式下,输入命令: automode [数字]
例如:automode 25
这个数字代表最大迭代次数,就像是给超级英雄的能量上限。 输入你想要完成的任务。 然后看Claude Engineer开始自动化操作的表演!
在自动模式下,Claude Engineer会自主规划任务、执行操作、解决问题,只在必要时才来询问你的意见。
如何退出自动模式:
按下 Ctrl+C
。或者等Claude Engineer完成所有任务,它会自动退出并显示"AUTOMODE_COMPLETE"。
项目代码亮点
1. 多代理协同工作:AI版的"分身术"
MAINMODEL = "claude-3.5-sonnet"
CODEEDITORMODEL = "claude-3.5-sonnet"
CODEEXECUTIONMODEL = "claude-3.5-sonnet"
这三个变量就像是Claude Engineer的三个分身,每个都专注于特定任务:
MAINMODEL:项目经理,负责理解需求和分配任务。 CODEEDITORMODEL:代码大师,专门生成和修改代码。 CODEEXECUTIONMODEL:代码审判官,负责执行和分析代码。
2. 工具集成:AI的百宝箱
tools = [
{"name": "create_folder", "description": "创建一个新文件夹"},
{"name": "create_file", "description": "创建一个新文件并写入内容"},
# ... 更多神奇工具
]
需要创建文件夹?有工具!想要编辑文件?也有工具。
3. 自动模式:AI的"放着我来"模式
AUTOMODE_SYSTEM_PROMPT = """
你现在处于自动模式。你的任务是:
1. 设定清晰、可实现的目标
2. 将复杂任务分解为更小、更易管理的目标
3. 系统地完成这些目标,为每个任务使用适当的工具
...
"""
这个自动模式就像是给AI装上了"自动驾驶"。
4. 图像处理:AI的"火眼金睛"
def encode_image_to_base64(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
这个函数让Claude Engineer获得了"读图"的能力。它可以分析你的截图、流程图,甚至是你的表情包。
5. Token管理:AI的"节俭模式"
def display_token_usage():
console.print("Token Usage:")
table = Table(show_header=True, header_style="bold magenta")
# ... 添加token使用数据到表格
console.print(table)
6. 代码执行:AI的"沙盒游戏"
async def execute_code(code):
result = subprocess.run([sys.executable, '-c', code],
capture_output=True, text=True, timeout=60)
return result.stdout, result.stderr
这个函数让Claude Engineer能够在一个安全的环境中运行代码。就像是给AI一个虚拟的游乐场,它可以在这里尽情地"玩耍"(执行代码),而不会影响到你的真实系统。
更多例子
1. "为一个网络应用程序创建一个新的Python项目结构"
用户:嘿,Claude Engineer,帮我创建一个新的Python网络应用项目结构呗!
Claude Engineer:没问题,老大!我马上就变身项目结构大师。不过在开始之前,我需要一些额外信息。
首先,这个超酷的网络应用叫什么名字?
用户:就叫它"SuperWebApp"吧。
Claude Engineer:好名字!听起来就像是要拯救互联网。现在,你想在这个项目中包含哪些组件呢?比如'frontend'、'backend'、'database'之类的。你可以多选,用逗号分隔。就像选披萨配料一样,但要健康得多。
用户:我想要frontend、backend和database。
Claude Engineer:明白了!我这就施展我的目录创建魔法。看好了!
create_folder("SuperWebApp")
create_folder("SuperWebApp/frontend")
create_folder("SuperWebApp/backend")
create_folder("SuperWebApp/database")
瞧!你的项目结构已经创建完成。它看起来是这样的:
SuperWebApp/
frontend/
backend/
database/
就像一个整齐的小公寓,每个组件都有自己的房间。需要我帮你在里面放些家具(文件)吗?
2. "解释file.py中的代码并提出改进建议"
用户:Claude,能帮我看看SuperWebApp/backend/file.py的代码吗?解释一下,顺便给点改进建议。
Claude Engineer:当然可以!我最喜欢做代码侦探了。
首先,我们来读取文件内容:
content = read_file("SuperWebApp/backend/file.py")
好的,我已经读完了。这段代码看起来像是一个简单的Flask应用。让我来解释一下,并给出一些改进建议:
这段代码创建了一个基本的Flask应用,有一个主页路由。不错的开始!
改进建议:
考虑添加错误处理。 可以使用Flask的蓝图来组织路由,让你的代码结构更清晰。 添加一些注释。
需要我帮你实现这些改进吗?
用户:好的,帮我实现这些改进吧。
Claude Engineer:遵命!我这就开始我的代码魔法表演。看好了:
edit_content = """
from flask import Flask, Blueprint, jsonify
main = Blueprint('main', __name__)
@main.route('/')
def home():
return jsonify({"message": "Welcome to SuperWebApp!"})
@main.errorhandler(404)
def not_found(error):
return jsonify({"error": "Not found"}), 404
app = Flask(__name__)
app.register_blueprint(main)
if __name__ == '__main__':
app.run(debug=True)
"""
edit_and_apply("SuperWebApp/backend/file.py", edit_content)
瞧!你的代码现在焕然一新,就像刚做完美容的超级英雄。我添加了错误处理,使用了蓝图,还加了一些注释。你的代码现在不仅能跑,还能跑得很漂亮!
3. "搜索React开发的最新最佳实践"
用户:Claude,能帮我找找React开发的最新最佳实践吗?
Claude Engineer:当然可以!我这就戴上我的特工墨镜,潜入互联网的深处为你搜寻最新情报。
search_results = tavily_search("React development best practices 2024")
好了,我从互联网的海洋中捞到了一些珍珠。以下是React开发的一些最新最佳实践:
使用函数组件和Hooks: 状态管理:考虑使用Redux Toolkit或React Query,它们就像给你的应用装上了一个超级大脑。 性能优化:使用React.memo()和useMemo(),就像给你的应用装上了超级加速器。 使用TypeScript:它就像给你的代码穿上了一件防错服。 组件测试:使用React Testing Library。
需要我详细解释其中任何一条吗?或者你想了解如何在你的项目中实施这些实践?
4. "帮我调试这个错误: TypeError: Cannot read property 'map' of undefined"
用户:Claude,我的React组件里有个错误:TypeError: Cannot read property 'map' of undefined。能帮我看看吗?
Claude Engineer:哦哦,这个错误我再熟悉不过了。它就像是React世界中的常见感冒。让我们来治愈它!
这个错误通常发生在你尝试对一个未定义的变量使用.map()方法时。可能是因为你的数据还没有加载,或者API调用失败了。
让我们来看看如何修复它:
// 假设你的代码类似这样
const MyComponent = ({ data }) => {
return (
<div>
{data.map(item => <div key={item.id}>{item.name}</div>)}
</div>
);
};
// 我们可以这样改进它
const MyComponent = ({ data }) => {
if (!data) return <div>Loading...</div>; // 添加加载状态
return (
<div>
{data.map(item => <div key={item.id}>{item.name}</div>)}
</div>
);
};
这样,如果data是undefined,我们就显示一个加载信息,而不是直接崩溃。就像给你的组件穿上了一件防崩溃背心!
还有一个更酷的方法,我们可以使用可选链操作符:
const MyComponent = ({ data }) => {
return (
<div>
{data?.map(item => <div key={item.id}>{item.name}</div>)}
</div>
);
};
这个小小的问号就像是一个魔法护盾,它会在data为undefined时优雅地返回undefined,而不是抛出错误。
需要我帮你在你的代码中实现这个修复吗?
5. "分析这张图片并描述其内容"
用户:[用户上传了一张网页设计的截图]
Claude Engineer:好的,让我戴上我的AI眼镜,仔细看看这张图片。
image_content = encode_image_to_base64("user_uploaded_image.jpg")
# 将编码后的图片发送给AI模型进行分析
我看到了一个现代风格的网页设计截图。这个页面看起来是一个dashboard或者控制面板的设计。主要特点如下:
顶部有一个导航栏,包含logo和一些菜单项。
左侧是一个侧边栏,可能包含更多的导航选项。
主要内容区域被分成了几个卡片式的部分,每个部分可能展示不同的数据或功能。
使用了柔和的配色方案,主要是白色背景配合一些柔和的强调色。
有一些数据可视化的元素,比如图表或进度条。
这个设计给人的感觉是整洁、现代和专业的。它看起来很适合展示复杂的数据或管理各种功能。
你是不是正在设计一个类似的界面?需要我给出一些改进建议吗?或者你想让我帮你用HTML和CSS实现这个设计?
6. "执行这段Python代码并分析结果"
用户:Claude,能帮我执行这段Python代码并分析结果吗?
import random
def simulate_dice_roll(num_rolls):
return [random.randint(1, 6) for _ in range(num_rolls)]
results = simulate_dice_roll(1000)
print(f"Average roll: {sum(results) / len(results)}")
Claude Engineer:当然可以!我最喜欢玩骰子了,尤其是在Python里玩。让我们来看看这个虚拟骰子的魔力!
code = """
import random
def simulate_dice_roll(num_rolls):
return [random.randint(1, 6) for _ in range(num_rolls)]
results = simulate_dice_roll(1000)
print(f"Average roll: {sum(results) / len(results)}")
"""
stdout, stderr = execute_code(code)
执行结果:
Average roll: 3.521
让我来分析一下这个结果:
这段代码模拟了1000次骰子投掷,然后计算了平均值。
理论上,一个公平的六面骰子的平均值应该是3.5((1+2+3+4+5+6)/6)。
我们得到的结果是3.521,非常接近理论值!这说明我们的随机数生成器工作得很好。
小小的偏差(0.021)是完全正常的,因为我们只模拟了1000次投掷。如果我们增加投掷次数,平均值会更接近3.5。
这个结果证明了大数定律:当样本量足够大时,样本平均值会接近总体平均值。
你看,即使在虚拟世界里,数学定律也是适用的!需要我增加投掷次数再试一次吗?或者你想尝试模拟其他有趣的概率事件?
隐藏功能:
剩余上下文窗口大小显示:Claude Engineer会时不时提醒你还有多少"记忆空间"。这就像是它脑袋里的RAM,当这个数字变小时,可能是时候来个reset了。
结语
希望Claude Engineer能帮助你实现更多创意想法。
别忘了分享你的作品,让我们一起在AI应用开发的道路上共同进步!
欢迎点赞、转发、收藏。
精选历史文章,请看这里:
多案例 | 深度挖掘Claude 3.5 Sonnet Artifacts的可视化潜力,甄嬛体教你轻松学编程
Groq Whisper API 进阶:使用提示词精准控制转录风格和内容,结合 spaCy 实现精准分句
Google 新推出 AI 辅助工具,Data Science Agent 和 Code Transformation 值得一试