系列教程说明
这是「AI零基础70天学习计划」系列教程的第51篇,共140篇(每天早课+晚课)。
上篇回顾
昨天我们学习了API调用的基础——如何用代码与AI对话。今天我们把API知识落地,动手搭建一个真正属于你自己的AI聊天机器人。
你有没有想过,为什么不自己做一个ChatGPT?
不是去训练一个大模型——那需要几千万美元。而是用已经存在的大模型API,搭建一个你定制的聊天机器人:它有专属人设、专属知识、专属交互方式,完全为你量身打造。
今天这节课,我们就来把这个想法变成现实。
为什么要做自己的聊天机器人?
ChatGPT很好用,但它是一个”通用产品”。它不知道你是谁,不记得你的偏好,也没有你行业的专业知识。
自己搭建聊天机器人的好处:
- 人设定制:让它扮演心理咨询师、英语老师、编程导师……
- 知识注入:把你的文档、笔记、产品手册喂给它
- 交互设计:决定它怎么回复、用什么语气、回答多长
- 数据隐私:敏感信息不经过第三方平台
- 品牌价值:企业可以做一个专属客服机器人
而且,2026年的今天,做这件事已经非常简单了。
搭建前的准备
在动手之前,你需要准备三样东西:
1. 一个AI大模型的API Key
上节课我们学过,主流选择有:
- OpenAI API(ChatGPT背后的模型)
- Anthropic API(Claude背后的模型)
- 国内:百度文心、阿里通义、讯飞星火等
选一个你能用的,注册并获取API Key。
2. 基础编程能力
今天的代码主要用Python。不需要精通,能看懂基本语法就行。如果你昨天的课跟上了,今天会很轻松。
3. 一个文本编辑器
VS Code、PyCharm,甚至记事本都行。
第一步:最简单的聊天机器人
让我们从最简版本开始——一个能记住对话历史的AI聊天机器人。
`python
import requests
API_KEY = “你的API密钥”
API_URL = “https://api.openai.com/v1/chat/completions”
def chat(messages):
headers = {
“Authorization”: f”Bearer {API_KEY}”,
“Content-Type”: “application/json”
}
data = {
“model”: “gpt-4o”,
“messages”: messages
}
response = requests.post(API_URL, headers=headers, json=data)
return response.json()[“choices”][0][“message”][“content”]
# 对话历史
history = [
{“role”: “system”, “content”: “你是一个友好的AI助手。”}
]
print(“聊天机器人已启动!输入 ‘quit’ 退出。”)
while True:
user_input = input(“你:”)
if user_input.lower() == “quit”:
break
history.append({“role”: “user”, “content”: user_input})
reply = chat(history)
history.append({“role”: “assistant”, “content”: reply})
print(f”AI:{reply}”)
`
运行这段代码,你就有了一个能在终端里对话的聊天机器人。
这段代码的核心逻辑很简单:
- 维护一个
history列表,记录所有对话 - 每次用户说话,把新消息追加到历史里
- 把完整历史发给AI,AI根据上下文生成回复
- 把AI的回复也追加到历史里
这就是ChatGPT网页版的核心原理——它并不是真的”记住”了你之前说的话,而是每次把完整对话记录重新发给模型。
第二步:给机器人设定人设
现在让我们来定制机器人的”性格”。
关键是 system 消息——这是你给AI的”角色设定卡”。
`python
system_prompt = “””你是一位专业的Python编程导师。
你的特点:
- 说话简洁,不啰嗦
- 给代码示例时,先解释思路,再给代码
- 鼓励学生动手尝试,不直接给出完整答案
- 用中文回答,但代码注释用英文
- 如果学生问的问题超出了初学者范围,友善地引导他们先掌握基础
“””
`
把这个 system_prompt 放进对话历史的第一条,机器人就会按照你的设定来回答。
人设设定的技巧:
| 要素 | 说明 | 示例 |
|---|
|——|——|——|
| 角色身份 | 它是谁 | “你是一位资深产品经理” |
|---|---|---|
| 说话风格 | 怎么说 | “简洁、直接、不废话” |
| 专业领域 | 擅长什么 | “精通B2B SaaS产品设计” |
| 回答规则 | 怎么答 | “先问清楚需求,再给建议” |
| 禁忌 | 不做什么 | “不编造数据,不确定就说不知道” |
一个好的system prompt,比任何复杂的代码都重要。 后面我们在Day09(角色设定)和Day10(结构化提示词)中会深入讲解这个话题。
第三步:注入专属知识
让你的机器人拥有”私有知识”,有两种主流方案:
方案一:直接塞进system prompt(简单粗暴)
`python
knowledge = “””
关于我们公司的产品FAQ:
- 产品名称:CloudSync Pro
- 价格:基础版99元/月,专业版299元/月
- 支持平台:Windows、Mac、Linux、iOS、Android
- 数据加密:AES-256端到端加密
- 客服电话:400-123-4567
“””
system_prompt = f”””你是一个CloudSync Pro的客服机器人。
请根据以下知识回答用户问题,不要编造信息:
{knowledge}
如果用户问的问题不在知识范围内,请友善地告知并建议联系人工客服。
“””
`
这种方式简单直接,但有token限制——system prompt太长会挤占对话空间,也增加API成本。
方案二:RAG检索增强生成(专业方案)
这是目前业界的标准做法。简单来说:
- 把你的文档切分成小块
- 用向量数据库存储(每块变成一组数字)
- 用户提问时,先搜索最相关的文档片段
- 把这些片段作为上下文发给AI
我们在Day52会专门讲RAG的实现。现在先记住这个思路就好。
第四步:加一个漂亮的界面
终端聊天虽然能用,但毕竟不够友好。让我们给机器人加一个网页界面。
用Gradio——5行代码搞定Web界面:
`python
import gradio as gr
def respond(message, chat_history):
history = [{“role”: “system”, “content”: “你是一个友好的AI助手。”}]
for user_msg, ai_msg in chat_history:
history.append({“role”: “user”, “content”: user_msg})
history.append({“role”: “assistant”, “content”: ai_msg})
history.append({“role”: “user”, “content”: message})
reply = chat(history)
return reply
demo = gr.ChatInterface(fn=respond, title=”我的AI聊天机器人”)
demo.launch()
`
运行后会自动打开一个网页,你就能在浏览器里和你的聊天机器人对话了。
Gradio的优势:
- 零前端代码,纯Python
- 自动生成聊天界面
- 支持流式输出(打字机效果)
- 一键分享链接给朋友试用
安装只需要一行命令:pip install gradio
第五步:部署上线
机器人在本地能跑了,但别人访问不了。要让其他人也能用,你需要把它部署到服务器上。
方案一:Hugging Face Spaces(免费,最简单)
- 注册 Hugging Face 账号
- 创建一个Space,选Gradio框架
- 把代码推上去,自动部署
完全免费,适合个人项目和原型验证。
方案二:云服务器部署
如果需要更多控制(自定义域名、数据隐私、高并发),可以用:
- 阿里云/腾讯云的轻量服务器
- Docker容器化部署
- Nginx反向代理
具体部署方法我们在Day55会详细讲。
实战技巧:让你的机器人更好用
技巧一:流式输出
普通模式下,用户要等AI完全生成完才能看到回复。流式输出让AI像打字一样一个字一个字显示,体验好很多。
`python
data = {
“model”: “gpt-4o”,
“messages”: messages,
“stream”: True # 开启流式
}
response = requests.post(API_URL, headers=headers, json=data, stream=True)
for line in response.iter_lines():
if line:
# 解析并输出每个token
…
`
技巧二:对话摘要
长对话会消耗大量token。当对话超过一定长度,可以让AI自动总结前面的内容,用摘要替代完整历史。
技巧三:错误处理
API调用可能失败(网络问题、额度用尽、限流),一定要加错误处理:
`python
try:
reply = chat(messages)
except requests.exceptions.Timeout:
reply = “抱歉,AI思考超时了,请再试一次。”
except Exception as e:
reply = f”出了点问题:{str(e)}”
`
今日行动项
今天的课后任务是动手搭建你自己的聊天机器人:
- 基础任务:用今天的代码,搭建一个能在终端对话的机器人
- 进阶任务:给机器人设定一个人设(比如英语老师、健身教练)
- 挑战任务:用Gradio加上Web界面,分享给朋友试用
记住:代码跑起来比代码写得完美更重要。先做出一个能用的版本,再慢慢优化。
🚇 地铁深读:聊天机器人的前世今生
从ELIZA到ChatGPT:60年的对话梦
1966年,MIT的Joseph Weizenbaum写了一个叫ELIZA的程序。它模拟心理治疗师,通过简单的模式匹配和替换来”对话”。比如用户说”我很难过”,它会回复”为什么你觉得你很难过?”
这个程序极其简陋——没有任何理解能力,只是在套模板。但有趣的是,很多用户真的以为自己在和一个有同理心的心理医生聊天,甚至对它产生了情感依赖。
Weizenbaum本人被这种现象吓到了。 他后来写了一本书叫《计算机的能力与人类的理性》,警告人们不要过度信任机器。
60年后的今天,ChatGPT的对话能力已经远超ELIZA。但核心挑战没变:它依然不真正”理解”你在说什么。它是一个极其复杂的模式匹配器,只不过匹配的规模从几百条规则变成了万亿参数。
这有什么实际意义?
意味着你在使用AI聊天机器人时,要记住几个关键点:
- 它可能会一本正经地胡说八道(幻觉问题)
- 它没有真正的感情,但可以很好地模拟
- 它的知识有截止日期,不是实时的
- 你给它的上下文越清晰,回答质量越高
理解这些,你就能更好地利用AI聊天机器人,而不是被它”骗”到。
推荐学习资源:
- Gradio官方文档:https://www.gradio.app/docs
- OpenAI API文档:https://platform.openai.com/docs
- LangChain框架(构建复杂AI应用的利器):https://langchain.com
明天早上8点:Day52——RAG:让AI读你的文档
今晚5点:Day51——晚课 搭建AI聊天机器人实战
发表回复