Prechádzať zdrojové kódy

前端api格式不明确,暂时还无法返回信息

Nivek 2 rokov pred
rodič
commit
5edc7850cd

+ 0 - 1
SEChat-backend/README.md

@@ -1,6 +1,5 @@
 # SEChat Backend
 
-
 ## Usage
 
 Python 3.10

+ 6 - 1
SEChat-backend/main.py

@@ -6,10 +6,11 @@ PORT = 3002
 import logging
 logging.basicConfig(
     level=logging.INFO,
-    format="\n[%(asctime)s - {%(module)s.py (%(lineno)d)} - %(funcName)s()]\n %(message)s\n",
+    format="\n[%(levelname)s] (%(asctime)s - {%(module)s.py (%(lineno)d)} - %(funcName)s())\n %(message)s\n",
     datefmt="%Y-%m-%d,%H:%M:%S",
 )
 
+
 # 引入FastAPI
 from fastapi import FastAPI
 app = FastAPI()
@@ -24,6 +25,10 @@ app.add_middleware(
     allow_credentials=True,
 )
 
+# 注册路由
+from routers import main_router
+
+app.include_router(main_router)
 
 
 if __name__ == "__main__":

+ 1 - 0
SEChat-backend/routers/__init__.py

@@ -0,0 +1 @@
+from routers.index import main_router

BIN
SEChat-backend/routers/__pycache__/__init__.cpython-310.pyc


BIN
SEChat-backend/routers/__pycache__/index.cpython-310.pyc


+ 0 - 0
SEChat-backend/routers/chat.py


+ 0 - 0
SEChat-backend/routers/chat_process.py


+ 0 - 0
SEChat-backend/routers/config.py


+ 111 - 0
SEChat-backend/routers/index.py

@@ -0,0 +1,111 @@
+from fastapi import APIRouter
+# 数据格式
+from utils.data import RequestOptions, SendMessageOptions, ErrorCodeMessage, RequestProps
+import json
+# 异步请求
+from starlette.responses import StreamingResponse, JSONResponse
+# openai
+from openai import OpenAI
+chatglm = OpenAI(
+    api_key="xxx",
+    base_url="http://10.58.0.2:6678/v1",
+)
+# 日志
+import logging
+
+main_router = APIRouter()
+
+
+@main_router.post("/chat-process")
+async def chat_process(request: RequestProps):
+    first_chunk = True
+    
+    logging.info(f"API收到请求: {request}")
+    
+    async def event_stream(request : RequestProps):
+        nonlocal first_chunk
+        try:
+            newline = '\n'
+            process=lambda chat: (yield f"{'' if first_chunk else newline}{chat.json()}")
+            await chat_reply_process(
+                RequestOptions(
+                    message=request.prompt,
+                    lastContext=request.options,
+                    process='process',
+                    systemMessage=request.systemMessage,
+                    temperature=request.temperature,
+                    top_p=request.top_p,
+                )
+            )
+        except Exception as error:
+            logging.warning(f"流出错: {error}")
+            yield str(error)
+        finally:
+            logging.info("流结束")
+            yield "\n"
+            
+    res = StreamingResponse(event_stream(request), media_type="application/octet-stream")
+    return res
+
+async def chat_reply_process(options: RequestOptions):
+    logging.info("开始处理聊天回复")
+    
+    try:
+        options_dict = options.model_dump()
+        message = options_dict.get('message')
+        lastContext = options_dict.get('lastContext')
+        process = options_dict.get('process')
+        systemMessage = options_dict.get('systemMessage')
+        temperature = options_dict.get('temperature')
+        top_p = options_dict.get('top_p')
+
+        send_options = SendMessageOptions()
+        send_options_dict = send_options.model_dump()
+        
+        logging.info(f"聊天回复参数: {message}, {lastContext}, {process}, {systemMessage}, {temperature}, {top_p}")
+
+        if systemMessage:
+            send_options_dict['systemMessage'] = systemMessage
+            send_options_dict['completionParams'] = {'model': 'chatglm', 'temperature': temperature, 'top_p': top_p}
+
+        if lastContext:
+            send_options_dict['parentMessageId'] = lastContext.get('parentMessageId')
+            
+        
+
+        response = chatglm.chat.completions.create(
+          model="chatglm",
+          messages=[
+                {"role": "system", "content": systemMessage},
+                {"role": "user", "content": message}
+            ]
+        )
+        
+        logging.info(f"聊天回复结果: {response}")
+
+        return {"status": "Success", "data": response, "message": ''}
+    
+    except Exception as e:
+        code = e.status_code
+        if ErrorCodeMessage(code):
+            return {"type": "Fail", "message": ErrorCodeMessage(code)}
+        return {"type": "Fail", "message": str(e)}
+    
+
+@main_router.post("/chat")
+async def chat():
+    pass
+
+@main_router.post("/config")
+async def config():
+    pass
+
+@main_router.post("/session")
+async def session():
+    return JSONResponse(status_code=200, content={'status': 'Success', 'message': '', 'data': {'auth': True, 'model': 'ChatGPTAPI'}})
+
+@main_router.post("/verify")
+async def verify():
+    return JSONResponse(status_code=200, content={'status': 'Success', 'message': 'Verify successfully', 'data': ''})
+    pass
+

+ 0 - 0
SEChat-backend/routers/session.py


+ 0 - 0
SEChat-backend/routers/verify.py


BIN
SEChat-backend/utils/__pycache__/data.cpython-310.pyc


+ 35 - 1
SEChat-backend/utils/data.py

@@ -1,4 +1,38 @@
 # 定义所有数据模型
-
 from pydantic import BaseModel
+from typing import Optional
+
+class RequestProps(BaseModel):
+    prompt: str
+    options: Optional[dict] = {}
+    systemMessage: Optional[str] = None
+    temperature: Optional[float] = None
+    top_p: Optional[float] = None
+
+class ChatMessage(BaseModel):
+    message: str
+    lastContext: Optional[dict] = None
+    
+class RequestOptions(BaseModel):
+    message: str
+    lastContext: Optional[dict] = None
+    process: Optional[str] = None
+    systemMessage: Optional[str] = None
+    temperature: Optional[float] = None
+    top_p: Optional[float] = None
+
+class SendMessageOptions(BaseModel):
+    timeoutMs: int = 5000
+    systemMessage: Optional[str] = None
+    completionParams: Optional[dict] = None
+    parentMessageId: Optional[str] = None
 
+ErrorCodeMessage = {
+  401: '[OpenAI] 提供错误的API密钥 | Incorrect API key provided',
+  403: '[OpenAI] 服务器拒绝访问,请稍后再试 | Server refused to access, please try again later',
+  502: '[OpenAI] 错误的网关 |  Bad Gateway',
+  503: '[OpenAI] 服务器繁忙,请稍后再试 | Server is busy, please try again later',
+  504: '[OpenAI] 网关超时 | Gateway Time-out',
+  500: '[OpenAI] 服务器繁忙,请稍后再试 | Internal Server Error',
+}
+