ソースを参照

调整视频和图片回答

liuchengsen 1 ヶ月 前
コミット
9ba7df39ac

+ 3 - 0
backend-java/src/main/java/com/pharmacopoeia/dto/ImageChatRequest.java

@@ -1,12 +1,15 @@
 package com.pharmacopoeia.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import lombok.Data;
 
 @Data
 public class ImageChatRequest {
     /** Base64 编码的图片 */
+    @JsonAlias({"image_base64"})
     private String imageBase64;
     /** 图片 MIME 类型,默认 image/jpeg */
+    @JsonAlias({"mime_type"})
     private String mimeType = "image/jpeg";
     /** 可选的附加文字问题 */
     private String message = "";

+ 4 - 0
backend-java/src/main/java/com/pharmacopoeia/dto/MultimodalChatRequest.java

@@ -1,5 +1,6 @@
 package com.pharmacopoeia.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import lombok.Data;
 
 /**
@@ -10,10 +11,13 @@ public class MultimodalChatRequest {
     /** 文字问题(可选) */
     private String message = "";
     /** 媒体类型: image / video / 空=纯文本 */
+    @JsonAlias({"media_type"})
     private String mediaType = "";
     /** Base64 编码的图片或视频 */
+    @JsonAlias({"media_base64"})
     private String mediaBase64 = "";
     /** 媒体 MIME 类型,如 image/jpeg, video/mp4 */
+    @JsonAlias({"media_mime"})
     private String mediaMime = "";
     /** 会话 ID */
     private String conversationId;

+ 11 - 7
backend-python/app/api/chat.py

@@ -30,20 +30,24 @@ class ChatRequest(BaseModel):
 
 class ImageChatRequest(BaseModel):
     """图片对话请求:base64 图片"""
-    image_base64: str = Field(..., min_length=1, description="Base64 编码的图片")
-    mime_type: str = Field(default="image/jpeg", description="图片 MIME 类型")
+    model_config = {"populate_by_name": True}
+
+    image_base64: str = Field(..., min_length=1, alias="imageBase64", description="Base64 编码的图片")
+    mime_type: str = Field(default="image/jpeg", alias="mimeType", description="图片 MIME 类型")
     message: str = Field(default="", max_length=2000, description="可选的附加文字问题")
-    conversation_id: str = Field(default_factory=lambda: str(uuid.uuid4()))
+    conversation_id: str = Field(default_factory=lambda: str(uuid.uuid4()), alias="conversationId")
 
 
 class MultimodalChatRequest(BaseModel):
     """统一多模态对话请求:支持文本 + 图片 + 视频"""
+    model_config = {"populate_by_name": True}
+
     message: str = Field(default="", max_length=2000, description="文字问题(可选)")
     # 媒体附件(图片和视频二选一或都不传,纯文本也可以)
-    media_type: str = Field(default="", description="媒体类型: image / video / 空=纯文本")
-    media_base64: str = Field(default="", description="Base64 编码的图片或视频")
-    media_mime: str = Field(default="", description="媒体 MIME 类型,如 image/jpeg, video/mp4")
-    conversation_id: str = Field(default_factory=lambda: str(uuid.uuid4()))
+    media_type: str = Field(default="", alias="mediaType", description="媒体类型: image / video / 空=纯文本")
+    media_base64: str = Field(default="", alias="mediaBase64", description="Base64 编码的图片或视频")
+    media_mime: str = Field(default="", alias="mediaMime", description="媒体 MIME 类型,如 image/jpeg, video/mp4")
+    conversation_id: str = Field(default_factory=lambda: str(uuid.uuid4()), alias="conversationId")
 
 
 class ChatResponse(BaseModel):

+ 1 - 1
deploy/nginx-pharmacopoeia.conf

@@ -9,7 +9,7 @@ server {
     listen 80;
     server_name _;
 
-    client_max_body_size 10m;
+    client_max_body_size 50m;
 
     gzip on;
     gzip_vary on;

+ 1 - 1
deploy/nginx.conf

@@ -18,7 +18,7 @@ server {
     ssl_protocols       TLSv1.2 TLSv1.3;
     ssl_ciphers         HIGH:!aNULL:!MD5;
 
-    client_max_body_size 10m;
+    client_max_body_size 50m;
 
     # Gzip
     gzip on;

+ 3 - 3
static/index.html

@@ -208,7 +208,7 @@ function onFilePicked(type){
   var input=document.getElementById(type==='video'?'videoInput':'imageInput');
   var file=input.files[0];if(!file)return;
   if(type==='video'&&file.size>50*1024*1024){alert('视频不能超过50MB');input.value='';return}
-  if(type==='image'&&file.size>10*1024*1024){alert('图片不能超过10MB');input.value='';return}
+  if(type==='image'&&file.size>7*1024*1024){alert('图片不能超过7MB');input.value='';return}
   var reader=new FileReader();
   reader.onload=function(e){
     var b64=e.target.result.split(',')[1];
@@ -252,10 +252,10 @@ async function streamAsk(query,media,aiDiv,contentDiv){
   var endpoint,body;
   if(media&&media.type==='image'){
     endpoint=API_BASE+'/api/v1/chat/stream-image';
-    body=JSON.stringify({image_base64:media.base64,mime_type:media.mime,message:query});
+    body=JSON.stringify({imageBase64:media.base64,mimeType:media.mime,message:query});
   }else if(media&&media.type==='video'){
     endpoint=API_BASE+'/api/v1/chat/stream-multimodal';
-    body=JSON.stringify({media_type:'video',media_base64:media.base64,media_mime:media.mime,message:query});
+    body=JSON.stringify({mediaType:'video',mediaBase64:media.base64,mediaMime:media.mime,message:query});
   }else{
     endpoint=API_BASE+'/api/v1/chat/stream';
     body=JSON.stringify({message:query});