From ba090178846611117ae676763f615a7e900af191 Mon Sep 17 00:00:00 2001 From: QihuAI Design Date: Tue, 14 Jul 2026 17:11:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20AGNES=E5=9B=BE=E5=83=8F/=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E7=94=9F=E6=88=90=E5=BC=BA=E5=88=B6=E7=BB=8F=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=B7=AF=E7=94=B1=E4=BB=A3=E7=90=86(172.18.0.1:7890)?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=AE=B9=E5=99=A8=E5=86=85=E7=9B=B4?= =?UTF-8?q?=E8=BF=9E=E8=A2=AB=E9=87=8D=E7=BD=AE=E5=AF=BC=E8=87=B4=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E7=94=9F=E6=88=90=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/python/app/api/chat.py | 3002 ++++++++++++++++---------------- 1 file changed, 1505 insertions(+), 1497 deletions(-) diff --git a/backend/python/app/api/chat.py b/backend/python/app/api/chat.py index 4b51be8..dac9057 100644 --- a/backend/python/app/api/chat.py +++ b/backend/python/app/api/chat.py @@ -1,1497 +1,1505 @@ -""" -增强版 Chat API — Phase 2.5 -包含: Skill ID统一(MarketApp映射), 真实Skill执行, Agent工作流注入, - 多轮上下文保持, BM25 KB检索, Function Calling循环增强 -""" -from fastapi import APIRouter, Depends, HTTPException, Query -from sqlalchemy.orm import Session -from sqlalchemy import and_, desc, asc, func -from pydantic import BaseModel, Field -from typing import Optional -import uuid -from datetime import datetime, timezone, timedelta -import re -import json -import asyncio -import math -import httpx -import os -import logging - -from ..database import get_db, SessionLocal -from ..models import ( - User, Conversation, Message, AIModel, ModelProvider, TokenUsageLog, - KnowledgeBase, KnowledgeDocument, KnowledgeDocumentChunk, EvolutionSkill, - EvolutionTrajectory, MarketApp, AppPurchase, AppInstallation, - gen_uuid -) -from ..auth import get_current_user -from ..middleware.log_service import LogService -from ..capability_registry import resolve_auto_model - -router = APIRouter() - -logger = logging.getLogger(__name__) - - -def detect_media_intent(text: str) -> str | None: - """根据用户输入判断是否为 图像/视频/语音 生成请求,返回对应能力或 None。 - - 用于 Auto 模式:用户未指定具体模型时,依据意图自动匹配平台各类能力的默认模型。 - 疑问句(含「吗/呢/怎么/能否」或结尾问号)不触发,避免「你能生成视频吗」被误判。 - """ - if not text: - return None - t = text.lower().strip() - # 疑问句不触发媒体生成 - if t.endswith(("?", "?")) or any(q in t for q in ("吗", "呢", "怎么", "如何", "能否", "是否可以", "可以吗", "会不会", "why", "how")): - return None - video_kw = ("视频", "短片", "影片", "vide", "动画视频", "一段视频", "做个视频", "生成视频", - "视频生成", "来段视频", "拍个视频", "做段视频", "视频剪辑") - image_kw = ("图片", "图像", "插画", "海报", "照片", "头像", "壁纸", "漫画", "表情包", "logo", "图标", - "imag", "画一张", "画张", "画一只", "画只", "画个", "画幅", - "来张", "来一张", "来幅", "发张图", "发个图", - "生成图片", "生成一张", "生成一幅", "生成图", "图像生成", - "做一张", "做张图", "做张", "出张图", "出一张图", - "帮我画", "给我画", "请画", "绘制", "作画", "ai绘画", "ai画图", - "画个图", "画张图", "画一幅图", "一张图", "一幅画", "生成一幅") - audio_kw = ("语音", "配音", "朗读", "播报", "念一段", "有声", "tts", "音频", "生成语音", - "读一下", "念一下", "语音合成") - if any(k in t for k in video_kw): - return "video" - if any(k in t for k in image_kw): - return "image" - if any(k in t for k in audio_kw): - return "audio" - return None - -# CST timezone (UTC+8) for consistent time display -CST_TZ = timezone(timedelta(hours=8)) - - -def cst_now(): - """Get current time in CST timezone""" - return datetime.now(CST_TZ) - - -def _html_escape(s: str) -> str: - return (str(s).replace("&", "&").replace("<", "<").replace(">", ">") - .replace('"', """).replace("'", "'")) - - -async def _generate_media(db, ai_model, prompt: str, user_id: str = None) -> str: - """图像/视频生成模型统一入口:按 capabilities 调用 AGNES 等媒体生成 API。 - 返回可直接在 AI 聊天中渲染的富文本(含 /