You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Crew AI连接Ollama Llama2时出现openai.NotFoundError:404错误

Ollama Llama2 连接Crew AI触发404错误的排查与解决

问题说明

本地部署的Ollama Llama2模型可正常运行,但与Crew AI连接时出现openai.NotFoundError: 404 page not found错误。相关配置及报错信息如下:

.env配置

OPENAI_API_BASE=http://localhost:11434/v1 OPENAI_MODEL_NAME=llama2 OPENAI_API_KEY=NA

连接代码

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="llama2",
    base_url="http://localhost:11434/v1"
)

完整报错栈

Traceback (most recent call last):
  File "D:\crew_ai\crew.py", line 114, in <module>
    result = crew.kickoff()
             ^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\crew.py", line 252, in kickoff
    result = self._run_sequential_process()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\crew.py", line 293, in _run_sequential_process
    output = task.execute(context=task_output)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\task.py", line 173, in execute
    result = self._execute(
             ^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\task.py", line 182, in _execute
    result = agent.execute_task(
             ^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\agent.py", line 207, in execute_task
    memory = contextual_memory.build_context_for_task(task, context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\memory\contextual\contextual_memory.py", line 22, in build_context_for_task
    context.append(self._fetch_stm_context(query))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\memory\contextual\contextual_memory.py", line 31, in _fetch_stm_context
    stm_results = self.stm.search(query)
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\memory\short_term\short_term_memory.py", line 23, in search
    return self.storage.search(query=query, score_threshold=score_threshold)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\crewai\memory\storage\rag_storage.py", line 90, in search
    else self.app.search(query, limit)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\embedchain\embedchain.py", line 635, in search
    return [{"context": c[0], "metadata": c[1]} for c in self.db.query(**params)]
                                                         ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\embedchain\vectordb\chroma.py", line 220, in query
    result = self.collection.query(
             ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\chromadb\api\models\Collection.py", line 327, in query
    valid_query_embeddings = self._embed(input=valid_query_texts)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\chromadb\api\models\Collection.py", line 633, in _embed
    return self._embedding_function(input=input)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\chromadb\api\types.py", line 193, in __call__
    result = call(self, input)
             ^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\chromadb\utils\embedding_functions.py", line 188, in __call__
    embeddings = self._client.create(
                 ^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\openai\resources\embeddings.py", line 113, in create
    return self._post(
           ^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\openai\_base_client.py", line 1232, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\openai\_base_client.py", line 921, in request
    return self._request(
           ^^^^^^^^^^^^^^
  File "D:\crew_ai\.my_crew_env\Lib\site-packages\openai\_base_client.py", line 1012, in _request
    raise self._make_status_error_from_response(err.response) from None
openai.NotFoundError: 404 page not found

核心原因

报错源于Chroma向量数据库处理内存搜索时,调用嵌入模型生成查询向量,但仅配置了Chat模型的本地地址,嵌入模型仍使用默认逻辑:要么请求OpenAI官方接口,要么指向Ollama但未指定支持嵌入的模型,导致请求的端点不存在。

解决方案

1. 拉取Ollama嵌入模型

终端执行命令拉取支持嵌入的模型:

ollama pull nomic-embed-text

2. 修改代码配置嵌入模型

在代码中同时配置Chat模型和嵌入模型,确保Crew AI的内存系统使用本地嵌入接口:

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from crewai import Agent, Task, Crew

# 配置Chat模型
llm = ChatOpenAI(
    model="llama2",
    base_url="http://localhost:11434/v1",
    api_key="NA"
)

# 配置嵌入模型
embeddings = OpenAIEmbeddings(
    model="nomic-embed-text",
    base_url="http://localhost:11434/v1",
    api_key="NA"
)

# 创建Agent时指定嵌入模型
agent = Agent(
    role="你的角色名称",
    goal="你的任务目标",
    backstory="角色背景描述",
    llm=llm,
    embedder=embeddings  # 关键:绑定本地嵌入模型
)

# 创建任务与Crew
task = Task(
    description="具体任务描述",
    agent=agent
)

crew = Crew(
    agents=[agent],
    tasks=[task]
)

result = crew.kickoff()

3. 更新.env文件

添加嵌入模型的环境变量配置:

OPENAI_API_BASE=http://localhost:11434/v1
OPENAI_MODEL_NAME=llama2
OPENAI_API_KEY=NA
OPENAI_EMBEDDING_MODEL_NAME=nomic-embed-text

4. 验证嵌入接口可用性

用curl测试Ollama嵌入接口是否正常:

curl http://localhost:11434/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nomic-embed-text",
    "input": "测试文本内容"
  }'

返回正常嵌入结果则说明接口配置有效。

内容的提问来源于stack exchange,提问作者Raghul S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:35:06