思源接入本地 ollama 部署的 qwen3-embedding
2026/7/13 2:45:21 网站建设 项目流程

前言

思源3.7后,官网已经接入Agent和语义搜索功能,语义搜索需要agent embedding,实现方式有两种:

  1. 调用商用的agent api,比如qwen-embedding3等模型
  2. 自己搭建。
    我这里选择的方式是第二种,通过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也可能导致下方的嵌入索引进度无反应,最好手动输入。

向量化所耗费的时间很长,尤其是笔记和维度越大,其时间长。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询