CoolFace
Apppublic

yuuuuc/deepseek-coder-v2

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
app.py194 linesDownload Raw Back to root
1from fastapi import FastAPI, HTTPException2from fastapi.staticfiles import StaticFiles3from fastapi.responses import FileResponse4from pydantic import BaseModel5from openai import OpenAI6import logging7import os8from datetime import datetime9 10# 创建带时间戳的日志文件,存放在logs目录下11log_filename = f"logs/deepseek_chat_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"12 13# 确保logs目录存在14os.makedirs('logs', exist_ok=True)15 16# 配置日志17logging.basicConfig(18    level=logging.INFO,19    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',20    handlers=[21        logging.FileHandler(log_filename, encoding='utf-8'),22        logging.StreamHandler()23    ]24)25logger = logging.getLogger(__name__)26 27app = FastAPI(title="DeepSeek Coder V2 Chat", version="1.0.0")28 29# 挂载静态文件目录30app.mount("/static", StaticFiles(directory="static"), name="static")31 32# 请求模型33class ChatRequest(BaseModel):34    message: str35 36class ChatResponse(BaseModel):37    response: str38 39# DeepSeek API 客户端40client = None41api_key = os.getenv("DEEPSEEK_API_KEY")42api_available = False43 44def initialize_api_client():45    """初始化 DeepSeek API 客户端"""46    global client, api_available47    48    if not api_key:49        logger.warning("⚠️ 未设置 DEEPSEEK_API_KEY 环境变量")50        api_available = False51        return False52    53    try:54        client = OpenAI(55            api_key=api_key,56            base_url="https://api.deepseek.com"57        )58        59        # 测试 API 连接60        test_response = client.chat.completions.create(61            model="deepseek-chat",62            messages=[{"role": "user", "content": "Hello"}],63            max_tokens=1064        )65        66        api_available = True67        logger.info("✅ DeepSeek API 连接成功")68        return True69        70    except Exception as e:71        logger.error(f"❌ DeepSeek API 初始化失败: {str(e)}")72        api_available = False73        return False74 75def generate_response(message: str) -> str:76    """使用 DeepSeek API 生成AI响应"""77    global client, api_available78    79    if not api_available or client is None:80        return "DeepSeek API 不可用,请检查 API Key 配置。"81    82    try:83        response = client.chat.completions.create(84            model="deepseek-chat",85            messages=[86                {"role": "system", "content": "你是 DeepSeek Coder V2,一个专业的AI编程助手。请用中文回答问题,并提供准确、有用的编程建议和代码示例。"},87                {"role": "user", "content": message}88            ],89            max_tokens=1024,90            temperature=0.7,91            top_p=0.992        )93        94        return response.choices[0].message.content.strip()95        96    except Exception as e:97        logger.error(f"DeepSeek API 调用失败: {str(e)}")98        return f"抱歉,API 调用时出现错误: {str(e)}"99 100@app.on_event("startup")101async def startup_event():102    """应用启动时初始化 API 客户端"""103    logger.info("🌟 DeepSeek Chat 应用启动中...")104    logger.info(f"📝 日志文件: {log_filename}")105    106    # 初始化 DeepSeek API 客户端107    success = initialize_api_client()108    if success:109        logger.info("✅ DeepSeek API 初始化完成,现在可以使用AI响应")110    else:111        logger.warning("⚠️ DeepSeek API 初始化失败,使用模拟响应")112        logger.info("💡 请设置 DEEPSEEK_API_KEY 环境变量")113    114    logger.info("🚀 服务器启动完成!")115 116@app.get("/")117async def serve_index():118    """提供主页 - 确保对HF Space健康检查返回200状态"""119    return FileResponse("static/index.html")120 121@app.get("/health")122async def health_endpoint():123    """Hugging Face Spaces 健康检查"""124    return await health_check()125 126@app.post("/api/chat", response_model=ChatResponse)127async def chat_endpoint(request: ChatRequest):128    """聊天API端点"""129    global api_available130    131    if not request.message.strip():132        raise HTTPException(status_code=400, detail="消息不能为空")133    134    if len(request.message) > 4000:135        raise HTTPException(status_code=400, detail="消息长度不能超过4000字符")136    137    logger.info(f"💬 收到消息: {request.message[:100]}...")138    139    # 检查 API 状态140    if not api_available:141        # API 不可用时的演示响应142        response_text = f"""🤖 DeepSeek API 当前不可用143 144可能的原因:145- 未设置 DEEPSEEK_API_KEY 环境变量146- API Key 无效或已过期147- 网络连接问题148 149💡 获取 API Key 步骤:1501. 访问 https://platform.deepseek.com/1512. 注册并登录账户1523. 创建 API Key1534. 设置环境变量:export DEEPSEEK_API_KEY="your-key-here"154 155作为演示,这里是一个模拟响应:156 157我是DeepSeek Coder V2,一个专业的AI编程助手。我可以帮助你:158 1591. **代码编写** - 各种编程语言的代码实现1602. **问题解决** - 调试和优化代码1613. **代码审查** - 分析代码质量和最佳实践1624. **算法解释** - 解释复杂的算法和数据结构163 164```python165# 示例:快速排序算法166def quicksort(arr):167    if len(arr) <= 1:168        return arr169    pivot = arr[len(arr) // 2]170    left = [x for x in arr if x < pivot]171    middle = [x for x in arr if x == pivot]172    right = [x for x in arr if x > pivot]173    return quicksort(left) + middle + quicksort(right)174```175 176配置 API Key 后重启应用即可使用真实的AI响应。"""177    else:178        # 使用 DeepSeek API 生成响应179        response_text = generate_response(request.message)180    181    return ChatResponse(response=response_text)182 183@app.get("/api/health")184async def health_check():185    """健康检查端点"""186    global api_available, api_key187    api_status = "available" if api_available else "unavailable"188    return {189        "status": "healthy",190        "api_status": api_status,191        "api_key_configured": bool(api_key),192        "api_available": api_available,193        "log_file": log_filename194    }