⚡ Linux 终端通过 Shell 脚本调用 deepseek API 实现交互式 AI

🧩 1. 简介

DeepSeek 的 AI 功能很强大,但在某些 Linux 系统上,如果没有 GUI 或浏览器,就无法直接使用网页版本。

在这种情况下,我们可以通过 Shell 脚本调用 DeepSeek API,在终端中与 AI 进行交互。

这样每天就能节省打开浏览器的时间,非常方便。

本文将详细介绍 Linux 终端通过 Shell 脚本调用 DeepSeek API 实现交互式 AI 的全部流程

⚙️ 2. 环境准备

2.1 注册 deepseek 账号

打开 deepseek 官网,利用手机号注册一个账号

在这里插入图片描述

🔑 2.2 创建 deepseek API key

打开 DeepSeek 开放平台,登录 DeepSeek 账号,点击左边栏的 API keys,进入 API 界面

在这里插入图片描述

点击创建 API key 按钮,创建一个API Key,记下 Key 这一栏的值,用于后续脚本调用

在这里插入图片描述

💳 2.3 购买 API key 服务

使用 API key 需要购买 API key 服务,点击左边栏的充值进入 API key 服务购买界面

在这里插入图片描述

这里 DeepSeek 提供的 API key 服务是按 token 数来计费的,简单地说就是按对话次数计费。根据需求选择合适的计费档位,购买 API key 的服务。

在这里插入图片描述

🧰 2.4 安装 jq

由于deepseek用的是JSON串来传递参数,所以需要在 Linux 系统中安装 jq 来解析 JSON串

sudo apt install jq

💻 3. 编写 shell 脚本

创建脚本文件 myseek.sh ,写入如下代码:

#!/bin/bash
DEEPSEEK_API_KEY="api-key"

# 初始化对话数组
messages='[{"role": "system", "content": "You are a helpful AI assistant."}]'

# 初始化日志目录和文件
LOG_DIR="$HOME/chatlog"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/deepseek_$(date +"%Y%m%d_%H%M%S").log"

# 初始化对话轮次计数
round=1

# 捕获 Ctrl+C 优雅退出
trap 'echo -e "\n 已退出对话"; exit 0' SIGINT

echo " DeepSeek 聊天终端启动成功!"
echo "提示:然后输入 @ 后换行即可发送信息。按 Ctrl+C 退出。"

user_input=""

while true; do
  # 读取用户输入行
  read -r line
  if [[ "$line" == "@" ]]; then
    # 用户输入 @ 表示发送消息
    if [[ -z "$user_input" ]]; then
      echo " 请输入内容后再发送"
      continue
    fi

    # 将用户输入追加到 messages
    messages=$(echo "$messages" | jq --arg content "$user_input" '. + [{"role":"user","content":$content}]')

    # 构建 payload
    payload=$(jq -n \
      --argjson messages "$messages" \
      '{
        "model": "deepseek-chat",
        "messages": $messages,
        "temperature": 1.3,
        "stream": false
      }')

    echo "正在发送中..."
    response=$(curl -s -X POST "https://api.deepseek.com/chat/completions" \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
      -d "$payload")

    # 解析回复
    assistant_reply=$(echo "$response" | jq -r '.choices[0].message.content')

    if [[ "$assistant_reply" == "null" ]]; then
      echo "解析失败,返回内容:$response"
      {
        echo "第${round}轮对话"
        echo "===================="
        echo "用户:"
        echo "$user_input"
        echo "解析失败,返回内容:"
        echo "$response"
        echo "===================="
      } >> "$LOG_FILE"
    else
      echo -e "\n DeepSeek 回复:\n$assistant_reply\n"
      # 将对话内容写入日志文件
      {
        echo "第${round}轮对话"
        echo "===================="
        echo "用户:"
        echo "$user_input"
        echo "DeepSeek:"
        echo "$assistant_reply"
        echo "===================="
      } >> "$LOG_FILE"
      # 保存助手回复进入上下文
      messages=$(echo "$messages" | jq --arg content "$assistant_reply" '. + [{"role":"assistant","content":$content}]')
    fi

    # 对话轮数+1
    ((round++))

    # 清空输入缓存
    user_input=""
    echo "继续输入消息(输入 @ 后换行发送,Ctrl+C 退出)"
  else
    # 累积用户输入
    user_input+="$line"$'\n'
  fi
done

脚本的功能和作用注释里都写得很清楚,唯一需要注意的就是将 DEEPSEEK_API_KEY 变量的值换成你自己的 API key,其他的我就不再解释了。

需要注意的是我的脚本只实现了基本的多轮对话,和保存对话内容的功能。如果你有兴趣,可以给脚本添加设置 temperature、model 参数的功能,或者是统计 deepseek 反应时间的功能,又或者是每轮对话后显示 API key 余额的功能。总之这个脚本扩展性很强,可以随使用者的喜好进行任意魔改(改完后出 BUG 不关我的事)

🕹️ 4. 使用 shell 脚本版 deepseek

执行脚本测试功能是否正常

在这里插入图片描述

然后检查日志是否正常

在这里插入图片描述

都没问题就可以将这个脚本部署到系统环境变量中方便调用了。

首先将脚本改名

mv myseek.sh myseek

然后赋予可执行权限

chmod +x myseek

然后将脚本移动到系统环境变量 PATH 目录中

sudo mv myseek /usr/local/bin

然后就可以直接输入 myseek 调用了

在这里插入图片描述

⚠️ 5. 注意事项

🧊 5.1 终端窗口宽字符对齐问题

有的终端窗口再执行脚本时会出现中文字符无法全部通过 backspace 删除的现象,比如这样

在这里插入图片描述

无论怎么按 backspace 键,已经输入的中文字符就是删除不掉。

这个不是脚本的问题,是终端窗口没有正确处理中文宽字符对齐导致的问题。我这个出现问题的终端是 Vscode 里面的 WSL 终端,如果使用 Windows 提供的 WSL 终端就不会有这个问题。

📚 6. 参考文档

DeepSeek API 官方文档

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值