本文面向:配置 ChatCrystal 或任何需要 LLM + Embedding 的工具时踩过坑的开发者。 预计阅读时间:5 分钟
问题
配置 ChatCrystal 时,很多人会这样填:
yaml
LLM Provider: openai
LLM Model: gpt-4o
Embedding Provider: openai
Embedding Model: gpt-4o ← 错!
然后报错:404 Not Found 或 This 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 |
| 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 |
| 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)
如果其中一个报错,检查:
- Provider 和 Model 是否匹配
- API Key 是否正确(云端 Provider)
- 服务是否在运行(Ollama:
ollama list)
为什么不能统一
理论上可以用一个模型同时做生成和向量化,但实际不行:
- API 不兼容 --- LLM 的
/v1/chat/completions返回文本,不是向量 - 模型结构不同 --- Embedding 模型专门训练为输出有意义的向量表示
- 质量差异大 --- 用 GPT-4 强行做 Embedding(如果有的话)效果远不如专用模型
常见报错
404 Not Found
模型名填错了,或者该模型不支持当前 API 端点。检查你填的 Model 名称是否存在于对应 Provider。
model not found
Ollama 没有拉取该模型。运行 ollama pull 模型名 下载。
unauthorized
API Key 错误或过期。检查 LLM_API_KEY 或 EMBEDDING_API_KEY 配置。