上下文管理 - Amazon Q 开发者版

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

上下文管理

选择正确的情境方法

Amazon Q 提供了三种提供背景信息的方式,每种方式都针对不同的用例进行了优化:

方法 上下文窗口影响 Persistence 最适合
代理资源 始终处于活动状态(消耗代币) 跨会话持续 基本项目文件、标准、配置
会话上下文 始终处于活动状态(消耗代币) 仅限当前会话 临时文件,快速实验
知识库 仅当被搜索时 跨会话持续 庞大的代码库,大量的文档

决策流程图

使用此决策树来选择适当的上下文方法:

  1. 您的内容是否大于 10MB 或包含数千个文件?

    • → 使用知识库

    • → 继续步骤 2

  2. 你在每次对话中都需要这样的背景吗?

    • → 使用代理资源

    • → 使用会话上下文

快速参考:

  • 基本项目文件(自述文件、配置、标准)→ 代理资源

  • 大型代码库或文档集 → 知识库

  • 当前任务的临时文件 → 会话上下文

了解上下文窗口的影响

无论是否被引用,上下文文件和代理资源都会在每次请求上消耗上下文窗口中的令牌。/context show用于监控令牌使用情况:

q chat > /context show Total: ~1100 tokens

令牌限制:上下文文件限制在模型上下文窗口的 75% 以内。超过此限制的文件将被自动删除。

知识库在搜索之前不会占用上下文窗口空间,因此非常适合存放大型参考资料。有关更多信息,请参阅 知识库上下文(适用于大型数据集)

管理上下文

上下文文件包含您希望 Amazon Q 在对话期间考虑的信息。这些信息可能包括项目要求、编码标准、开发规则或任何其它有助于 Amazon Q 提供更相关回复的信息。

使用代理资源配置持久上下文

配置上下文的建议方法是通过代理配置文件中的 resources 字段。这将创建每次使用代理时都可用的持久上下文。

在代理配置中向 resources 数组添加文件路径或 glob 模式:

{ "name": "my-agent", "description": "My development agent", "resources": [ "file://README.md", "file://.amazonq/rules/**/*.md", "file://docs/**/*.md", "file://src/config.py" ] }

资源必须以 file:// 为前缀才能作为上下文文件包含在内。这些文件将自动在使用此代理的所有聊天会话中可用。

添加临时会话上下文

您可以使用 /context add 命令临时将文件添加到当前的聊天会话中。这些新增的文件仅适用于当前会话,在您开始新的聊天会话时不会保留。

q chat > /context add README.md Added 1 path(s) to context. Note: Context modifications via slash command is temporary.

还可以使用 glob 模式一次添加多个文件:

q chat > /context add docs/*.md Added 3 path(s) to context. Note: Context modifications via slash command is temporary.

要使上下文更改永久化,请改为将文件添加到代理的 resources 字段中。有关更多信息,请参阅 使用代理资源配置持久上下文

知识库上下文(适用于大型数据集)

对于超出上下文窗口限制的大型代码库、文档集或参考资料,请使用知识库。知识库提供语义搜索功能,在搜索之前不会占用上下文窗口空间。

启用知识库:

q settings chat.enableKnowledge true

向知识库添加内容:

q chat > /knowledge add /path/to/large-codebase --include "**/*.py" --exclude "node_modules/**"

当需要相关信息时,Amazon Q 会按需搜索知识库,因此非常适合存放大型参考资料。

查看上下文

要查看当前的上下文,请使用 /context show 命令:

q chat > /context show 👤 Agent (my-agent): README.md (1 match) .amazonq/rules/**/*.md (3 matches) docs/**/*.md (5 matches) 💬 Session (temporary): <none> 5 matched files in use: 👤 README.md (~250 tkns) 👤 .amazonq/rules/security.md (~180 tkns) 👤 .amazonq/rules/coding-standards.md (~320 tkns) 👤 docs/architecture.md (~150 tkns) 👤 docs/best-practices.md (~200 tkns) Total: ~1100 tokens

输出将显示:

  • 👤 代理:来自代理的 resources 字段的持久上下文

  • 💬 会话:在当前会话期间添加的临时上下文

移除上下文

要从当前会话上下文中移除文件,请使用 /context rm 命令:

q chat > /context rm src/temp-file.py Removed 1 path(s) from context. Note: Context modifications via slash command is temporary.

要清除所有会话上下文,请使用 /context clear 命令:

q chat > /context clear Cleared context Note: Context modifications via slash command is temporary.

注意:您无法使用 /context 命令移除代理定义的上下文。要永久移除上下文,请编辑代理的 resources 字段。

常见使用案例

以下是上下文管理的一些常见使用案例:

使用项目规则

Amazon Q 支持可以定义安全准则和限制的项目级规则。这些规则是在项目的 .amazonq/rules 目录下的 Markdown 文件中定义的。

例如,您可以创建规则来指定:

  • Amazon Q 应避免访问哪些目录

  • 所生成代码的安全要求

  • 编码标准和最佳实践

包含项目规则的建议方法是通过代理配置:

{ "name": "my-project-agent", "resources": [ "file://.amazonq/rules/**/*.md", "file://README.md", "file://docs/architecture.md" ] }

也可以临时将项目规则添加到当前会话中:

q chat > /context add .amazonq/rules/*.md Added 3 path(s) to context. Note: Context modifications via slash command is temporary.

有关创建和使用项目规则的更多信息,请参阅 IDE 文档中的 Creating project rules for use with Amazon Q Developer chat

从会话上下文迁移到代理资源

如果您发现自己使用 /context add 命令反复添加相同的上下文文件,请考虑将它们移至代理的 resources 字段以实现持久性:

  1. 记下您经常使用 /context add 添加的文件

  2. 使用/agent edit或直接修改代理配置文件来编辑该文件

  3. 将文件路径添加到带 file:// 前缀的 resources 数组

  4. 保存代理配置

示例迁移:

# Instead of running these commands every session: > /context add README.md > /context add docs/*.md > /context add .amazonq/rules/*.md # Add them to your agent config once: { "resources": [ "file://README.md", "file://docs/**/*.md", "file://.amazonq/rules/**/*.md" ] }

何时使用知识库

在以下情况下可以考虑知识库:

  • 您的上下文文件超过了令牌限制(上下文窗口的 75%)

  • 你有大量的代码库或文档集

  • 你需要对大量材料进行语义搜索

  • 你想避免持续使用上下文窗口

示例:与其添加大型代码库作为上下文文件:

# This would consume too many tokens: > /context add src/**/*.py # Use knowledge base instead: > /knowledge add src/ --include "**/*.py" --exclude "__pycache__/**"

使用上下文设置默认代理

您可以配置包含首选上下文文件的默认代理:

q settings chat.defaultAgent my-project-agent

这样可以确保您的上下文在新的聊天会话中自动可用,而无需每次都指定代理。

最佳实践

上下文文件组织

  • 保持上下文文件的重点和相关性,以避免令牌限制

  • 使用说明其目的的描述性文件名

  • 在逻辑目录结构中整理规则和文档

  • 考虑文件大小——非常大的文件可能会消耗大量令牌

性能注意事项

  • 监控代币使用情况/context show以保持在限制范围内

  • 使用特定的全局模式,而不是过于宽泛的模式

  • 从代理配置中移除未使用的上下文文件

  • 考虑将大型上下文文件拆分为较小的、有针对性的文件

  • 使用大型数据集的知识库以避免使用上下文窗口

安全性注意事项

  • 避免在上下文文件中包含敏感信息

  • 用于.gitignore防止敏感上下文的意外提交

  • 定期查看上下文文件,确保其中不包含过时的信息

  • 在对话中使用上下文时要注意共享哪些信息