当前位置:首页>python>Python 实战项目合集|AI 聊天机器人入门版(零基础可部署,支持自定义问答)

Python 实战项目合集|AI 聊天机器人入门版(零基础可部署,支持自定义问答)

  • 2026-09-14 11:32:10
Python 实战项目合集|AI 聊天机器人入门版(零基础可部署,支持自定义问答)

大家好!

在 AI 大模型遍地开花的今天,你是否也想拥有一个属于自己的 AI 聊天机器人?不用懂复杂的深度学习,不用搭建昂贵的服务器,用 Python 就能快速实现一个入门版 AI 聊天机器人 —— 支持自定义问答、智能回复、上下文对话,新手 1 小时就能搞定!

今天这个项目,我们从「零基础可落地」的角度出发,不用依赖大厂 API(可选),先实现核心聊天逻辑,再逐步进阶对接开源大模型,让你真正理解 AI 聊天机器人的底层原理。


一、这个 AI 聊天机器人能做什么?

✅ 基础问答:自定义常见问题与回复(如「你好」「叫什么名字」「能做什么」)

✅ 智能匹配:模糊查询相似问题,不用输入完全一致也能回复

✅ 上下文对话:记住上一轮聊天内容,实现多轮对话

✅ 扩展灵活:可对接 ChatGPT / 文心一言 API(进阶版)

✅ 纯本地运行:无需联网也能使用基础功能,保护隐私


二、准备工作(2 分钟搞定)

打开命令提示符,安装所需依赖(复制粘贴即可):
# 基础依赖(必装)pip install fuzzywuzzy python-Levenshtein# 进阶版对接API需装(可选)pip install openai requests

“ 💡 备注:fuzzywuzzy用于模糊匹配相似问题,python-Levenshtein是其加速库;进阶版对接大模型需额外安装对应库。”

三、完整代码(基础版:本地自定义问答)

import jsonimport osfrom fuzzywuzzy import fuzzfrom datetime import datetime# ===================== 核心配置 =====================# 问答库文件路径QA_FILE = "chatbot_qa.json"# 相似度阈值(0-100,越高匹配越严格)SIMILARITY_THRESHOLD = 70# 默认回复(无匹配问题时)DEFAULT_REPLY = [    "抱歉,我还没学会回答这个问题😜",    "没太理解你的意思,可以换个说法问问~",    "这个问题我暂时不会,要不要聊聊别的?"]# ===================== 初始化问答库 =====================def init_qa_database():    """初始化问答库(首次运行自动创建)"""    if not os.path.exists(QA_FILE):        # 默认问答库        default_qa = {            "你好": "你好呀😃,有什么我能帮助你的吗?",            "叫什么名字": "我是你用Python打造的AI聊天机器人~你可以叫我小Py🤖",            "你能做什么": "我能回答你预设的问题,还能记住我们的聊天上下文哦!\n你可以问我:\n1. 你好\n2. 叫什么名字\n3. 今天日期\n4. 退出",            "今天日期": f"今天是{datetime.now().strftime('%Y年%m月%d日')},星期{['一','二','三','四','五','六','日'][datetime.now().weekday()]}",            "谢谢": "不客气😘,能帮到你我很开心!",            "再见": "再见啦👋,下次有问题还可以来找我~"        }        # 保存到JSON文件        with open(QA_FILE, "w", encoding="utf-8") as f:            json.dump(default_qa, f, ensure_ascii=False, indent=4)        print(f"✅ 初始化问答库成功!文件路径:{QA_FILE}")# ===================== 加载问答库 =====================def load_qa_database():    """加载问答库"""    if not os.path.exists(QA_FILE):        init_qa_database()    with open(QA_FILE, "r", encoding="utf-8") as f:        return json.load(f)# ===================== 模糊匹配问题 =====================def match_question(user_input, qa_database):    """    模糊匹配用户问题    :param user_input: 用户输入    :param qa_database: 问答库    :return: 匹配到的回复(无则返回默认回复)    """    max_similarity = 0    best_reply = None    # 遍历问答库,计算相似度    for question, reply in qa_database.items():        similarity = fuzz.ratio(user_input.strip(), question.strip())        if similarity > max_similarity:            max_similarity = similarity            best_reply = reply    # 判断是否匹配成功    if max_similarity >= SIMILARITY_THRESHOLD:        return best_reply    else:        # 随机返回一个默认回复        import random        return random.choice(DEFAULT_REPLY)# ===================== 管理上下文 =====================class ChatContext:    """聊天上下文管理"""    def __init__(self, max_history=5):        self.max_history = max_history  # 最大保存历史记录数        self.history = []  # 聊天历史:[(用户输入, 机器人回复), ...]    def add_history(self, user_input, bot_reply):        """添加聊天记录"""        self.history.append((user_input, bot_reply))        # 超出最大数量时删除最早的记录        if len(self.history) > self.max_history:            self.history.pop(0)    def show_history(self):        """显示聊天历史"""        if not self.history:            print("📜 暂无聊天记录")            return        print("\n📜 聊天历史:")        for i, (user_msg, bot_msg) in enumerate(self.history, 1):            print(f"{i}. 你:{user_msg}")            print(f"   机器人:{bot_msg}")        print("-" * 30)# ===================== 主聊天逻辑 =====================def main_chat():    """主聊天逻辑"""    # 初始化    init_qa_database()    qa_database = load_qa_database()    context = ChatContext(max_history=5)    print("="*60)    print("🤖 Python AI聊天机器人(入门版)🤖")    print("="*60)    print("💡 提示:")    print("  1. 可以问我预设问题(如:你好、叫什么名字、今天日期)")    print("  2. 输入「查看历史」可查看聊天记录")    print("  3. 输入「退出」可结束对话")    print("="*60)    # 循环聊天    while True:        user_input = input("\n你:").strip()        # 退出指令        if user_input in ["退出", "结束", "拜拜"]:            print("机器人:👋 再见啦,下次见!")            break        # 查看历史记录        if user_input in ["查看历史", "聊天记录"]:            context.show_history()            continue        # 空输入处理        if not user_input:            print("机器人:😯 你还没输入内容哦!")            continue        # 匹配回复        bot_reply = match_question(user_input, qa_database)        print(f"机器人:{bot_reply}")        # 保存上下文        context.add_history(user_input, bot_reply)# ===================== 进阶版:对接OpenAI API(可选) =====================def chat_with_openai(user_input, api_key, model="gpt-3.5-turbo"):    """    对接OpenAI API实现智能聊天(需自行申请API Key)    :param user_input: 用户输入    :param api_key: OpenAI API Key    :param model: 模型名称    :return: AI回复    """    import openai    openai.api_key = api_key    try:        response = openai.ChatCompletion.create(            model=model,            messages=[{"role": "user", "content": user_input}]        )        return response.choices[0].message.content.strip()    except Exception as e:        return f"❌ API调用失败:{str(e)}"# ===================== 程序入口 =====================if __name__ == "__main__":    # 运行基础版(本地自定义问答)    main_chat()    # 👉 进阶版使用示例(需替换为自己的API Key)    # api_key = "你的OpenAI API Key"    # while True:    #     user_input = input("\n你:").strip()    #     if user_input == "退出":    #         break    #     reply = chat_with_openai(user_input, api_key)    #     print(f"AI:{reply}")

四、使用教程(超详细,新手必看)

步骤 1:保存代码

把完整代码复制,保存为ai_chatbot.py(任意文件夹均可)。

步骤 2:安装依赖

按「准备工作」中的命令,安装fuzzywuzzy和python-Levenshtein(进阶版需装openai)。

步骤 3:运行程序

双击ai_chatbot.py,或在命令行输入:

python ai_chatbot.py

步骤 4:基础版使用说明

运行后会进入聊天界面,支持以下操作:

👉 基础问答

直接输入预设问题(如「你好」「叫什么名字」「今天日期」),机器人会精准回复;

输入相似问题(如「你叫啥」「今天几号」),也能通过模糊匹配给出正确回复;

输入未预设的问题(如「天气怎么样」),会返回默认回复。

👉 查看聊天历史

输入「查看历史」或「聊天记录」,可查看最近 5 轮对话记录(数量可通过max_history调整)。

👉 退出程序

输入「退出」「结束」「拜拜」,即可关闭聊天机器人。

👉 自定义问答库

程序首次运行会自动生成chatbot_qa.json文件,用记事本打开该文件,按以下格式添加自定义问答:

{    "你好": "你好呀😃,有什么我能帮助你的吗?",    "叫什么名字": "我是小Py🤖",    "你的生日": "我没有生日哦,因为我是代码做的😜",    "自定义问题": "自定义回复"}

保存后重启程序,就能识别新添加的问题!

步骤 5:进阶版(对接 OpenAI API)

如果想让机器人更智能,可对接 OpenAI API:

  • 申请 OpenAI API Key(需科学上网);
  • 取消代码末尾「进阶版使用示例」的注释;
  • 替换api_key为自己的密钥;
  • 运行程序,即可和 GPT-3.5/4 对话。

五、核心功能解析(新手也能懂)

1. 问答库管理

  • 用 JSON 文件存储问答对,实现数据持久化,重启程序后自定义问答不丢失;
  • 首次运行自动初始化默认问答库,降低新手使用门槛。

2. 模糊匹配算法

  • 基于fuzzywuzzy库的ratio方法计算字符串相似度,解决「用户输入和预设问题不完全一致」的问题;
  • 可通过调整SIMILARITY_THRESHOLD(相似度阈值)控制匹配严格程度。

3. 上下文管理

  • 自定义ChatContext类管理聊天历史,支持添加、查看历史记录;
  • 限制最大历史记录数(默认 5 条),避免内存占用过高。

4. 扩展性设计

  • 基础版和进阶版分离,新手先掌握本地逻辑,再对接大模型;
  • 默认回复随机返回,避免机器人回复过于机械。

六、新手常见问题解答

Q1:运行报错「No module named 'fuzzywuzzy'」?

A:执行pip install fuzzywuzzy python-Levenshtein安装依赖,若安装失败,可只装fuzzywuzzy(python-Levenshtein是加速库,非必需)。

Q2:模糊匹配不准确?

A:调整SIMILARITY_THRESHOLD值:值越低匹配越宽松(容易匹配到相似问题),值越高匹配越严格(只有高度相似才会匹配)。

Q3:如何添加更多自定义问答?

A:直接编辑自动生成的chatbot_qa.json文件,按"问题": "回复"格式添加,保存后重启程序即可。

Q4:进阶版对接 API 报错?

A:检查 API Key 是否正确、网络是否能访问 OpenAI、模型名称是否正确(如gpt-3.5-turbo)。


七、扩展优化建议(进阶学习)

学会基础版后,可尝试这些优化方向:

  1. 多轮对话优化
    基于上下文生成更精准的回复(如用户问「今天天气」,接着问「明天呢」,机器人能识别指代);
  2. 对接国产大模型
    替换为文心一言、讯飞星火、通义千问等 API,无需科学上网;
  3. 可视化界面
    用tkinter/PyQt制作图形界面,更贴近商用聊天机器人;
  4. 语音交互
    集成pyttsx3(文字转语音)、SpeechRecognition(语音转文字),实现语音聊天;
  5. 知识库扩展
    对接本地文档 / 网页,实现「基于自有知识的问答」。

结语

这个 AI 聊天机器人入门版,虽然没有大厂大模型那么强大,但完整覆盖了「问答匹配、上下文管理、数据持久化」等核心逻辑,是理解 AI 聊天机器人工作原理的绝佳实战项目。

从本地自定义问答,到对接开源大模型,你可以一步步进阶,最终打造出属于自己的智能聊天机器人。这个过程中,你不仅能掌握 Python 文件操作、第三方库使用,还能理解自然语言处理的基础逻辑。

如果觉得这个项目有用,欢迎点赞 + 在看 + 转发,让更多新手能上手实战!


总结

  1. 本次 AI 聊天机器人入门版基于fuzzywuzzy实现模糊问答匹配,通过 JSON 文件持久化存储自定义问答,支持上下文管理和多轮对话;
  2. 程序分基础版(本地运行,无需联网)和进阶版(对接 OpenAI API,更智能),新手可先掌握基础逻辑,再逐步进阶;
  3. 核心可优化方向包括多轮对话、对接国产大模型、可视化界面、语音交互等,可根据需求扩展。

最新文章

随机文章