跳转到内容

支持的模型

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

对话

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

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

托管对话模型见托管 API。

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

智能体模式对对话模型要求更高:需要能力较强的代码模型,例如 qwen3-coder:30b,并以 8k token 或更大的上下文加载。小模型往往调用工具不佳。

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

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

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

系列推荐标签模板仓库级上下文
Qwen2.5-Coderqwen2.5-coder:1.5b-base、qwen2.5-coder:7b-basecodeqwen(任何包含 qwen 但不含 qwen3-coder 的名称)✓
Qwen3-Coderqwen3-coderqwen3-coder✓
CodeLlamacodellama:7b-code、codellama:13b-codecodellama
DeepSeek Coderdeepseek-coder:6.7b-base、deepseek-coder:1.3b-basedeepseek
Codestralcodestral,或 Mistral 托管的 codestral-latestcodestral
StarCoder2starcoder2:3b、starcoder2:7bstarcoder✓
Granite Codegranite-code:3b-base、granite-code:8b-basestarcoder✓
CodeGemmacodegemma:2b-code、codegemma:7b-codecodegemma✓
Stable Codestable-code:3b-codestable-code
CodeGeeXcodegeex4starcoder✓

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

说明:

  • 1.5B 到 7B 的模型是自动补全的最佳区间:跟得上输入速度,又足够有用。从 qwen2.5-coder:1.5b-base 开始,硬件有余量再往上。34b 的 CodeLlama 在 FIM 上表现不佳。
  • starcoder2 和 codegemma 有时不会停止。降低 twinny.temperature 和 twinny.maxLines 有帮助。
  • Qwen3-Coder 只以 instruct 模型发布。FIM 提示以对话形式送达时它才会填空,所以 qwen3-coder 模板就这样发送:对补全路由写成 ChatML(在 Ollama 上开启 raw),对 LiteLLM 和 Twinny 网关则以消息形式发送。
  • 模型名称不匹配任何系列时,twinny 回退到 CodeLlama 格式。可在提供者表单中手动设置模板。
  • 需要自定义提示格式的模型,选择 custom-template 并编辑 ~/.twinny/templates/fim.hbs;见提示词模板。

嵌入

嵌入模型把文本转成向量,用于工作区索引。名称包含 embed、minilm、bge、e5 或 nomic 的模型会被 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 嵌入预设

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