# OpenHands 入门指南

你已经[安装了 OpenHands](./installation)并且[设置了你的 LLM](./installation#setup)。接下来呢？

OpenHands 可以帮助你处理各种各样的工程任务。但这项技术仍然很新,我们还有很长的路要走,才能拥有无需任何指导就能承担大型、复杂工程任务的智能体。因此,了解智能体擅长什么,以及可能需要什么帮助非常重要。

## Hello World

你可能想尝试的第一件事是一个简单的 "hello world" 示例。这听起来可能比实际操作更复杂!

尝试提示智能体:
> 请编写一个 bash 脚本 hello.sh,打印 "hello world!"

你会发现,智能体不仅编写了脚本,还设置了正确的权限并运行脚本来检查输出。

你可以继续提示智能体优化你的代码。这是一个与智能体合作的好方法。从简单开始,然后迭代。

> 请修改 hello.sh,使其接受一个名称作为第一个参数,但默认为 "world"

你也可以使用任何你需要的语言,尽管智能体可能需要花一些时间来设置环境!

> 请将 hello.sh 转换为 Ruby 脚本,并运行它

## 从头开始构建

智能体在 "绿地" 任务(不需要任何关于现有代码库的上下文的任务)上表现得非常出色,它们可以从头开始。

最好从一个简单的任务开始,然后迭代它。同时也最好尽可能具体地说明你想要什么,技术栈应该是什么等等。

例如,我们可以构建一个 TODO 应用:

> 请用 React 构建一个基本的 TODO 列表应用。它应该只有前端,所有状态都应该保存在 localStorage 中。

一旦骨架搭建好,我们就可以继续迭代应用:

> 请允许为每个任务添加一个可选的截止日期

就像普通开发一样,经常提交和推送代码是一个好习惯。这样,如果智能体偏离了轨道,你总是可以恢复到旧的状态。你可以让智能体为你提交和推送:

> 请提交更改并将其推送到一个名为 "feature/due-dates" 的新分支

## 添加新代码

OpenHands 也可以很好地向现有代码库添加新代码。

例如,你可以要求 OpenHands 向你的项目添加一个新的 GitHub action,用于检查你的代码。OpenHands 可能会查看你的代码库,看看它应该使用什么语言,然后它可以直接将一个新文件放入 `./github/workflows/lint.yml`

> 请添加一个 GitHub action 来检查此仓库中的代码

有些任务可能需要更多的上下文。虽然 OpenHands 可以使用 `ls` 和 `grep` 来搜索你的代码库,但提前提供上下文可以让它移动得更快、更准确。而且这会让你花费更少的 tokens!

> 请修改 ./backend/api/routes.js 以添加一个新路由,返回所有任务的列表

> 请在 ./frontend/components 目录中添加一个新的 React 组件,用于显示 Widgets 列表。它应该使用现有的 Widget 组件。

## 重构

OpenHands 在重构现有代码方面做得很好,尤其是小块的重构。你可能不想尝试重新设计整个代码库,但拆分长文件和函数、重命名变量等往往效果很好。

> 请重命名 ./app.go 中所有单字母变量

> 请在 widget.php 中将函数 `build_and_deploy_widgets` 拆分为两个函数:`build_widgets` 和 `deploy_widgets`

> 请将 ./api/routes.js 拆分为每个路由的单独文件

## Bug 修复

OpenHands 还可以帮助你跟踪和修复代码中的 bug。但是,正如任何开发人员都知道的那样,修复 bug 可能非常棘手,OpenHands 通常需要更多的上下文。如果你已经诊断出了 bug,但希望 OpenHands 来解决逻辑问题,这会有所帮助。

> 目前 `/subscribe` 端点中的 email 字段正在拒绝 .io 域名。请修复这个问题。

> ./app.py 中的 `search_widgets` 函数正在执行区分大小写的搜索。请使其不区分大小写。

在使用智能体修复 bug 时,进行测试驱动开发通常很有帮助。你可以要求智能体编写一个新的测试,然后迭代直到它修复了 bug:

> `hello` 函数在空字符串上崩溃。请编写一个测试来重现这个 bug,然后修复代码,使其通过测试。

## 更多

OpenHands 能够在几乎任何编码任务上提供帮助。但是需要一些练习才能充分利用它。请记住:
* 保持任务简单
* 尽可能具体
* 提供尽可能多的上下文
* 经常提交和推送

有关如何充分利用 OpenHands 的更多提示,请参阅[提示最佳实践](./prompting-best-practices)。
