基于Deepseek的语言润色助手API实现与部署指南

基于Deepseek的语言润色助手API实现与部署指南

一、概述

本文将以创建一个语言润色助手为例,演示通过调用Deepseek模型API实现文本优化功能,并封装为一个可对外访问的API接口。用户可通过HTTP请求发送需要润色的文本,接口将返回经过Deepseek模型优化后的内容。

二、开发环境准备

所需工具

  • 本地计算机(Windows/macOS/Linux均可)
  • 文本编辑器(推荐VS Code)
  • 终端/命令提示符
  • 云服务器(如OpenCloud)
  • Deepseek API账号及密钥

三、代码实现

1. 创建项目文件

在本地创建一个名为deepseek-polisher的文件夹,然后在该文件夹中创建app.py文件

python 复制代码
import requests
from flask import Flask, request, jsonify
import logging
from datetime import datetime

# 初始化Flask应用
app = Flask(__name__)

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler("polisher.log"),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

# Deepseek API配置 - 请替换为你的实际信息
DEEPSEEK_API_KEY = "your_deepseek_api_key"  # 替换为你的Deepseek API密钥
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"  # Deepseek API端点

# 系统提示词 - 定义润色助手的角色和行为
SYSTEM_PROMPT = """# 角色
你是一个专业的文字优化润色智能体,擅长提升文字的质量、流畅度与表现力。

## 技能
### 技能 1: 优化润色文字
1. 接收用户提供的文字内容。
2. 从词汇运用、语句结构、表达逻辑等方面对文字进行分析。
3. 通过替换词汇、调整语序、完善逻辑等方式,对文字进行优化润色,使文字更加通顺、生动、富有感染力,并将优化后的内容返回给用户。

## 限制
- 仅专注于对用户提供的文字进行优化润色,不涉及其他话题的讨论。
- 优化润色过程中需使用符合用户语言习惯的表达方式。
- 输出内容仅为优化润色后的文字,不得添加额外无关信息。
"""

def polish_text_with_deepseek(text):
    """调用Deepseek API进行文本润色"""
    try:
        # 构建请求头
        headers = {
            "Authorization": f"Bearer {DEEPSEEK_API_KEY}",
            "Content-Type": "application/json"
        }
        
        # 构建请求体
        payload = {
            "model": "deepseek-chat",  # 使用的Deepseek模型
            "messages": [
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user", "content": text}
            ],
            "temperature": 0.7,  # 控制输出的随机性
            "max_tokens": 2048   # 最大输出token数
        }
        
        # 发送请求到Deepseek API
        logger.info(f"发送润色请求,文本长度: {len(text)}")
        response = requests.post(DEEPSEEK_API_URL, headers=headers, json=payload, timeout=30)
        
        # 检查请求是否成功
        response.raise_for_status()
        
        # 解析响应
        result = response.json()
        polished_text = result["choices"][0]["message"]["content"]
        
        logger.info("润色成功")
        return polished_text
        
    except requests.exceptions.RequestException as e:
        logger.error(f"Deepseek API请求失败: {str(e)}")
        return None
    except KeyError as e:
        logger.error(f"解析Deepseek响应失败: {str(e)}")
        return None

@app.route('/api/polish', methods=['POST'])
def polish_endpoint():
    """文本润色API端点"""
    # 记录请求时间
    start_time = datetime.now()
    
    # 获取请求数据
    try:
        data = request.get_json()
        
        # 验证请求数据
        if not data or 'text' not in data:
            logger.warning("请求缺少'text'字段")
            return jsonify({"error": "请求必须包含'text'字段"}), 400
            
        text = data['text']
        
        # 验证文本长度
        if len(text) == 0:
            logger.warning("请求包含空文本")
            return jsonify({"error": "文本不能为空"}), 400
            
        if len(text) > 10000:
            logger.warning(f"文本过长,长度: {len(text)}")
            return jsonify({"error": "文本长度不能超过10000个字符"}), 400
            
    except Exception as e:
        logger.error(f"解析请求失败: {str(e)}")
        return jsonify({"error": "无效的请求格式"}), 400
    
    # 调用润色函数
    polished_text = polish_text_with_deepseek(text)
    
    # 处理润色结果
    if polished_text is None:
        return jsonify({"error": "润色处理失败,请稍后再试"}), 500
    
    # 计算处理时间
    processing_time = (datetime.now() - start_time).total_seconds()
    logger.info(f"润色完成,处理时间: {processing_time:.2f}秒,原始长度: {len(text)},润色后长度: {len(polished_text)}")
    
    # 返回结果
    return jsonify({
        "original_text": text,
        "polished_text": polished_text,
        "processing_time": round(processing_time, 2)
    })

@app.route('/health', methods=['GET'])
def health_check():
    """健康检查端点"""
    return jsonify({"status": "healthy", "service": "deepseek-polisher", "timestamp": datetime.now().isoformat()}), 200

if __name__ == '__main__':
    # 生产环境中应设置debug=False,并绑定到0.0.0.0
    app.run(host='0.0.0.0', port=5000, debug=False)
    

2. 创建依赖文件

在同一文件夹中创建requirements.txt文件,用于指定项目所需的依赖包:

txt 复制代码
flask==2.3.3
requests==2.31.0
gunicorn==21.2.0
python-dotenv==1.0.0

3. 创建环境变量配置文件(可选)

为了安全管理API密钥,建议使用环境变量。创建.env文件:

txt 复制代码
DEEPSEEK_API_KEY=your_actual_deepseek_api_key_here

如果使用.env文件,需要修改app.py中加载配置的部分:

python 复制代码
from dotenv import load_dotenv
import os

# 加载环境变量
load_dotenv()

# Deepseek API配置
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"

四、本地测试

1. 安装依赖

在本地终端中,进入项目文件夹,执行以下命令安装所需依赖:

bash 复制代码
# 创建并激活虚拟环境
python -m venv venv

# 在Windows上激活虚拟环境
venv\Scripts\activate

# 在macOS/Linux上激活虚拟环境
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

2. 运行应用

bash 复制代码
# 直接运行(开发测试用)
python app.py

3. 测试API

使用curl命令测试(打开另一个终端):

bash 复制代码
curl -X POST http://localhost:5000/api/polish \
  -H "Content-Type: application/json" \
  -d '{"text": "这是一段需要润色的文本,虽然能看懂意思,但不够流畅和专业。"}'

也可以使用健康检查端点确认服务是否正常运行:

bash 复制代码
curl http://localhost:5000/health

注意:若对服务器无基础,建议不做不服务器部署,由运维工程师代为处理,做到以上步骤即可。

五、服务器部署(OpenCloud)

1. 准备服务器

  • 登录OpenCloud控制台,创建一台云服务器实例(推荐配置:2核4GB内存,Ubuntu 20.04 LTS系统)
  • 确保服务器安全组配置开放了5000端口(或你计划使用的端口)
  • 记录服务器的公网IP地址

2. 连接服务器

使用SSH工具连接到你的服务器:

bash 复制代码
# 替换为你的服务器IP
ssh root@your_server_public_ip

首次连接会提示确认,输入yes后按提示输入密码。

3. 服务器环境配置

更新系统包
bash 复制代码
sudo apt update && sudo apt upgrade -y
安装Python及相关工具
bash 复制代码
sudo apt install -y python3 python3-pip python3-venv
安装Nginx(用于反向代理)
bash 复制代码
sudo apt install -y nginx
安装防火墙并配置
bash 复制代码
sudo apt install -y ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow 5000
sudo ufw enable
sudo ufw status

4. 部署应用代码

创建应用目录
bash 复制代码
mkdir -p /var/www/deepseek-polisher
cd /var/www/deepseek-polisher
上传代码文件

在本地计算机上,使用scp命令将文件上传到服务器(打开新的本地终端):

bash 复制代码
# 替换为你的服务器IP
scp app.py root@your_server_public_ip:/var/www/deepseek-polisher/
scp requirements.txt root@your_server_public_ip:/var/www/deepseek-polisher/
# 如果使用.env文件
scp .env root@your_server_public_ip:/var/www/deepseek-polisher/
在服务器上创建并激活虚拟环境
bash 复制代码
cd /var/www/deepseek-polisher
python3 -m venv venv
source venv/bin/activate
安装依赖
bash 复制代码
pip install -r requirements.txt
测试应用是否能正常运行
bash 复制代码
python app.py

此时应看到应用启动,没有报错。按Ctrl+C停止运行。

5. 配置Gunicorn作为WSGI服务器

创建系统服务

创建一个systemd服务文件,以便管理应用的启动、停止和自动重启:

bash 复制代码
sudo nano /etc/systemd/system/deepseek-polisher.service

粘贴以下内容(注意修改路径和用户):

ini 复制代码
[Unit]
Description=Deepseek Polisher API Service
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/deepseek-polisher
Environment="PATH=/var/www/deepseek-polisher/venv/bin"
ExecStart=/var/www/deepseek-polisher/venv/bin/gunicorn --workers 4 --bind 127.0.0.1:5000 app:app
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

保存并退出(按Ctrl+X,然后按Y,再按Enter)。

启动服务并设置开机自启
bash 复制代码
sudo systemctl start deepseek-polisher
sudo systemctl enable deepseek-polisher
检查服务状态
bash 复制代码
sudo systemctl status deepseek-polisher

如果一切正常,会显示"active (running)"状态。

6. 配置Nginx作为反向代理(可选)

创建Nginx配置文件
bash 复制代码
sudo nano /etc/nginx/sites-available/deepseek-polisher

粘贴以下内容(替换your_domain_or_ip为你的域名或服务器IP):

nginx 复制代码
server {
    listen 80;
    server_name your_domain_or_ip;

    access_log /var/log/nginx/polisher_access.log;
    error_log /var/log/nginx/polisher_error.log;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
启用配置并测试
bash 复制代码
# 创建符号链接
sudo ln -s /etc/nginx/sites-available/deepseek-polisher /etc/nginx/sites-enabled/

# 测试Nginx配置
sudo nginx -t

# 重启Nginx
sudo systemctl restart nginx

7. 验证部署

现在你的API应该已经可以通过服务器的公网IP或域名访问了。

使用curl测试:

bash 复制代码
curl -X POST http://your_server_public_ip/api/polish \
  -H "Content-Type: application/json" \
  -d '{"text": "这是一段需要润色的文本,测试一下部署是否成功。"}'

如果一切正常,你会收到包含润色后文本的响应。

六、API接口文档

基本信息

  • 接口地址:http://your_server_public_ip/api/polish
  • 请求方法:POST
  • 内容类型:application/json

请求参数

参数名 类型 是否必选 描述
text string 需要润色的文本,长度不超过10000字符

响应参数

参数名 类型 描述
original_text string 原始输入文本
polished_text string 润色后的文本
processing_time number 处理时间(秒)

成功响应示例

json 复制代码
{
  "original_text": "这是一段需要润色的文本,虽然能看懂意思,但不够流畅和专业。",
  "polished_text": "这是一段待润色的文本,尽管其含义清晰可辨,却不够流畅专业。",
  "processing_time": 1.23
}

错误响应示例

json 复制代码
{
  "error": "请求必须包含'text'字段"
}

健康检查接口

  • 地址:http://your_server_public_ip/health
  • 方法:GET
  • 用途:检查服务是否正常运行

七、维护与监控

查看应用日志

bash 复制代码
# 查看应用日志
sudo tail -f /var/www/deepseek-polisher/polisher.log

# 查看Nginx日志
sudo tail -f /var/log/nginx/polisher_access.log
sudo tail -f /var/log/nginx/polisher_error.log

重启服务

bash 复制代码
sudo systemctl restart deepseek-polisher

更新代码

  1. 上传新的代码文件
  2. 重启服务:sudo systemctl restart deepseek-polisher

八、常见问题解决

  1. API调用失败

    • 检查Deepseek API密钥是否正确
    • 确认服务器可以访问互联网
    • 查看应用日志寻找错误信息
  2. 服务无法启动

    • 检查服务配置:sudo systemctl status deepseek-polisher
    • 确认端口未被占用:netstat -tulpn | grep 5000
  3. 外部无法访问

    • 检查防火墙配置:sudo ufw status
    • 确认Nginx是否正常运行:sudo systemctl status nginx
    • 检查服务器安全组设置

通过以上步骤,你已经成功创建并部署了一个基于Deepseek的语言润色助手API。这个API可以接收文本输入,通过Deepseek模型进行优化,并返回润色后的结果。

部署完成后注意对应token使用,不要超过额度,避免产生过多费用。

相关推荐
天天进步201521 分钟前
Python游戏开发引擎设计与实现
开发语言·python·pygame
数据狐(DataFox)1 小时前
CTE公用表表达式的可读性与性能优化
经验分享·python·sql
蹦蹦跳跳真可爱5891 小时前
Python----MCP(MCP 简介、uv工具、创建MCP流程、MCP客户端接入Qwen、MCP客户端接入vLLM)
开发语言·人工智能·python·语言模型
No0d1es1 小时前
第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年1月22日真题
python·青少年编程·蓝桥杯·选拔赛
bing_1581 小时前
如何将 Redis 监控集成到微服务整体的监控体系中( 如 Prometheus + Grafana)
redis·微服务·prometheus
MediaTea1 小时前
Python 库手册:getopt Unix 风格参数解析模块
服务器·开发语言·python·unix
王尼莫啊1 小时前
【立体标定】圆形标定板标定python实现
开发语言·python·opencv
cosX+sinY2 小时前
10 卷积神经网络
python·深度学习·cnn
I love studying!!!2 小时前
python基础:用户输入和 while 循环
python