思源接入本地 ollama 部署的 qwen3-embedding
·
前言
思源3.7后,官网已经接入Agent和语义搜索功能,语义搜索需要agent embedding,实现方式有两种:
- 调用商用的agent api,比如qwen-embedding3等模型
- 自己搭建。
我这里选择的方式是第二种,通过ollama部署qwen3-embedding
环境:Win10,ollama0.31.2,python,fastAPI。
补充
ollama是兼容OPENAI的API的,应该是我URL有误,AI搜索出来的居然是有误的。可以直接使用本地的URL:http://127.0.0.1:11434/v1/
不需要脚本了。
安装ollam
官网链接:ollama,下载完后在cmd输入ollama server启动服务。
再另外打开一个cmd,输入下面的命令下载所需要的版本。
看自己的显卡显存来
# 下载最新版8B
ollama pull qwen3-embedding
# 系在4B,也可以是0.6B
ollama pull qwen3-embedding:4b
下载qwen3-embedding
下载完成后,确保ollama已经启动。
python脚本
由于我的ollama版本是0.31.2,已经不支持open api格式,需要使用python脚本进行一层转换。创建ollama_openai_proxy.py脚本
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import httpx
import asyncio
app = FastAPI()
class EmbeddingRequest(BaseModel):
input: list[str] | str
model: str
dimensions: int = 0
@app.post("/v1/embeddings")
async def embeddings(req: EmbeddingRequest):
"""Convert OpenAI embedding API to Ollama API"""
# 标准化输入
if isinstance(req.input, str):
texts = [req.input]
else:
texts = req.input
# 调用 Ollama API
async with httpx.AsyncClient() as client:
try:
response = await client.post(
"http://localhost:11434/api/embed",
json={
"model": req.model,
"input": texts
},
timeout=30.0
)
response.raise_for_status()
ollama_resp = response.json()
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# 转换为 OpenAI 格式
embeddings = ollama_resp.get("embeddings", [])
return {
"object": "list",
"model": req.model,
"data": [
{
"object": "embedding",
"index": i,
"embedding": emb
}
for i, emb in enumerate(embeddings)
]
}
@app.get("/v1/models")
async def list_models():
"""Proxy models endpoint"""
async with httpx.AsyncClient() as client:
response = await client.get("http://localhost:11434/api/tags")
response.raise_for_status()
ollama_resp = response.json()
models = []
for model in ollama_resp.get("models", []):
models.append({
"id": model["name"],
"object": "model",
"created": 0,
"owned_by": "ollama"
})
return {"object": "list", "data": models}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
在脚本的当前路径打开cmd,安装fastAPI:pip install fastapi uvicon httpx
执行该脚本:python ollama_openai_proxy.py。
思源配置
API基础地址:http://127.0.0.1:8000/v1
模型名称,看自己部署的模型:qwen3-embedding
维度:8B最大维度是4096,4B是2560,0.6b是1024。我这里是2560。
api key:ollama能随便输入,但不能为空,因为siyuan需要。
维度为0也可能导致下方的嵌入索引进度无反应,最好手动输入。
向量化所耗费的时间很长,尤其是笔记和维度越大,其时间长。
更多推荐



所有评论(0)