1033Question请问这是什么原因它现在能进去了。QuestionERROR: Error loading ASGI app. Could not import module rag_service.在本地运行uvicorn rag_service:app --host 127.0.0.1 --port 9000发生这个报错Questionresp requests.get( http://127.0.0.1:9000/query, params{q: question}, timeout10 ) docs resp.json().get(docs, []) print(docs) 我代码这样写的时候终端的输出是 step1 [] 是空的Questionapp.get(/query) def query(q: str): results collection.query( query_texts[q], n_results3 ) docs results[documents][0] if results[documents] else [] return { docs: docs } 这是什么意思Questionrag_service里有一个query函数但我没看到question_answering里面有调用这个函数Questionknowledge是空值。因为是先api提取Question如何关闭FastAPIQuestionapp.get(/query) def query(q: str): results collection.query( query_texts[q], n_results3 ) docs results[documents][0] if results[documents] else [] print(docs) return { docs: docs } 为什么我这样写代码FastAPI的终端并没有输出print哪怕是空也会输出[]吧 1358 Questiondef index(request): print(step1) question request.GET.get(question) if not question: return render(request, question_answering.html, {ctx: 输入不能为空}) # ------------------- # 调用 RAG API # ------------------- resp requests.get( http://127.0.0.1:9000/query, params{q: question}, timeout10 ) docs resp.json().get(docs, []) print(docs) knowledge \n.join(docs) prompt f请根据以下知识回答问题{knowledge} 问题{question} # 调用你的 LLM保持不变 answer query_llm(prompt) return render(request, question_answering.html, {ctx: knowledge})ai说代码肯定执行到了request因为代码能正常进行ai问答知识无法获取docs1429QuestionERROR: Exception in ASGI applicationTraceback (most recent call last):File E:\python\pythonProject\.venv\Lib\site-packages\uvicorn\protocols\http\httptools_impl.py, line 409, in run_asgiresult await app( # type: ignore[func-returns-value]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py, line 60, in __call__return await self.app(scope, receive, send)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\fastapi\applications.py, line 1054, in __call__await super().__call__(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\applications.py, line 113, in __call__await self.middleware_stack(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\middleware\errors.py, line 187, in __call__raise excFile E:\python\pythonProject\.venv\Lib\site-packages\starlette\middleware\errors.py, line 165, in __call__await self.app(scope, receive, _send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\middleware\exceptions.py, line 62, in __call__await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\_exception_handler.py, line 53, in wrapped_appraise excFile E:\python\pythonProject\.venv\Lib\site-packages\starlette\_exception_handler.py, line 42, in wrapped_appawait app(scope, receive, sender)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\routing.py, line 715, in __call__await self.middleware_stack(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\routing.py, line 735, in appawait route.handle(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\routing.py, line 288, in handleawait self.app(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\routing.py, line 76, in appawait wrap_app_handling_exceptions(app, request)(scope, receive, send)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\_exception_handler.py, line 53, in wrapped_appraise excFile E:\python\pythonProject\.venv\Lib\site-packages\starlette\_exception_handler.py, line 42, in wrapped_appawait app(scope, receive, sender)File E:\python\pythonProject\.venv\Lib\site-packages\starlette\routing.py, line 73, in appresponse await f(request)^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\fastapi\routing.py, line 301, in appraw_response await run_endpoint_function(^^^^^^^^^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\fastapi\routing.py, line 214, in run_endpoint_functionreturn await run_in_threadpool(dependant.call, **values)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\starlette\concurrency.py, line 39, in run_in_threadpoolreturn await anyio.to_thread.run_sync(func, *args)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\anyio\to_thread.py, line 56, in run_syncreturn await get_async_backend().run_sync_in_worker_thread(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\anyio\_backends\_asyncio.py, line 2441, in run_sync_in_worker_threadreturn await future^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\anyio\_backends\_asyncio.py, line 943, in runresult context.run(func, *args)^^^^^^^^^^^^^^^^^^^^^^^^File D:\Agriculture_KnowledgeGraph-master\Agriculture_KnowledgeGraph-master\demo\demo\rag_service.py, line 26, in queryresults collection.query(^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\chromadb\api\models\Collection.py, line 265, in queryquery_results self._client._query(^^^^^^^^^^^^^^^^^^^^File E:\python\pythonProject\.venv\Lib\site-packages\chromadb\api\rust.py, line 582, in _queryrust_response self.bindings.query(^^^^^^^^^^^^^^^^^^^^chromadb.errors.InternalError: Error executing plan: Internal error: Error creating hnsw segment reader: Nothing found on diskFastAPI终端报告Question第三步验证文件是否真实存在在 Windows 资源管理器或终端里找到persist_directory对应的文件夹确认里面有这些文件chroma_db/ ├── chroma.sqlite3 ✅ 必须存在 └── [uuid]/ ├── data_level0.bin ✅ 这就是 HNSW 索引 ├── header.bin └── length.bin现在有两个uuid是怎么回事答两个 UUID 的原因ChromaDB 里有两个 UUID 文件夹说明你创建了两个 Collection或者同一个 Collection 被删除重建过。每个 Collection 对应一个唯一的 UUID 目录。如何确认是哪种情况运行这段代码查看pythonimport chromadb client chromadb.PersistentClient(path你的chroma_db路径) # 列出所有Collection collections client.list_collections() for col in collections: print(f名称: {col.name}, ID: {col.id}, 文档数: {col.count()})可能的输出情况情况一两个不同名的 Collection名称: agriculture_docs_v1, ID: 3d1f9684-..., 文档数: 0 名称: agriculture_docs_v2, ID: cb689888-..., 文档数: 150→ 新旧两个 Collectionrag_service.py里用的名字是旧的那个数量为0情况二只剩一个 Collection另一个是孤儿名称: agriculture_docs, ID: cb689888-..., 文档数: 150→ 旧 UUID 文件夹是删除重建后遗留的垃圾文件磁盘上没清干净修复方法确认正确的 Collection 名称后修改rag_service.pypythonclient chromadb.PersistentClient(pathD:/.../.../chroma_db) # 绝对路径 # 确保名称和构建脚本里完全一致 collection client.get_collection(正确的collection名称)清理孤儿文件夹可选如果确认某个 UUID 对应的 Collection 已经不存在于chroma.sqlite3中可以直接删除那个文件夹避免以后混淆。。Question我填的collection的名字是对的是存在的之前哪怕FastAPI返回[]也是不会报错只是回答为[]而已。Question5 {ids: [[3]], embeddings: None, documents: [[轴承用于减少摩擦]], uris: None, included: [metadatas, documents, distances], data: None, metadatas: [[None]], distances: [[0.6234618425369263]]} 这个是返回的内容能不能解释一下里面的数据的含义怎么那么多NoneQuestionError creating hnsw segment reader: Nothing found on disk是什么意思hnsw segment readerChromaDB 用来读取向量索引文件的读取器HNSW 是一种近似最近邻搜索算法Nothing found on disk去磁盘上找对应的索引文件什么都没找到HNSW 索引文件是什么就是你文件夹里的这四个文件[uuid]/ ├── data_level0.bin ← HNSW 索引主体 ├── header.bin ← 索引头信息 ├── length.bin ← 长度信息 └── link_lists.bin ← 节点链接关系ChromaDB 查询时必须读这四个文件缺任何一个都会报这个错。Question有一个地方逻辑不是很通就是我向量库更新了直接查询是检索不到最新的文档但我把FastAPI更新之后就能检索到了是为什么不管更不更新它连的库不是同一个吗关键原因ChromaDB 的PersistentClient在启动时加载索引到内存FastAPI 启动 ↓ PersistentClient 初始化 ↓ 把磁盘上的 HNSW 索引文件加载到内存 ↓ 之后的查询都走内存中的索引所以更新向量库后直接查询检索不到的原因你更新了磁盘上的索引文件 ↓ 但 FastAPI 进程还在运行 ↓ 内存里还是旧的索引 ↓ 查询走的是内存看不到新数据重启 FastAPI 后能检索到的原因FastAPI 重启 ↓ PersistentClient 重新初始化 ↓ 重新从磁盘加载最新的索引文件到内存 ↓ 查询能看到新数据了