Code Suggestions
- Tier: Premium, Ultimate
- Add-on: GitLab Duo Core, Pro, 或 Enterprise, GitLab Duo with Amazon Q
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
-
LLMs for code completion: Fireworks AI 托管的
Codestral(默认)和 Vertex AI 托管的Codestral。 - LLM for code generation: Anthropic Claude Sonnet 4。
- LLM For Amazon Q: Amazon Q Developer
- Available on GitLab Duo with self-hosted models: Yes
使用 GitLab Duo Code Suggestions,通过生成式 AI 在开发过程中提供代码建议,从而更高效地编写代码。
前置条件
要使用 Code Suggestions,您需要:
- GitLab Duo Core、Pro 或 Enterprise 插件。
- Premium 或 Ultimate 订阅。
- 如果您有 GitLab Duo Pro 或 Enterprise,需要分配的席位。
- 如果您有 GitLab Duo Core,启用 IDE 功能。
GitLab Duo 需要 GitLab 17.2 或更高版本。要使用 GitLab Duo Core 访问,并获得最佳用户体验和结果, 升级到 GitLab 18.0 或更高版本。早期版本可能继续工作,但体验可能会降级。
使用 Code Suggestions
前置条件:
要使用 Code Suggestions:
-
在支持的 IDE中打开您的 Git 项目。
-
使用
git remote add将项目添加为本地仓库的远程仓库。 -
将项目目录(包括隐藏的
.git/文件夹)添加到您的 IDE 工作区或项目中。 -
编写您的代码。 输入时会显示建议。Code Suggestions 提供代码片段 或根据光标位置完成当前行。
-
用自然语言描述需求。 Code Suggestions 根据提供的上下文生成函数和代码片段。
-
当您收到建议时,可以执行以下任一操作:
- 接受建议,按 Tab。
- 接受部分建议,按 Control+右箭头 或 Command+右箭头。
- 拒绝建议,按 Esc。在 Neovim 中,按 Control+E 退出菜单。
- 忽略建议,像平常一样继续输入。
查看多个代码建议
对于 VS Code 中的代码补全建议,可能有多个建议选项可用。要查看所有可用建议:
- 将鼠标悬停在代码补全建议上。
- 滚动浏览替代选项。可以:
- 使用键盘快捷键:
- 在 Mac 上,按 Option + [ 查看上一个建议, 按 Option + ] 查看下一个建议。
- 在 Linux 和 Windows 上,按 Alt + [ 查看上一个建议, 按 Alt + ] 查看下一个建议。
- 在显示的对话框中,选择右箭头或左箭头查看下一个或上一个选项。
- 使用键盘快捷键:
- 按 Tab 应用您偏好的建议。
代码补全和生成
Code Suggestions 使用代码补全和代码生成:
| 代码补全 | 代码生成 | |
|---|---|---|
| 用途 | 提供完成当前代码行的建议。 | 基于自然语言注释生成新代码。 |
| 触发 | 在输入时触发,通常有短暂延迟。 | 在编写包含特定关键词的注释后按 Enter 时触发。 |
| 范围 | 仅限于当前行或小块代码。 | 可以根据上下文生成整个方法、函数甚至类。 |
| 准确性 | 对于小任务和短代码块更准确。 | 对于复杂任务和大代码块更准确,因为使用了更大的大型语言模型(LLM),在请求中发送了额外上下文(例如项目使用的库),并将您的指令传递给 LLM。 |
| 使用方式 | 代码补全会自动为您正在输入的行提供补全建议。 | 您编写注释并按 Enter,或输入空函数或方法。 |
| 使用时机 | 使用代码补全快速完成一行或几行代码。 | 对于更复杂的任务、更大的代码库、当您想基于自然语言描述从头开始编写新代码,或当您正在编辑的文件少于五行时使用代码生成。 |
Code Suggestions 始终同时使用这两个功能。您不能单独使用代码生成或代码补全。
代码生成的最佳实践
要获得代码生成的最佳结果:
- 在保持简洁的同时尽可能具体。
- 说明您想要生成的结果(例如函数) 并提供您想要实现目标的详细信息。
- 添加额外信息,例如您想要使用的框架或库。
- 在每个注释后添加空格或换行。 这个空格告诉代码生成器您已完成指令。
- 在 GitLab 17.2 及更高版本中,当启用
advanced_context_resolver和code_suggestions_context功能标志时,在其他选项卡中打开相关文件以扩展 Code Suggestions 感知的上下文。
例如,要创建具有特定要求的 Python Web 服务,您可能会编写如下内容:
# 使用 Tornado 创建一个允许用户登录、运行安全扫描并查看扫描结果的 Web 服务。
# 每个操作(登录、运行扫描、查看结果)都应该是 Web 服务中的独立资源
...AI 是非确定性的,因此使用相同的输入您可能不会每次都得到相同的建议。 要生成高质量的代码,请编写清晰、描述性、具体的任务。
有关用例和最佳实践,请参阅 GitLab Duo 示例文档。
文件内容截断
由于 LLM 限制和性能原因,当前打开的文件内容会被截断:
- 对于代码补全:截断到 32,000 个 token(约 128,000 个字符)。
- 对于代码生成:截断到 200,000 个 token(约 800,000 个字符)。
光标上方的内容优先于光标下方的内容。光标上方的内容从左侧截断,光标下方的内容从右侧截断。这些数字代表 Code Suggestions 的最大输入上下文大小。
输出长度
由于 LLM 限制和性能原因,Code Suggestions 的输出被限制为:
- 对于代码补全:64 个 token(约 256 个字符)。
- 对于代码生成:2,048 个 token(约 7,168 个字符)。
结果准确性
我们正在持续改进整体生成内容的准确性。 但是,Code Suggestions 可能会生成以下建议:
- 不相关的。
- 不完整的。
- 导致流水线失败。
- 潜在不安全的。
- 冒犯性或不敏感的。
使用 Code Suggestions 时,代码审查的最佳实践仍然适用。
可用的语言模型
不同的语言模型可以作为 Code Suggestions 的来源。
- 在 GitLab.com 上:GitLab 托管模型并通过基于云的 AI 网关连接它们。
- 在 GitLab Self-Managed 上,有两个选项:
- GitLab 可以托管模型并通过基于云的 AI 网关连接它们。
- 您的组织可以使用 GitLab Duo Self-Hosted, 这意味着您托管 AI 网关和语言模型。您可以使用 GitLab AI 供应商模型 或其他支持的语言模型。
提示词的构建方式
要了解构建提示词的代码,请查看以下文件:
- 代码生成:
ee/lib/api/code_suggestions.rb在gitlab仓库中。 - 代码补全:
ai_gateway/code_suggestions/processing/completions.py在modelops仓库中。
提示词缓存
默认启用提示词缓存以改善 Code Suggestions 延迟。启用提示词缓存后,代码补全提示词数据会临时存储在模型供应商的内存中。提示词缓存通过避免重新处理缓存的提示词和输入数据,显著改善了延迟。缓存的数据永远不会记录到任何持久存储中。
禁用提示词缓存
您可以在 GitLab Duo 设置中为顶级组禁用提示词缓存。
在 GitLab.com 上:
- 在左侧边栏,选择 搜索或跳转 并找到您的组。
- 选择 设置 > GitLab Duo。
- 选择 更改配置。
- 禁用 提示词缓存 开关。
- 选择 保存更改。
在 GitLab Self-Managed 上:
- 在左侧边栏,选择 搜索或跳转 并找到您的组。
- 选择 设置 > 常规。
- 展开 GitLab Duo 功能。
- 禁用 提示词缓存 开关。
- 选择 保存更改。
响应时间
Code Suggestions 由生成式 AI 模型驱动。
- 对于代码补全,建议通常延迟较低,耗时不到一秒。
- 对于代码生成,算法或大代码块可能需要超过五秒才能生成。
您的个人访问令牌 enables a secure API connection to GitLab.com or to your GitLab instance. This API connection securely transmits a context window from your IDE/editor to the GitLab AI gateway, a GitLab hosted service. The gateway calls the large language model APIs, and then the generated suggestion is transmitted back to your IDE/editor.
流式传输
JetBrains 和 Visual Studio 支持代码生成响应的流式传输,从而 实现更快的感知响应时间。 其他支持的 IDE 将以单个块返回生成的代码。
代码补全不支持流式传输。
直接和间接连接
默认情况下,代码补全请求从 IDE 直接发送到 AI 网关以最小化延迟。
要使此直接连接正常工作,IDE 必须能够连接到 https://cloud.gitlab.com:443。如果这不可行
(例如由于网络限制),您可以为所有用户禁用直接连接。如果这样做,
代码补全请求将通过 GitLab Self-Managed 实例间接发送,该实例又将请求发送到
AI 网关。这可能会导致您的请求延迟更高。
配置直接或间接连接
前置条件:
- 您必须是 GitLab Self-Managed 实例的管理员。
- 在左侧边栏底部,选择 管理员。
- 选择 设置 > 常规。
- 展开 GitLab Duo 功能。
- 在 连接方式 下,选择一个选项:
- 要最小化代码补全请求的延迟,选择 直接连接。
- 要为所有用户禁用直接连接,选择 通过 GitLab Self-Managed 实例间接连接。
- 选择 保存更改。
- 在左侧边栏底部,选择 管理员。
- 选择 设置 > 常规。
- 展开 AI 原生功能。
- 选择一个选项:
- 要启用直接连接并最小化代码补全请求的延迟,清除 禁用代码建议的直接连接 复选框。
- 要禁用直接连接,选择 禁用代码建议的直接连接 复选框。
反馈
请在 issue 435783 中提供您对 Code Suggestions 体验的反馈。