LLM 和 Embedding 不能混用——一个血泪教训

本文面向:配置 ChatCrystal 或任何需要 LLM + Embedding 的工具时踩过坑的开发者。 预计阅读时间:5 分钟


问题

配置 ChatCrystal 时,很多人会这样填:

yaml 复制代码
LLM Provider: openai
LLM Model: gpt-4o

Embedding Provider: openai
Embedding Model: gpt-4o        ← 错!

然后报错:404 Not FoundThis model does not support embeddings

原因

LLM 和 Embedding 是两种完全不同的任务:

LLM Embedding
输入 文本 文本
输出 文本(生成内容) 向量(一组浮点数)
API 端点 /v1/chat/completions /v1/embeddings
用途 对话、摘要、推理 语义搜索、相似度计算

GPT-4、Claude、Qwen 这些 LLM 不支持 /v1/embeddings 端点。 它们是生成模型,不是向量模型。你不能用一个锤子当螺丝刀使。

正确配置

LLM 和 Embedding 必须分别配置,用不同的模型:

方案一:全部本地(Ollama)

env 复制代码
LLM_PROVIDER=ollama
LLM_MODEL=qwen2.5:7b           # 生成模型

EMBEDDING_PROVIDER=ollama
EMBEDDING_MODEL=nomic-embed-text  # 向量模型

方案二:全部云端(OpenAI)

env 复制代码
LLM_PROVIDER=openai
LLM_MODEL=gpt-4o                # 生成模型

EMBEDDING_PROVIDER=openai
EMBEDDING_MODEL=text-embedding-3-small  # 向量模型

方案三:混合搭配

env 复制代码
LLM_PROVIDER=openai
LLM_MODEL=gpt-4o                # 云端 LLM,质量更好

EMBEDDING_PROVIDER=ollama
EMBEDDING_MODEL=nomic-embed-text  # 本地 Embedding,免费

三种方案都可以,根据你的预算和隐私需求选择。

各 Provider 的可用模型

LLM(生成模型)

Provider 可用模型
Ollama qwen2.5:7b, llama3.1:8b, mistral:7b 等
OpenAI gpt-4o, gpt-4-turbo, gpt-3.5-turbo
Anthropic claude-sonnet-4-20250514, claude-haiku-4-5-20251001
Google gemini-2.0-flash, gemini-2.5-pro

Embedding(向量模型)

Provider 可用模型
Ollama nomic-embed-text, mxbai-embed-large
OpenAI text-embedding-3-small, text-embedding-3-large
Google text-embedding-004

注意: Anthropic(Claude)没有提供 Embedding 模型。如果你用 Anthropic 做 LLM,Embedding 必须用其他 Provider。

怎么验证配置正确

bash 复制代码
crystal config test

输出示例:

less 复制代码
LLM connection: OK (model: qwen2.5:7b, latency: 1.2s)
Embedding connection: OK (model: nomic-embed-text, latency: 0.3s)

如果其中一个报错,检查:

  1. Provider 和 Model 是否匹配
  2. API Key 是否正确(云端 Provider)
  3. 服务是否在运行(Ollama:ollama list

为什么不能统一

理论上可以用一个模型同时做生成和向量化,但实际不行:

  1. API 不兼容 --- LLM 的 /v1/chat/completions 返回文本,不是向量
  2. 模型结构不同 --- Embedding 模型专门训练为输出有意义的向量表示
  3. 质量差异大 --- 用 GPT-4 强行做 Embedding(如果有的话)效果远不如专用模型

常见报错

404 Not Found

模型名填错了,或者该模型不支持当前 API 端点。检查你填的 Model 名称是否存在于对应 Provider。

model not found

Ollama 没有拉取该模型。运行 ollama pull 模型名 下载。

unauthorized

API Key 错误或过期。检查 LLM_API_KEYEMBEDDING_API_KEY 配置。


项目地址:github.com/ZengLiangYi...

相关推荐
寅时码2 小时前
React 之死·终章:一个 useRef,把闭包陷阱、依赖数组、漫天 rerender 全送走
前端·react.js·ai编程
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
腻害兔6 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
kyriewen6 小时前
我扒了最近的前端面经——2026年面试不背八股文了,考这5样
前端·面试·ai编程
奋飛9 小时前
AI应用工程:Agent 是如何工作的?——从一次模型调用到可运行的执行循环
ai编程
钱六两9 小时前
#3、SpringAI 接入deepSeek大模型(喂饭版)
java·spring boot·ai编程
小村儿11 小时前
连载14-实战篇--一个半月,我一个人和 Claude Code 搭出一套数字人工程
前端·后端·ai编程
阿里云云原生11 小时前
AI 时代的 FinOps 必修课:如何利用 Credits 刻度实现大模型流量的精细化治理?
ai编程
名不经传的养虾人12 小时前
从0到1:企业级AI项目迭代日记 Vol.71|系统显示正常,但实际上什么都没发生
数据库·人工智能·ai编程·ai工作流·企业ai
程序员秋天12 小时前
用Spring AI实现多轮对话记忆,别再让AI每次都"失忆"
agent·ai编程