浏览代码

代码提交

SGTY 3 周之前
父节点
当前提交
6abcd71465
共有 7 个文件被更改,包括 92 次插入77 次删除
  1. 1 1
      .idea/knowledge.iml
  2. 1 1
      .idea/misc.xml
  3. 12 12
      build/lib/knowledge/middlewares/base.py
  4. 34 34
      requirements.txt
  5. 6 5
      src/knowledge/main.py
  6. 0 20
      src/knowledge/mcp/main.py
  7. 38 4
      src/knowledge/server.py

+ 1 - 1
.idea/knowledge.iml

@@ -4,7 +4,7 @@
     <content url="file://$MODULE_DIR$">
       <excludeFolder url="file://$MODULE_DIR$/.venv" />
     </content>
-    <orderEntry type="jdk" jdkName="openKnowledge" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="knowledge" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="PyDocumentationSettings">

+ 1 - 1
.idea/misc.xml

@@ -3,5 +3,5 @@
   <component name="Black">
     <option name="sdkName" value="Python 3.9" />
   </component>
-  <component name="ProjectRootManager" version="2" project-jdk-name="openKnowledge" project-jdk-type="Python SDK" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="knowledge" project-jdk-type="Python SDK" />
 </project>

+ 12 - 12
build/lib/knowledge/middlewares/base.py

@@ -170,20 +170,20 @@ class AuthMiddleware(BaseHTTPMiddleware):
 
         path = request.url.path
 
-        if not self.should_intercept(path):
-            return await call_next(request)
-
-        # 权限校验
-        auth_header = request.headers.get("Authorization")
-        if not auth_header:
-            return self.set_auth_err_resp("Missing Authorization header")
-
-        user_info = await self.verify_token(auth_header)
-        if not user_info:
-            return self.set_auth_err_resp("Invalid token")
+        # if not self.should_intercept(path):
+        #     return await call_next(request)
+        # 
+        # # 权限校验
+        # auth_header = request.headers.get("Authorization")
+        # if not auth_header:
+        #     return self.set_auth_err_resp("Missing Authorization header")
+        # 
+        # user_info = await self.verify_token(auth_header)
+        # if not user_info:
+        #     return self.set_auth_err_resp("Invalid token")
 
         # 初始化操作:将用户信息添加到请求状态中
-        request.state.user = user_info
+        #request.state.user = user_info
         #cache["license_info"]是否存在license信息,如果不存在则验证证书
         # if not 'license_info' in self._cache or not self._cache["license_info"]:
         #     lisence_detail = license_handle()

+ 34 - 34
requirements.txt

@@ -13,37 +13,37 @@ hui-tools[all]==0.5.8
 cachetools==6.1.0
 
 
- + annotated-types==0.7.0
- + anyio==4.9.0
- + attrs==25.3.0
- + certifi==2025.6.15
- + click==8.2.1
- + colorama==0.4.6
- + exceptiongroup==1.3.0
- + h11==0.16.0
- + httpcore==1.0.9
- + httpx==0.28.1
- + httpx-sse==0.4.1
- + idna==3.10
- + jsonschema==4.24.0
- + jsonschema-specifications==2025.4.1
- + markdown-it-py==3.0.0
- + mcp==1.10.0
- + mdurl==0.1.2
- + pydantic==2.11.7
- + pydantic-core==2.33.2
- + pydantic-settings==2.10.1
- + pygments==2.19.2
- + python-dotenv==1.1.1
- + python-multipart==0.0.20
- + referencing==0.36.2
- + rich==14.0.0
- + rpds-py==0.25.1
- + shellingham==1.5.4
- + sniffio==1.3.1
- + sse-starlette==2.3.6
- + starlette==0.47.1
- + typer==0.16.0
- + typing-extensions==4.14.0
- + typing-inspection==0.4.1
- + uvicorn==0.34.3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 6 - 5
src/knowledge/main.py

@@ -1,17 +1,18 @@
 # 导入FastAPI及相关模块
 import uvicorn
+from fastapi_mcp import FastApiMCP
 from py_tools.logging import logger
 
 from .settings import base_setting
 from .server import app
-
-def main():
+mcp = FastApiMCP(app)
+mcp.mount()
+mcp.setup_server()
+if __name__ == "__main__":
     logger.info(f"project run {base_setting.server_host}:{base_setting.server_port}")
+
     uvicorn.run(
         app=app, host=base_setting.server_host, port=base_setting.server_port, log_level=base_setting.server_log_level,
         access_log=False
     )
 
-if __name__ == "__main__":
-    main()
-

+ 0 - 20
src/knowledge/mcp/main.py

@@ -1,20 +0,0 @@
-from mcp.server.fastmcp import FastMCP
-
-# 创建 MCP 服务器实例
-mcp_server = FastMCP("我的应用")
-
-# 添加一个加法工具
-@mcp_server.tool()
-def add(a: int, b: int) -> int:
-    """计算两个数的和"""
-    return a + b
-
-# 添加一个动态问候资源
-@mcp_server.resource("greeting://{name}")
-def get_greeting(name: str) -> str:
-    """获取个性化的问候信息"""
-    return f"你好,{name}!"
-
-# 运行服务器
-if __name__ == "__main__":
-    mcp_server.run()

+ 38 - 4
src/knowledge/server.py

@@ -1,14 +1,21 @@
 from contextlib import asynccontextmanager
 from datetime import datetime
+from typing import Optional
 
-from fastapi import FastAPI
+from fastapi import FastAPI, Depends, Security, HTTPException
 from py_tools.connections.http import AsyncHttpClient
 from py_tools.logging import logger
+from pydantic import BaseModel
+from requests import Session
 
 from .config.site import SiteConfig
+from .db.session import get_db
 from .middlewares.base import register_middlewares
-from .router.knowledge_nodes_api import knowledge_nodes_api_router
+from .model.response import StandardResponse
+from .router.knowledge_nodes_api import knowledge_nodes_api_router, get_request_id, api_key_header
+from .service.kg_node_service import KGNodeService
 from .utils import log_util
+from .utils.ObjectToJsonArrayConverter import ObjectToJsonArrayConverter
 
 
 @asynccontextmanager
@@ -23,7 +30,6 @@ app = FastAPI(
     lifespan=lifespan,
     middleware=register_middlewares(),  # 注册web中间件
 )
-
 @app.get("/health")
 async def health_check():
     """健康检查接口"""
@@ -33,6 +39,34 @@ async def health_check():
         "service": "knowledge-graph"
     }
 
+class Agent(BaseModel):
+    node_name: str
+    relation: str
+@app.post("/nodes/paginated_search", response_model=StandardResponse,operation_id="实体查询")
+async def paginated_search(
+    payload: Agent,
+    db: Session = Depends(get_db),
+    request_id: str = Depends(get_request_id),
+    api_key: str = Security(api_key_header)
+):
+    try:
+        service = KGNodeService(db)
+        service.search_title_index()
+        return StandardResponse(
+            success=True,
+            requestId=request_id,
+            data=ObjectToJsonArrayConverter.convert(result)
+        )
+    except Exception as e:
+        logger.error(f"分页查询失败: {str(e)}")
+        raise HTTPException(
+            status_code=500,
+            detail=StandardResponse(
+                success=False,
+                error_code=500,
+                error_msg=str(e)
+            )
+        )
 
 async def init_setup():
     """初始化项目配置"""
@@ -45,7 +79,7 @@ async def startup():
     await init_setup()
 
     # 加载路由
-    app.include_router(knowledge_nodes_api_router)
+    #app.include_router(knowledge_nodes_api_router)
 
     logger.info("fastapi startup success")