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
相关产品推荐
相关产品推荐

