跳转到内容

支持的模型

twinny 可以使用你的服务器能运行的任何模型,但三项工作需要不同类型的模型。下面列出的是经过尝试且效果良好的模型。如果你发现其他好用的模型,请提交 issue 或 pull request

对话

任何经过指令训练的模型都可用于对话、内联编辑、代码审查和提交信息。小模型足以应付简短问题和编辑;审查和长对话则受益于更大的模型。

模型规格说明
qwen2.5-coder -instruct1.5b、3b、7b、14b、32b各规格下最全面的代码模型系列
llama3.1llama3.23b、8b、70b通用对话能力强
deepseek-coder-v216b擅长代码,需要较多内存
codestral22b代码表现优秀;也是 FIM 模型
mistralmistral-nemo7b、12b
codellama:7b-instruct7b、13b、34b较旧但可靠
phind-codellama34b

托管对话模型见托管 API

视觉模型(llama3.2-visionllava、托管的 GPT 和 Claude 模型)接受粘贴到对话中的图片。

代码补全(fill-in-the-middle)

只有使用 fill-in-the-middle(FIM)标记训练的模型才能在光标前后的内容之间补全代码。对大多数系列来说是 basecode 变体。instruct 模型也会给出建议,但往往会啰嗦或解释,而不是补全。

FIM 模板设为自动时,twinny 根据模型名称选择提示格式。下表列出它能识别的名称。

系列推荐标签模板仓库级上下文
Qwen2.5-Coderqwen2.5-coder:1.5b-baseqwen2.5-coder:7b-basecodeqwen(任何包含 qwen 的名称)
CodeLlamacodellama:7b-codecodellama:13b-codecodellama
DeepSeek Coderdeepseek-coder:6.7b-basedeepseek-coder:1.3b-basedeepseek
Codestralcodestral,或 Mistral 托管的 codestral-latestcodestral
StarCoder2starcoder2:3bstarcoder2:7bstarcoder
Granite Codegranite-code:3b-basegranite-code:8b-basestarcoder
CodeGemmacodegemma:2b-codecodegemma:7b-codecodegemma
Stable Codestable-code:3b-codestable-code
CodeGeeXcodegeex4starcoder

仓库级上下文指模型有标记文件名的 token,相邻文件会作为独立块传入,而不是注释文本。

说明:

  • 1.5B 到 7B 的模型是自动补全的最佳区间:跟得上输入速度,又足够有用。从 qwen2.5-coder:1.5b-base 开始,硬件有余量再往上。34b 的 CodeLlama 在 FIM 上表现不佳。
  • starcoder2codegemma 有时不会停止。降低 twinny.temperaturetwinny.maxLines 有帮助。
  • 模型名称不匹配任何系列时,twinny 回退到 CodeLlama 格式。可在提供者表单中手动设置模板。
  • 需要自定义提示格式的模型,选择 custom-template 并编辑 ~/.twinny/templates/fim.hbs;见提示词模板

嵌入

嵌入模型把文本转成向量,用于工作区索引。名称包含 embedminilmbgee5nomic 的模型会被 twinny 识别为嵌入模型。

模型大小说明
nomic-embed-text137M质量好,8k token 上下文。推荐默认
all-minilm23M非常小且快;256 token 窗口意味着 twinny 会分窗口嵌入每个分块
mxbai-embed-large335M质量更高,更慢
bge-m3567M多语言
snowflake-arctic-embed22M 至 335M
OpenAI text-embedding-3-small托管通过 OpenAI 嵌入预设

更换嵌入模型需要重建索引,因为不同模型的向量不能混用。对结果排序的重排序器是独立且内置的,不依赖嵌入模型。