思源接入本地 ollama 部署的 qwen3-embedding
📅 2026/7/13 2:55:26
👁️ 阅读次数
📝 编程学习
前言
思源3.7后,官网已经接入Agent和语义搜索功能,语义搜索需要agent embedding,实现方式有两种:
- 调用商用的agent api,比如qwen-embedding3等模型
- 自己搭建。
我这里选择的方式是第二种,通过ollama部署qwen3-embedding
环境:Win10,ollama0.31.2,python,fastAPI。
安装ollam
官网链接:ollama,下载完后在cmd输入ollama server启动服务。
再另外打开一个cmd,输入下面的命令下载所需要的版本。
看自己的显卡显存来
# 下载最新版8Bollama pull qwen3-embedding# 系在4B,也可以是0.6Bollama pull qwen3-embedding:4b下载qwen3-embedding
下载完成后,确保ollama已经启动。
python脚本
由于我的ollama版本是0.31.2,已经不支持open api格式,需要使用python脚本进行一层转换。创建ollama_openai_proxy.py脚本
fromfastapiimportFastAPI,HTTPExceptionfrompydanticimportBaseModelimporthttpximportasyncio app=FastAPI()classEmbeddingRequest(BaseModel):input:list[str]|strmodel:strdimensions:int=0@app.post("/v1/embeddings")asyncdefembeddings(req:EmbeddingRequest):"""Convert OpenAI embedding API to Ollama API"""# 标准化输入ifisinstance(req.input,str):texts=[req.input]else:texts=req.input# 调用 Ollama APIasyncwithhttpx.AsyncClient()asclient:try:response=awaitclient.post("http://localhost:11434/api/embed",json={"model":req.model,"input":texts},timeout=30.0)response.raise_for_status()ollama_resp=response.json()exceptExceptionase:raiseHTTPException(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}fori,embinenumerate(embeddings)]}@app.get("/v1/models")asyncdeflist_models():"""Proxy models endpoint"""asyncwithhttpx.AsyncClient()asclient:response=awaitclient.get("http://localhost:11434/api/tags")response.raise_for_status()ollama_resp=response.json()models=[]formodelinollama_resp.get("models",[]):models.append({"id":model["name"],"object":"model","created":0,"owned_by":"ollama"})return{"object":"list","data":models}if__name__=="__main__":importuvicorn 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也可能导致下方的嵌入索引进度无反应,最好手动输入。
向量化所耗费的时间很长,尤其是笔记和维度越大,其时间长。
编程学习
技术分享
实战经验