☰
零基础AI应用开发第一天:用Python调用DeepSeek API搭建命令行聊天机器人
2026/10/27 3:34:40 网站建设 项目流程

1. 从零上手AI应用开发:第一天到底该干什么

很多人一听到“AI应用开发”这四个字,第一反应是:这玩意儿是不是得先学完线性代数、概率论、深度学习框架,再啃几篇Transformer论文才有资格碰?我当初也是这么想的,结果拖了大半年连一行代码都没写。后来真正上手才发现,零基础做AI应用开发,第一天最该干的事不是学理论,而是把“调用大模型API”这条链路跑通。你只要能发一个HTTP请求、能解析一段JSON,就已经能做出一个能用的东西了。

这篇内容就是围绕这个思路展开的。核心目标很明确:用Python和requests库,调用DeepSeek API,做一个能在命令行里跟大模型对话的聊天机器人。涉及的关键词包括ai应用开发、python、requests、deepseek api、命令行聊天机器人。整套东西不需要GPU,不需要本地部署模型,一台能上网的普通电脑就够,Python版本3.8以上即可。

适合谁看?如果你是会一点点Python基础(知道变量、函数、循环是什么),但从来没调用过任何大模型接口的人,这篇就是给你写的。如果你完全没碰过Python,也不用慌,我会把安装和环境配置的坑一并讲清楚,照着做就行。做完之后你会得到一个真实可运行的小项目,而不是一堆看不懂的概念。

我先把第一天的整体路线说清楚,让你心里有底:第一步装Python和配环境,第二步装requests库并验证网络请求能力,第三步去DeepSeek开放平台拿到API Key,第四步写一个最小的API调用脚本跑通,第五步把它改造成带上下文记忆的命令行聊天循环。五步走完,你就完成了从“不会”到“有一个能跑的东西”的跨越。下面逐步拆解,每一步我都会告诉你为什么这么做,以及我踩过的坑。

2. 环境准备:Python安装与requests库配置的实操细节

2.1 Python版本选择与安装避坑

Python安装这件事,看起来简单,但新手翻车率极高。核心原则只有一条:去python官网下载,不要用来路不明的第三方安装包。网上搜“python安装教程”会出来一大堆,有些捆绑了乱七八糟的东西,装完环境变量一团糟。直接搜python官网,进Downloads页面,选3.8以上的稳定版本,我个人建议选3.10或3.11,兼容性好,第三方库支持也全。

安装的时候有一个关键勾选项,Windows用户一定要勾上“Add Python to PATH”。这个选项的作用是把Python加到系统环境变量里,勾了之后你在命令行里直接敲python就能用,不勾的话你得手动配环境变量,新手很容易在这里卡住。Mac用户相对省心,用官网的pkg安装包一路下一步就行,或者用homebrew装也可以。

装完之后验证一下,打开命令行(Windows是cmd或PowerShell,Mac是终端),输入:

python --version

如果输出了版本号,比如Python 3.11.5,说明装好了。如果提示“不是内部或外部命令”,那就是环境变量没配好,Windows用户重新跑一遍安装程序,勾上Add to PATH;Mac用户检查一下是不是装到了非标准路径。

提示:有些系统里python命令指向的是Python 2,你需要用python3来调用。验证的时候两个都试一下,哪个输出了3.x的版本号就用哪个。

2.2 requests库安装与网络请求验证

Python自带的urllib库也能发HTTP请求,但写起来极其啰嗦,所以业界调API基本都用requests。安装就一行命令:

pip install requests

如果pip命令不识别,试试pip3 install requests,或者python -m pip install requests。后一种写法最稳,因为它明确指定了用哪个Python解释器来执行pip,能避免多版本Python共存时的混乱。

装完之后,我建议你立刻写一个最小的请求测试,确认网络链路是通的。这一步很多人跳过,结果后面调API报错的时候分不清是网络问题还是代码问题。测试脚本长这样:

import requests resp = requests.get("https://httpbin.org/get", timeout=10) print(resp.status_code) print(resp.text[:200])

跑出来如果打印了200和一段JSON,说明requests能用、网络能通。如果卡住不动或者报连接错误,那可能是网络环境的问题,先把这个解决掉再往下走。

注意:调API的时候一定要加timeout参数。我见过太多人写请求不带超时,结果网络一抖动程序就永久卡死,排查半天以为是代码逻辑问题。加上timeout,出问题会直接抛异常,定位快得多。

2.3 编辑器选择:PyCharm还是VS Code

关于IDE,网上搜“pycharm deepseek api 调用”和“vscode python环境配置”的人都不少。我的建议是:新手用VS Code,轻量、启动快、配Python插件后体验很好。PyCharm功能更全但偏重,社区版够用,专业版收费。如果你已经装了PyCharm,那就直接用,不用换。

VS Code的关键配置是装Python扩展,然后在设置里选对解释器。按Ctrl+Shift+P(Mac是Cmd+Shift+P),输入“Python: Select Interpreter”,选你刚装的那个Python版本。这一步不做的话,你终端里pip装的库,编辑器里import会报找不到,很多人卡在这里以为是库没装上。

3. DeepSeek API调用:从拿Key到跑通第一个请求

3.1 获取API Key与接口基本信息

DeepSeek的API调用方式和OpenAI的接口格式高度兼容,这对开发者来说是好事,意味着你学会一套,换其他家模型迁移成本很低。首先去DeepSeek开放平台注册账号,在控制台里创建一个API Key。这个Key是一串长字符串,创建后只显示一次,一定要立刻复制保存,关掉页面就再也看不到了,只能重新创建。

拿到Key之后,你需要知道两个核心信息:接口地址和请求格式。DeepSeek的对话接口地址是https://api.deepseek.com/chat/completions,请求方式是POST,请求头里要带Authorization: Bearer 你的Key和Content-Type: application/json。请求体是一个JSON,核心字段是model和messages。model填deepseek-chat,messages是一个数组,里面每个元素有role和content两个字段。

role有三种:system用来设定AI的角色和行为规则,user是用户说的话,assistant是AI的回复。这个结构就是所谓的“对话消息列表”,理解它是理解整个大模型对话机制的关键。

3.2 最小可运行调用脚本

先别急着做聊天机器人,第一步是跑通一个最简单的请求。代码如下:

import requests API_KEY = "你的API Key" URL = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } data = { "model": "deepseek-chat", "messages": [ {"role": "user", "content": "用一句话解释什么是API"} ] } resp = requests.post(URL, headers=headers, json=data, timeout=30) print(resp.status_code) print(resp.json())

跑通之后你会看到返回的JSON里,choices[0].message.content就是AI的回复内容。这一步是整个项目的基石,跑通了后面都是在这个基础上加东西。

提示:requests.post里的json=data参数会自动把字典转成JSON字符串并设置正确的Content-Type,比手动json.dumps再传data要省事,也不容易出错。

3.3 常见报错与排查思路

第一次调API,报错几乎是必然的。我把最常见的几个列出来,你对照着排查:

报错信息原因解决办法
401 UnauthorizedAPI Key错误或没传检查Key是否复制完整,Bearer后面有没有空格
429 Too Many Requests请求频率超限或余额不足降低请求频率,检查账户余额
exceeded retry limit, last status: 429重试次数用完仍是429说明持续超限,需要等待或充值
ConnectionError网络不通检查网络,确认接口地址拼写正确
JSONDecodeError返回的不是JSON打印resp.text看原始返回,通常是报错页面

429这个错误特别值得说。它的意思是“请求太多”,可能有两种情况:一是你短时间内发了太多请求触发了限流,二是账户余额用完了。很多人看到429以为是代码问题,反复重试,结果越试越糟。正确做法是先看返回体里的错误信息,它会告诉你具体原因。

4. 命令行聊天机器人的完整实现

4.1 核心设计思路:上下文记忆怎么实现

大模型本身是“无状态”的,它不记得你上一句说了什么。所谓“对话记忆”,本质上是每次请求都把之前的对话历史一起发过去。比如你问了一句“什么是Python”,AI回答了,你再问“它有什么优点”,这时候请求里要带上三条消息:第一条user问Python,第二条assistant回答,第三条user问优点。模型看到完整历史,才能理解“它”指的是Python。

这个机制决定了聊天机器人的核心数据结构:一个不断增长的messages列表。每轮对话,把用户输入append进去,发请求,拿到回复后再把回复append进去。下一轮请求就带着完整历史。理解这一点,你就理解了所有对话类AI应用的基本原理。

4.2 完整代码实现与逐段解析

下面是完整的命令行聊天机器人代码,我把它拆成几块讲:

import requests API_KEY = "你的API Key" URL = "https://api.deepseek.com/chat/completions" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } messages = [ {"role": "system", "content": "你是一个友好的助手,回答简洁明了。"} ] def chat(user_input): messages.append({"role": "user", "content": user_input}) data = { "model": "deepseek-chat", "messages": messages } try: resp = requests.post(URL, headers=headers, json=data, timeout=30) resp.raise_for_status() reply = resp.json()["choices"][0]["message"]["content"] messages.append({"role": "assistant", "content": reply}) return reply except requests.exceptions.Timeout: return "请求超时,请重试" except requests.exceptions.HTTPError as e: return f"请求出错:{e}" except KeyError: return "返回格式异常,请检查API响应" def main(): print("聊天机器人已启动,输入 quit 退出") while True: user_input = input("你:") if user_input.strip().lower() == "quit": break reply = chat(user_input) print(f"AI:{reply}") if __name__ == "__main__": main()

逐段说。messages列表初始化时放了一条system消息,这是给AI设定人设的,你可以改成任何你想要的风格。chat函数是核心,它做了四件事:把用户输入加入历史、发请求、解析回复、把回复也加入历史。异常处理分了三类,超时、HTTP错误、返回格式异常,分别给不同的提示,这样出问题的时候你能快速判断是哪一类。

main函数是一个无限循环,读用户输入,判断是不是退出命令,否则调用chat并打印回复。if __name__ == "__main__"是Python的标准写法,保证这个文件被直接运行时才执行main,被import时不执行。

4.3 参数调优:temperature与max_tokens

上面代码里没写这两个参数,但它们很重要。temperature控制回复的随机性,范围0到2,值越低回复越确定、越保守,值越高越有创造性。做事实性问答建议设0.3左右,做创意写作可以设1.0以上。max_tokens限制回复的最大长度,不设的话用模型默认值,设太小会导致回复被截断。

data = { "model": "deepseek-chat", "messages": messages, "temperature": 0.7, "max_tokens": 1000 }

我实测下来,日常聊天temperature设0.7比较自然,不会太死板也不会太飘。max_tokens设1000够大多数场景用,如果你要它写长文,调到2000或更高。

5. 实操中踩过的坑与排查技巧

5.1 上下文过长导致的问题

聊天轮数多了之后,messages列表会越来越长,请求体越来越大,最终可能超出模型的上下文窗口限制,报错或者响应变慢。解决办法有两种:一是限制历史轮数,只保留最近N轮;二是做摘要压缩,把早期对话总结成一段话。第一天先用第一种,简单有效:

MAX_HISTORY = 20 if len(messages) > MAX_HISTORY: messages = [messages[0]] + messages[-(MAX_HISTORY - 1):]

注意要保留第一条system消息,所以是[messages[0]]加上后面的部分。这个逻辑放在每次append之前执行。

5.2 API Key的安全管理

把Key硬编码在代码里是最省事但最不安全的做法。一旦代码分享出去,Key就泄露了。正确做法是用环境变量:

import os API_KEY = os.environ.get("DEEPSEEK_API_KEY")

然后在系统里设置这个环境变量。Windows用set命令或系统设置里的环境变量面板,Mac和Linux在.bashrc或.zshrc里加export DEEPSEEK_API_KEY="你的Key"。这样代码里就不含敏感信息,可以放心分享。

5.3 编码问题与中文乱码

Windows命令行默认编码可能是GBK,打印中文有时会乱码。解决办法是在代码开头加:

import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

或者直接在命令行里执行chcp 65001切换到UTF-8编码。Mac和Linux一般没这个问题。

5.4 常见问题速查表

现象可能原因排查方向
程序卡住无响应没设timeout加timeout参数
回复内容为空max_tokens太小或模型异常打印完整响应体检查
中文显示乱码终端编码问题切UTF-8或改代码编码
第二轮对话AI失忆messages没累积检查是否append了assistant回复
请求越来越慢历史过长限制历史轮数
429持续出现余额不足登录平台查看余额

6. 第一天之后的扩展方向

跑通这个命令行机器人之后,你手里其实已经有了一个AI应用的最小骨架。接下来能扩展的方向很多,我按难度排一下。最简单的,把命令行换成Web界面,用Flask或FastAPI起一个服务,前端一个输入框一个显示区,就是一个网页版聊天工具。再进一步,把messages持久化到文件或数据库,就能实现跨会话的记忆。还可以加流式输出,让回复像打字一样一个字一个字蹦出来,体验好很多,DeepSeek的API支持stream参数。

如果你想做点更实用的,可以给机器人加“工具调用”能力,比如让它能查天气、能算数学、能读本地文件。这就是所谓的Agent方向,核心思路是让模型输出结构化的指令,你的代码去执行这个指令再把结果喂回模型。第一天不用碰这些,但知道有这个方向,学起来会更有目标感。

我个人在实际操作中的体会是,AI应用开发的门槛不在模型本身,而在工程细节。API调用就那几行代码,但环境配置、错误处理、上下文管理、安全实践这些“脏活累活”才是真正决定你能不能做出一个稳定可用东西的关键。第一天把这条链路走通,比看十篇理论文章都有用。最后再分享一个小技巧:把每次请求的耗时和token用量打印出来,你会对成本和性能有直观感受,调优的时候心里有数。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询