← Back to list

AnythingLLM 結合開源 Embedder 提升RAG的繁體中文能力

剛好上週看到了這篇文章:

CWChang · 2024-08-09 10:11 · 22 claps · 5.7 min read
#llm #rags #embedding-model
Open on Medium ↗
Wiki topics: LLM · Large Language Models RAG · RAG & Retrieval

AnythingLLM 結合開源 Embedder 提升RAG的繁體中文能力

剛好上週看到了這篇文章:

文中測試了許多的開源及閉源 embedder 對於繁體中文的能力進行評估,並給出了建議。

剛好最近的工作中,已經測試過各種中文 embedding 模型(簡體/多語系),這些 embedder 剛出來時就會發新聞說自己是目前中文最強 embedding,或者說用多少模型大小就達到 SOTA 水準

其實每個模型在自己實際體驗上差異很大,而且繁體與簡體的特性也不太相同,甚至在不同的 chunk size 跟 chunk overlap 能達到的成效也都不太相同,只能仰賴自己實作跟實驗使用 RAG 情境才能知道。

另外,真心覺得評測文章內容算是非常有幫助的,蠻多評分等級的部分跟我自己體感上是差不多的。

由於 上一篇文章 介紹了容易使用的 AnythingLLM + Ollama,那就繼續介紹怎麼在 AnythingLLM 上更換 embedding 模型吧

Embedding 要怎麼更改?

1. Ollama 內建(也可以用不同平台)

由於 Ollama 支援 embedding 模型,可以透過 Ollama 下載別人上傳的 embedding 模型即可,如下方的範例指令下載了jina-embedding

ollama pull cwchang/jina-embeddings-v2-base-zh:q8_0

就直接可以在 ollama 選單中找到並使用囉~

2. 自行撰寫 API

開頭的評測文章中,讓我對微軟的 intfloat/multilingual-e5-large 很感興趣,另外許多歐洲國家的開發者使用 RAG 應用時,也都建議使用 multilingual-e5-large,儘管模型本身 chunk size 最大只支援512,但是其實也夠用了。

但在 Ollama 上會發現找不到 multilingual-e5-large 模型,甚至也有 issue 在討論這個模型 (主因是不支援XLMRobertaModel),最簡單的方式就是自己寫囉。

AnythingLLM 除了提供的各種 Embedder 的平台,其實還提供了 Generic OpenAI 的選項,讓你自行客製化成類似 OpenAI 的服務,其實就能夠使用了。

Generic OpenAI 的 API 測試

透過 huggingface space 測試 API 可以像下方這樣寫(如果 sleep 就要等 server 重啟囉)

import requests
import json

url = "https://chienweichang-multilingual-e5-large.hf.space/v1/embeddings"
# url = "http://172.17.0.1:8080/v1/embeddings" # 本地端架好後, 就能透過此url連到
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer test123"
}
data = {
    "input": [
        "The quick brown fox jumps over the lazy dog.",
        "I love programming in Python."
    ],
    "model": "intfloat/multilingual-e5-large"
}

response = requests.post(url, headers=headers, data=json.dumps(data))
embeddings = response.json()
print(json.dumps(embeddings, indent=2))

** Space上面的速度其實很慢,但是還是可以測試一下效果

本地端架設

要執行速度快當然還是架在本地端囉

  • 本範例是用 docker-compose 架設

透過 git 取得已經寫好的專案

git clone https://github.com/ammosu/e5-embedding-api.git
cd e5-embedding-api

用 docker-compose 啟動

docker-compose up -d --build
  • 執行時間會比較久(含 docker container 啟動後會下載模型檔案, 可能需要超過 5 分鐘)

測試結果

用相同的測試程式碼,修改 url 即可

本機端可以成功呼叫,會發現執行速度會比 Space 上快非常多

AnythingLLM 設定

接著就照原本的嵌入文本的作法來重新嵌入文件吧

測試

建立一個餵了許多紫微斗數的課程,變成了會算命的 RAG 機器人

採用下列相同參數 Chunk size = 512, Chunk overlap = 180, Similarity threshold ≥ 0.75

  • 採用 ollama 上的 mofanke/acge_text_embedding

上面的 embedding 完全找不到參考文件,就會變成一般聊天而已。

  • 採用 multilingual-e5-large

可以看引用文件,會發現其實蠻準確的,三個文件都有講到 離婚 關鍵字,加上語言模型的統整效果,看起來超像算命仙。

結論

如果照上面的流程來建立,可以成功架設 multilingual-e5-large 這個 embedder,也當然可以改成各種開源的嵌入模型囉。

可以自行嘗試跟 ollama 上 pull 下來的 embedding model 相互比較,通常會發現 multilingual-e5-large 比現有的開源 embedder 強蠻多的,不過整體應用還是需要跟實際的問答環境有關,也許會有不同的觀察結果。


메타데이터
post_id
7745c36ea9d8
slug
anythingllm-結合開源-embedder-提升rag的繁體中文能力-7745c36ea9d8
url
https://medium.com/@pang2258/anythingllm-%E7%B5%90%E5%90%88%E9%96%8B%E6%BA%90-embedder-%E6%8F%90%E5%8D%87rag%E7%9A%84%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87%E8%83%BD%E5%8A%9B-7745c36ea9d8
canonical_url
https://medium.com/@pang2258/anythingllm-%E7%B5%90%E5%90%88%E9%96%8B%E6%BA%90-embedder-%E6%8F%90%E5%8D%87rag%E7%9A%84%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87%E8%83%BD%E5%8A%9B-7745c36ea9d8
author_url
https://medium.com/@pang2258
status
ok
fetched_at
2026-07-23 04:50:05