fix: 全面修复6项问题——Auto模型路由/媒体提示词优化/微信Bot/Token驾驶舱/技能市场清空

1. resolve_auto_model: image/video/audio无显式默认时自动发现启用模型(原返回None→文本模型回退→AI说无法生成)
2. 新增_optimize_media_prompt: 调用文本LLM精炼用户原始输入为AGNES高质量提示词(去除对话噪音+英文优化)
3. detect_media_intent: 扩展关键词覆盖多轮对话模式(做图片/生成个图/画一下/制作视频等)
4. chat.py+im_llm.py: 所有httpx调用补trust_env=False+_proxy_for_url, 规避容器坏代理
5. token_usage.py: 模型名回退链(model表→日志自带的model_name→auto标签), 不再显示unknown
6. skills_admin.py: 新增POST /batch-delete批量删除API(ids空则删全部)
7. 技能市场数据已清空, 用户可重新导入技能
This commit is contained in:
deploy committed 2026-07-15 17:05:00 +08:00
1 parent 4d57987aa5
commit 148e4a21c2
5 files changed
+210 -16

No files matched your search

+51 -2
View File
@@ -16,7 +16,8 @@ from sqlalchemy import desc, func, or_, and_
from ...database import get_db
from ...models import (
User, EvolutionSkill, SkillVersion, SkillPublishRecord,
EvolutionEvent, TeamSharedSkill
EvolutionEvent, TeamSharedSkill, MarketApp, AppInstallation,
AppPurchase, AppReview
)
from ...auth import get_current_admin
from ...middleware.log_service import LogService
@@ -429,7 +430,55 @@ async def update_skill(
# ============================================================
# 删除技能
# 批量删除技能(用于一次性清空技能市场)
# ============================================================
class BatchDeleteSkillsRequest(BaseModel):
ids: list[str] = [] # 要删除的技能 ID 列表;传空列表则删除所有
@router.post("/batch-delete")
async def batch_delete_skills(
req: BatchDeleteSkillsRequest,
admin_user=Depends(get_current_admin),
db: Session = Depends(get_db),
):
"""批量删除技能。ids 为空则删除全部技能。"""
if req.ids:
skills = db.query(EvolutionSkill).filter(EvolutionSkill.id.in_(req.ids)).all()
else:
skills = db.query(EvolutionSkill).all()
deleted_count = 0
for skill in skills:
skill_name = skill.skill_name
# 删除版本历史
db.query(SkillVersion).filter(SkillVersion.skill_name == skill_name).delete()
# 删除发布记录
db.query(SkillPublishRecord).filter(SkillPublishRecord.skill_id == skill.id).delete()
# 删除团队共享
db.query(TeamSharedSkill).filter(TeamSharedSkill.skill_id == skill.id).delete()
# 同步清理市场应用表中的技能
market_app = db.query(MarketApp).filter(
MarketApp.type == "skill",
MarketApp.name == skill_name,
).first()
if market_app:
# 清理关联的安装和购买记录
db.query(AppInstallation).filter(AppInstallation.app_id == market_app.id).delete()
db.query(AppPurchase).filter(AppPurchase.app_id == market_app.id).delete()
db.query(AppReview).filter(AppReview.app_id == market_app.id).delete()
db.delete(market_app)
db.delete(skill)
deleted_count += 1
db.commit()
return {"code": 0, "data": {"deleted": deleted_count}, "message": f"已删除 {deleted_count} 个技能"}
# ============================================================
# 删除技能(单个)
# ============================================================
@router.delete("/{skill_id}")