【Jules】Jules AI 助手:快速入门指南_jules如何使用
文章目录
简介
Jules 是 Google 推出的一款实验性 AI 编码助手,它能帮助开发者修复错误、添加文档和构建新功能。Jules 最大的特点是异步工作,这意味着当它处理任务时,你可以转而处理其他事情。Jules 与 GitHub 集成,能够理解你的代码库,并根据你的指令进行工作。
#mermaid-svg-ZyNc3QeCeod9OodG {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZyNc3QeCeod9OodG .error-icon{fill:#552222;}#mermaid-svg-ZyNc3QeCeod9OodG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZyNc3QeCeod9OodG .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ZyNc3QeCeod9OodG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZyNc3QeCeod9OodG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZyNc3QeCeod9OodG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZyNc3QeCeod9OodG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZyNc3QeCeod9OodG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZyNc3QeCeod9OodG .marker.cross{stroke:#333333;}#mermaid-svg-ZyNc3QeCeod9OodG svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZyNc3QeCeod9OodG .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZyNc3QeCeod9OodG .cluster-label text{fill:#333;}#mermaid-svg-ZyNc3QeCeod9OodG .cluster-label span{color:#333;}#mermaid-svg-ZyNc3QeCeod9OodG .label text,#mermaid-svg-ZyNc3QeCeod9OodG span{fill:#333;color:#333;}#mermaid-svg-ZyNc3QeCeod9OodG .node rect,#mermaid-svg-ZyNc3QeCeod9OodG .node circle,#mermaid-svg-ZyNc3QeCeod9OodG .node ellipse,#mermaid-svg-ZyNc3QeCeod9OodG .node polygon,#mermaid-svg-ZyNc3QeCeod9OodG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZyNc3QeCeod9OodG .node .label{text-align:center;}#mermaid-svg-ZyNc3QeCeod9OodG .node.clickable{cursor:pointer;}#mermaid-svg-ZyNc3QeCeod9OodG .arrowheadPath{fill:#333333;}#mermaid-svg-ZyNc3QeCeod9OodG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZyNc3QeCeod9OodG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZyNc3QeCeod9OodG .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ZyNc3QeCeod9OodG .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ZyNc3QeCeod9OodG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZyNc3QeCeod9OodG .cluster text{fill:#333;}#mermaid-svg-ZyNc3QeCeod9OodG .cluster span{color:#333;}#mermaid-svg-ZyNc3QeCeod9OodG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZyNc3QeCeod9OodG :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 用户 创建任务 Jules生成计划 用户确认计划 Jules执行任务 提交更改 用户审查
登录与配置
使用 Jules 的第一步是登录并配置你的账户。
登录步骤
- 访问 jules.google.com
- 使用你的 Google 账户登录
- 首次登录时,接受隐私声明
连接 GitHub
Jules 需要访问你的仓库才能工作。以下是连接 GitHub 的步骤:
- 点击 “Connect to GitHub account”(连接到 GitHub 账户)
- 完成 GitHub 登录流程
- 选择你想要让 Jules 访问的仓库(可以是全部或特定仓库)
- 你将被重定向回 Jules。如果没有,请尝试刷新页面
连接成功后,你将看到一个仓库选择器,可以选择你希望 Jules 处理的仓库,以及一个提示输入框。
创建第一个任务
Jules 会在虚拟机中克隆你的代码、安装依赖项并修改文件。以下是创建任务的步骤:
- 从仓库选择器中选择一个仓库
- 选择你希望 Jules 处理的分支(默认会选择默认分支)
- 编写清晰、具体的提示。例如:
在 utils.js 中为 parseQueryString 函数添加测试
- (可选)添加环境设置脚本
- 点击 “Give me a plan”(给我一个计划)
提交任务后,Jules 会生成一个计划。你可以在进行任何代码更改之前审查并批准该计划。
#mermaid-svg-NMbHzXnllavWwBr3 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NMbHzXnllavWwBr3 .error-icon{fill:#552222;}#mermaid-svg-NMbHzXnllavWwBr3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NMbHzXnllavWwBr3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NMbHzXnllavWwBr3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NMbHzXnllavWwBr3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NMbHzXnllavWwBr3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NMbHzXnllavWwBr3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NMbHzXnllavWwBr3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NMbHzXnllavWwBr3 .marker.cross{stroke:#333333;}#mermaid-svg-NMbHzXnllavWwBr3 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NMbHzXnllavWwBr3 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NMbHzXnllavWwBr3 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-NMbHzXnllavWwBr3 .actor-line{stroke:grey;}#mermaid-svg-NMbHzXnllavWwBr3 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-NMbHzXnllavWwBr3 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-NMbHzXnllavWwBr3 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-NMbHzXnllavWwBr3 .sequenceNumber{fill:white;}#mermaid-svg-NMbHzXnllavWwBr3 #sequencenumber{fill:#333;}#mermaid-svg-NMbHzXnllavWwBr3 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-NMbHzXnllavWwBr3 .messageText{fill:#333;stroke:#333;}#mermaid-svg-NMbHzXnllavWwBr3 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NMbHzXnllavWwBr3 .labelText,#mermaid-svg-NMbHzXnllavWwBr3 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-NMbHzXnllavWwBr3 .loopText,#mermaid-svg-NMbHzXnllavWwBr3 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-NMbHzXnllavWwBr3 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-NMbHzXnllavWwBr3 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-NMbHzXnllavWwBr3 .noteText,#mermaid-svg-NMbHzXnllavWwBr3 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-NMbHzXnllavWwBr3 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NMbHzXnllavWwBr3 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NMbHzXnllavWwBr3 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NMbHzXnllavWwBr3 .actorPopupMenu{position:absolute;}#mermaid-svg-NMbHzXnllavWwBr3 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-NMbHzXnllavWwBr3 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NMbHzXnllavWwBr3 .actor-man circle,#mermaid-svg-NMbHzXnllavWwBr3 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-NMbHzXnllavWwBr3 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 用户 Jules GitHub 登录并选择仓库 克隆仓库 提交任务请求 分析代码和任务 生成执行计划 审核并批准计划 执行任务 提交代码更改供审查 确认并合并更改 用户 Jules GitHub
任务流程
当你提交任务后,Jules 会遵循以下流程:
- 分析任务:Jules 会理解你的请求并分析代码库
- 生成计划:它会创建一个执行任务的详细计划
- 等待批准:你需要审查并批准计划
- 执行任务:Jules 修改代码并运行测试
- 提交更改:完成后,Jules 会提供更改内容供你审查
启用通知
你可以在 Jules 运行任务的同时处理其他事情。要及时获取任务进度通知:
- 当系统提示时,启用浏览器通知
- 随时前往 Settings → notifications 启用或禁用通知
当任务完成或需要你的输入时,系统会通知你。
最佳实践
为了充分利用 Jules,以下是一些最佳实践:
- 明确的指令:提供清晰、具体的任务描述
- 合适的任务范围:从小型、定义明确的任务开始
- 提供上下文:包含相关文件路径和函数名称
- 指定测试要求:说明如何验证更改是否正确
- 环境设置:如果项目有特殊的设置要求,请在提交任务时提供
#mermaid-svg-3LROKG2tYfGsiGfj {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3LROKG2tYfGsiGfj .error-icon{fill:#552222;}#mermaid-svg-3LROKG2tYfGsiGfj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3LROKG2tYfGsiGfj .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3LROKG2tYfGsiGfj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3LROKG2tYfGsiGfj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3LROKG2tYfGsiGfj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3LROKG2tYfGsiGfj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3LROKG2tYfGsiGfj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3LROKG2tYfGsiGfj .marker.cross{stroke:#333333;}#mermaid-svg-3LROKG2tYfGsiGfj svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3LROKG2tYfGsiGfj .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3LROKG2tYfGsiGfj .cluster-label text{fill:#333;}#mermaid-svg-3LROKG2tYfGsiGfj .cluster-label span{color:#333;}#mermaid-svg-3LROKG2tYfGsiGfj .label text,#mermaid-svg-3LROKG2tYfGsiGfj span{fill:#333;color:#333;}#mermaid-svg-3LROKG2tYfGsiGfj .node rect,#mermaid-svg-3LROKG2tYfGsiGfj .node circle,#mermaid-svg-3LROKG2tYfGsiGfj .node ellipse,#mermaid-svg-3LROKG2tYfGsiGfj .node polygon,#mermaid-svg-3LROKG2tYfGsiGfj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3LROKG2tYfGsiGfj .node .label{text-align:center;}#mermaid-svg-3LROKG2tYfGsiGfj .node.clickable{cursor:pointer;}#mermaid-svg-3LROKG2tYfGsiGfj .arrowheadPath{fill:#333333;}#mermaid-svg-3LROKG2tYfGsiGfj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3LROKG2tYfGsiGfj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3LROKG2tYfGsiGfj .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-3LROKG2tYfGsiGfj .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-3LROKG2tYfGsiGfj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3LROKG2tYfGsiGfj .cluster text{fill:#333;}#mermaid-svg-3LROKG2tYfGsiGfj .cluster span{color:#333;}#mermaid-svg-3LROKG2tYfGsiGfj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3LROKG2tYfGsiGfj :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 好的任务示例 明确的指令 合适的范围 具体的文件路径 测试要求 环境细节
代码示例
以下是一个使用 C# 的代码示例,演示如何创建一个可供 Jules 处理的函数:
using System;using System.Collections.Generic;using System.Linq;/// /// 查询字符串解析器/// public class QueryStringParser{ /// /// 解析查询字符串并返回键值对字典 /// /// 要解析的查询字符串,格式如:\"name=value&key=data\" /// 包含键值对的字典 public static Dictionary<string, string> ParseQueryString(string queryString) { // 创建一个新的字典来存储解析后的键值对 var result = new Dictionary<string, string>(); // 如果查询字符串为空,则返回空字典 if (string.IsNullOrWhiteSpace(queryString)) { return result; } // 如果查询字符串以问号开头,删除问号 if (queryString.StartsWith(\"?\")) { queryString = queryString.Substring(1); } // 按 & 符号分割查询字符串为多个参数 string[] parameters = queryString.Split(\'&\'); // 遍历每个参数 foreach (var parameter in parameters) { // 跳过空参数 if (string.IsNullOrWhiteSpace(parameter)) { continue; } // 按 = 符号分割每个参数为键和值 int equalsIndex = parameter.IndexOf(\'=\'); // 处理没有值的参数(如 \"param\",而不是 \"param=value\") if (equalsIndex < 0) { // 将没有值的参数键添加到字典中,值设为空字符串 result[Uri.UnescapeDataString(parameter)] = string.Empty; } else { // 提取键和值,并进行 URL 解码 string key = Uri.UnescapeDataString(parameter.Substring(0, equalsIndex)); string value = equalsIndex < parameter.Length - 1 ? Uri.UnescapeDataString(parameter.Substring(equalsIndex + 1)) : string.Empty; // 将键值对添加到字典中 result[key] = value; } } return result; }}
如果你要向 Jules 提交一个任务来为上述函数编写单元测试,可以这样描述:
为 QueryStringParser 类中的 ParseQueryString 方法编写全面的单元测试。测试应该覆盖以下场景:空查询字符串、带问号的查询字符串、多个参数、URL 编码的参数、没有值的参数。
编写完成后,可以直接上传至github
上传完成后可以在github中查看
常见问题解答
Jules 支持哪些编程语言?
Jules 支持大多数主流编程语言,包括但不限于:JavaScript、TypeScript、Python、Java、C#、Go、Rust 等。
Jules 能否处理私有仓库?
是的,Jules 可以处理你授权访问的私有 GitHub 仓库。
我可以为 Jules 指定特定的 Git 分支吗?
是的,在创建任务时,你可以选择 Jules 应该在哪个分支上工作。
Jules 能否安装项目依赖项?
是的,Jules 会尝试安装项目依赖项。对于复杂的设置,你可以提供额外的环境设置脚本。
如何处理 Jules 生成的不正确代码?
如果 Jules 生成的代码不符合预期,你可以提供反馈并要求它进行修改,或者拒绝其提出的更改。## 学习资源
要深入了解 Jules 的使用,可以参考以下资源:
- Jules 官方文档
- Jules 任务创建页面