Ollama Embedding Models Support

Ollama 已经引入了对嵌入模型(embedding models)的支持,允许开发者构建检索增强生成(RAG)应用,将文本提示与本地文档或外部数据相结合。此次更新使得直接在 Ollama 环境中生成向量嵌入(vector embeddings)——即语义含义的数值表示——成为可能。

Understanding Embedding Models

嵌入模型将文本序列转换为向量嵌入,这些是代表输入语义含义的长数字数组。这些数组可以存储在向量数据库中,通过比较来搜索语义相似的数据,而不是依赖简单的关键词匹配。

Supported Embedding Models

Ollama 提供了多种不同规模的嵌入模型,以平衡性能和资源占用:

Model Parameter Size
mxbai-embed-large 334M
nomic-embed-text 137M
all-minilm 23M

Implementation and Usage

在 Ollama 中生成向量嵌入是通过拉取模型并利用可用接口来完成的。在执行 ollama pull mxbai-embed-large 后,用户可以通过以下方法生成嵌入:

REST API

用户可以使用 /api/embed 端点来生成嵌入:

curl http://localhost:11434/api/embed -d '{
  "model": "mxbai-embed-large",
  "input": "Llamas are members of the camelid family"
}'

Client Libraries

Ollama 为 Python 和 JavaScript 提供了官方库,以简化嵌入过程:

Python:

ollama.embed(
  model='mxbai-embed-large',
  input='Llamas are members of the camelid family',
)

ollama.embed({
    model: 'mxbai-embed-large',
    input: 'Llamas are members of the camelid family',
})

Ollama 还集成了流行的编排框架,包括 LangChain 和 LlamaIndex。

Building a RAG Application

使用 Ollama 和类似 ChromaDB 的向量数据库实现检索增强生成(RAG)主要分为三个步骤:

  1. Generate Embeddings: 文本文档使用像 mxbai-embed-large 这样的模型转换为向量嵌入并存储在集合中。
  2. Retrieve: 输入提示被转换为嵌入,然后用于查询向量数据库以检索语义最相关的文档。
  3. Generate: 检索到的文档作为上下文传递给生成模型(例如 llama2),以生成基于事实的回答。

Future Roadmap

Ollama 正在计划多项更新以增强嵌入工作流,包括:

  • Batch embeddings: 同时处理多个输入提示的能力。
  • OpenAI API Compatibility: 支持与 OpenAI 兼容的 /v1/embeddings 端点。
  • Expanded Architectures: 支持更多的嵌入模型架构,包括 ColBERT 和 RoBERTa。

Sources

相关