上下文与提及
模型只能回答它看到的内容。twinny 让附加正确的东西变得快捷,并让每个来源都有上限,以免小模型被淹没。
@ 菜单
在消息框输入 @。会出现分类列表;选一个分类再选项目,或继续输入以过滤。附加的项目以标签形式显示在消息框上方,发送前可移除。
| 提及 | 发送的内容 | 限制 |
|---|---|---|
@files 再输入名称 | 文件内容,标注路径。输入部分名称即可搜索工作区;列表来自资源管理器的文件树,因此被忽略的目录不在其中 | 整个文件 |
@symbols 再输入名称 | 通过语言服务器找到的一个函数、类、方法或其他符号,只含其代码及文件和行号。该文件的语言服务器必须处于活动状态 | 最多显示 30 个匹配 |
@workspace | 针对问题搜索工作区索引,返回扩展到所在函数并附文件 import 的最佳分块 | 最多 6 个分块,每个 3,000 字符,总计 12,000 |
@problems | 问题面板中的错误和警告,含文件、行号和信息 | 前 50 条 |
@git | 当前分支、git status --short 和工作区 diff | diff 在文件边界处截断至 16,000 字符 |
@terminal | 通过 VS Code shell 集成获取的当前终端最后运行的命令及其输出 | 最后 200 行或 12,000 字符 |
@workspace、@problems、@git 和 @terminal 这些词在发送前会从问题中移除;模型看到的是附加的内容块。
其他附加方式
- 右键文件(资源管理器或编辑器):Twinny - Add file to context。
- 右键选区:Twinny: Add Selection to Context。选区连同文件和行范围一起附加。
- 选中代码后发送。 按下发送时编辑器中选中的代码会自动附加;字符数显示在输入框下方。
- 图片。 把图片粘贴或拖入消息。对接受图片的模型(
llama3.2-vision、llava、托管的 GPT 和 Claude 模型)它作为图片部分发送;其他模型会忽略。 - 命令。 Explain 附加选区;修复最后的终端错误 → 在对话中询问 附加输出和最多三个被引用的文件;代码审查附加 diff 的摘要。
上下文如何呈现给模型
附加的文件和选区格式化为带路径(及相关时的行范围)的标注块,然后是问题。工作区结果放在一条简短说明之后,说明告诉模型引用这些标签并忽略无关块。问题、git 和终端各有自己的标注段落。系统消息来自 system.hbs;见提示词模板。
这些都计入模型的上下文窗口。Ollama 的默认窗口很小;如果回答忽略了附加的文件,或服务器报告提示过长,请提高 num_ctx(见 Ollama)或减少附加内容。
选好上下文
- 知道答案在哪时,一个文件胜过整个工作区。
@workspace用于跨项目的“在哪里……”和“……是怎么工作的”问题。 - 关于单个函数的问题,符号胜过文件:模型读 40 行而不是 400 行。
- 问题 + 文件是“为什么这里标红”的正确组合。
- Git 适合“总结我改了什么”和“我漏了什么”。
- 终端把失败的命令直接变成问题,无需复制粘贴。