如果你已经成功运行了 OpenHands,并设置了你的 LLM(大语言模型)。接下来,你可能会想知道如何充分利用这个强大的工具来完成各种工程任务。虽然 OpenHands 的技术仍在不断发展,但它已经能够帮助你处理许多编程任务。本文将介绍一些基本的使用方法,帮助你更好地与 OpenHands 互动。
👋 Hello World 示例
作为入门的第一步,不妨尝试一个简单的 "hello world" 示例。你可以给代理发送以下提示:
请编写一个 bash 脚本 hello.sh,打印 "hello world!"
你会发现,代理不仅会编写脚本,还会设置正确的权限并运行脚本以检查输出。这是一个很好的开始,你可以继续提示代理来优化你的代码。例如:
请修改 hello.sh,使其接受一个名称作为第一个参数,但默认值为 "world"。
你也可以尝试其他编程语言,尽管代理可能需要一些时间来设置环境。例如:
请将 hello.sh 转换为 Ruby 脚本,并运行它。
🏗️ 从零开始构建
OpenHands 在处理“绿地”任务(即不需要任何现有代码库上下文的任务)时表现尤为出色。建议从简单的任务开始,然后逐步迭代。尽量具体说明你的需求和技术栈。例如,我们可以构建一个 TODO 应用:
请构建一个基本的 TODO 列表应用,使用 React。它应该是前端应用,所有状态都保存在 localStorage 中。
一旦基础结构搭建完成,我们可以继续迭代:
请允许为每个任务添加一个可选的截止日期。
就像正常开发一样,频繁提交和推送代码是个好习惯。这样,如果代理偏离了轨道,你可以随时恢复到旧的状态。你可以请求代理为你提交和推送代码:
请提交更改并推送到名为 "feature/due-dates" 的新分支。
➕ 添加新代码
OpenHands 也非常擅长向现有代码库中添加新代码。例如,你可以要求 OpenHands 为你的项目添加一个新的 GitHub Action,用于代码检查。代理可能会查看你的代码库,以确定应该使用哪种语言,然后在 ./github/workflows/lint.yml
中添加新文件:
请添加一个 GitHub Action,用于检查此代码库中的代码。
某些任务可能需要更多的上下文。虽然 OpenHands 可以使用 ls
和 grep
来搜索你的代码库,但提供上下文可以让它更快、更准确,并且节省你的 token 费用。例如:
请修改 ./backend/api/routes.js,添加一个新路由,返回所有任务的列表。
请在 ./frontend/components 目录中添加一个新的 React 组件,显示 Widgets 列表。它应该使用现有的 Widget 组件。
🔄 重构代码
OpenHands 在小范围内重构现有代码时表现良好。你可能不想尝试重构整个代码库,但拆分长文件和函数、重命名变量等操作通常效果很好。例如:
请重命名 ./app.go 中的所有单字母变量。
请将函数 build_and_deploy_widgets 拆分为两个函数,build_widgets 和 deploy_widgets,在 widget.php 中。
请将 ./api/routes.js 拆分为每个路由的单独文件。
🐞 修复错误
OpenHands 还可以帮助你追踪和修复代码中的错误。但正如任何开发者所知,修复错误可能非常棘手,通常 OpenHands 需要更多的上下文。如果你已经诊断了错误,但希望 OpenHands 理清逻辑,这样会更有效。例如:
/subscribe 端点中的电子邮件字段拒绝 .io 域名。请修复此问题。
./app.py 中的 search_widgets 函数正在进行区分大小写的搜索。请将其改为不区分大小写。
在修复错误时,进行测试驱动开发通常会有所帮助。你可以要求代理编写新测试,然后迭代直到修复错误:
hello 函数在空字符串时崩溃。请编写一个测试来重现此错误,然后修复代码以使其通过。
🔑 更多提示
OpenHands 能够帮助你完成几乎所有编码任务,但要充分利用它需要一些练习。记住以下几点:
- 保持任务简单。
- 尽可能具体。
- 提供尽可能多的上下文。
- 频繁提交和推送代码。
有关如何更好地使用 OpenHands 的更多提示,请参见 Prompting Best Practices。
通过这些基本的使用方法,你将能够更有效地与 OpenHands 互动,提升你的开发效率。无论是从零开始构建应用,还是修复现有代码中的错误,OpenHands 都将是你强大的助手。