我用这个Python库一天开发了个智能助手!(ChatterBot)

文摘   2024-11-20 12:52   辽宁  

我用这个Python库一天开发了个智能助手!(ChatterBot)

 1大家好,我是茉莉。今天要给大家介绍一个特别有趣的Python库 - ChatterBot。用它可以快速搭建一个智能聊天机器人!不需要深入了解机器学习和NLP,只要几十行代码就能做出一个能陪你聊天的AI助手。让我们开始今天的Python学习之旅吧!
2
3#
# ChatterBot是什么?
4
5ChatterBot是一个基于机器学习的Python聊天机器人库。它能自动从与人的对话中学习,并生成智能的回复。最棒的是,它支持中文对话,还可以进行简单的数学计算和时间问答。
6
7#
# 开发环境准备
8
9首先需要安装ChatterBot及其语料库:
10
11```python
12pip install chatterbot
13pip install chatterbot-corpus

创建基础聊天机器人

让我们先搭建一个最简单的聊天机器人:

 1from chatterbot import ChatBot
2from chatterbot.trainers import ChatterBotCorpusTrainer
3
4# 创建聊天机器人
5bot = ChatBot(
6    'MiniBot',  # 机器人名字
7    storage_adapter='chatterbot.storage.SQLStorageAdapter',  # 存储方式
8    logic_adapters=[
9        'chatterbot.logic.BestMatch'  # 对话逻辑
10    ],
11    database_uri='sqlite:///database.db'  # 数据库路径
12)
13
14# 训练机器人
15trainer = ChatterBotCorpusTrainer(bot)
16# 使用中文语料库训练
17trainer.train(“chatterbot.corpus.chinese”)
18
19# 开始对话
20while True
21    try
22        user_input = input(“我: ”)
23        response = bot.get_response(user_input)
24        print(f“机器人: {response}”)
25    except KeyboardInterrupt:
26        break

让机器人更智能

我们可以添加更多logic_adapters让机器人支持更多功能:

1bot = ChatBot(
2    'SmartBot'
3    logic_adapters=[
4        'chatterbot.logic.BestMatch'
5        'chatterbot.logic.MathematicalEvaluation',  # 数学计算
6        'chatterbot.logic.TimeLogicAdapter'  # 时间相关
7    ]
8)

小贴士:现在你可以问机器人“1+1等于几”或“现在几点了”这样的问题啦!

自定义训练数据

除了使用预置语料库,我们还可以自己添加训练数据:

 1from chatterbot.trainers import ListTrainer
2
3trainer = ListTrainer(bot)
4custom_conversations = [
5    “你好”,
6    “你好呀”,
7    “你叫什么名字”,
8    “我叫SmartBot,很高兴认识你”,
9    “今天天气怎么样”,
10    “抱歉我不能了解实时天气,但我们可以聊聊别的”
11]
12trainer.train(custom_conversations)

进阶功能:情感分析

让我们给机器人加上简单的情感判断能力:

 1def get_sentiment(text):
2    # 简单的情感词典
3    positive_words = ['喜欢', '开心', '快乐', '棒', '好']
4    negative_words = ['讨厌', '伤心', '难过', '糟糕', '不好']
5
6    sentiment = 'neutral'
7    for word in positive_words:
8        if word in text:
9            sentiment = 'positive'
10            break
11    for word in negative_words:
12        if word in text:
13            sentiment = 'negative'
14            break
15    return sentiment
16
17# 在对话循环中使用
18user_input = input(“我: ”)
19sentiment = get_sentiment(user_input)
20if sentiment == 'positive'
21    print(“机器人: 很高兴看到你心情不错!”)
22elif sentiment == 'negative'
23    print(“机器人: 别担心,事情总会变好的~”)

注意事项

  1. ChatterBot需要一定的训练时间,第一次运行可能比较慢

  2. 数据库文件会随着对话累积变大,定期清理很重要

  3. 中文支持可能不如英文完善,需要更多的训练数据

实践小任务

  1. 试着给机器人添加更多自定义对话

  2. 实现一个保存对话历史的功能

  3. 给机器人添加特定领域(如美食、旅游)的专业知识

小伙伴们,今天的Python学习之旅就到这里啦!有了ChatterBot这个强大的工具,相信你已经可以开发出一个简单的智能助手了。记得动手实践,有问题随时在评论区问我哦。让我们下次再见!

Python学习 #AI助手 #ChatterBot# 用Python打造智能助手进阶篇

 1上一篇我们学习了ChatterBot的基础用法。今天我要教大家如何让咱们的智能助手更加强大,添加一些实用的功能,比如天气查询、新闻获取等。让我们的机器人不只是会聊天,还能帮我们干点实事!
2
3## 添加天气查询功能
4
5首先我们用requests库来获取天气API的数据:
6
7```python
8import requests
9from chatterbot import ChatBot
10from chatterbot.trainers import ListTrainer
11
12class WeatherBot(ChatBot):
13    def __init__(self, name):
14        super().__init__(name)
15        self.weather_api_key = “你的天气API密钥”  # 需要自行申请天气API密钥
16
17    def get_weather(self, city):
18        url = f“http://api.weatherapi.com/v1/current.json?key={self.weather_api_key}&q={city}”
19        try
20            response = requests.get(url)
21            data = response.json()
22            temp = data['current']['temp_c']
23            condition = data['current']['condition']['text']
24            return f“{city}当前温度{temp}°C,天气{condition}”
25        except:
26            return “抱歉,我获取天气信息失败了”
27
28# 创建增强版机器人
29bot = WeatherBot('SmartAssistant')
30
31# 添加天气相关的训练数据
32weather_conversations = [
33    “查询天气”,
34    “您想查询哪个城市的天气?”,
35    “天气怎么样”,
36    “请告诉我具体的城市名称”,
37]
38trainer = ListTrainer(bot)
39trainer.train(weather_conversations)

新闻资讯功能

让机器人能够获取最新新闻:

 1class NewsBot(WeatherBot):
2    def get_news(self, category='general')
3        news_api_key = “你的新闻API密钥”  # 需要自行申请新闻API密钥
4        url = f“https://newsapi.org/v2/top-headlines?country=cn&category={category}&apiKey={news_api_key}”
5        try:
6            response = requests.get(url)
7            news_items = response.json()['articles'][:5]
8            return “\n”.join([f“- {item['title']}” for item in news_items])
9        except:
10            return “抱歉,获取新闻失败了”
11
12# 升级机器人
13bot = NewsBot('SuperAssistant')

智能提醒功能

添加定时提醒功能:

 1from datetime import datetime
2import threading
3import time
4
5class ReminderBot(NewsBot):
6    def __init__(self, name)
7        super().__init__(name)
8        self.reminders = {}
9
10    def set_reminder(self, reminder_time, message)
11        try:
12            reminder_datetime = datetime.strptime(reminder_time, “%H:%M”)
13            current_time = datetime.now()
14
15            # 设置提醒时间
16            reminder_datetime = reminder_datetime.replace(
17                year=current_time.year,
18                month=current_time.month,
19                day=current_time.day
20            )
21
22            if reminder_datetime < current_time:
23                reminder_datetime = reminder_datetime.replace(day=current_time.day + 1)
24
25            self.reminders[reminder_time] = message
26
27            # 创建提醒线程
28            threading.Thread(target=self._remind, 
29                           args=(reminder_datetime, message)).start()
30
31            return f“好的,我会在{reminder_time}提醒你{message}”
32        except:
33            return “抱歉,设置提醒失败了,请使用正确的时间格式(HH:MM)”
34
35    def _remind(self, reminder_time, message)
36        while datetime.now() < reminder_time:
37            time.sleep(60)
38        print(f“\n提醒:{message}”)

整合所有功能

现在让我们把所有功能整合到一起:

 1class SuperBot(ReminderBot):
2    def process_input(self, user_input):
3        if “天气” in user_input:
4            # 提取城市名称(这里使用简单的规则,实际应用中可以用NLP)
5            for city in [“北京”, “上海”, “广州”, “深圳”]:  # 示例城市列表
6                if city in user_input:
7                    return self.get_weather(city)
8            return “请告诉我您想查询哪个城市的天气”
9
10        elif “新闻” in user_input:
11            return self.get_news()
12
13        elif “提醒” in user_input:
14            # 简单的时间提取规则
15            import re
16            time_pattern = r'(\d{1,2}:\d{2})'
17            found_time = re.search(time_pattern, user_input)
18            if found_time:
19                reminder_time = found_time.group(1)
20                message = user_input.split(reminder_time)[-1].strip()
21                return self.set_reminder(reminder_time, message)
22            return “请告诉我具体的提醒时间(比如: 1430)和提醒内容”
23
24        else
25            # 使用原有的聊天功能
26            return str(self.get_response(user_input))
27
28# 创建超级助手
29bot = SuperBot('SuperBot')
30
31# 运行对话循环
32print(“您的智能助手已启动!(支持天气查询、新闻资讯、定时提醒)”)
33print('示例命令:\n- 北京天气怎么样\n- 播报新闻\n- 14:30提醒我开会')
34
35while True:
36    try
37        user_input = input(“\n我: ”)
38        if user_input.lower() in ['退出', 'exit', 'quit']:
39            print(“再见!”)
40            break
41
42        response = bot.process_input(user_input)
43        print(f“机器人: {response}”)
44
45    except KeyboardInterrupt:
46        print(“\n再见!”)
47        break
48    except Exception as e:
49        print(f“抱歉,出现了一个错误:{str(e)}”)

小贴士

  1. API密钥需要自行在相应平台申请,通常免费额度就够用了

  2. 实际应用中最好添加错误重试机制

  3. 可以考虑把API密钥存在配置文件中,而不是直接写在代码里

进阶优化建议

  1. 添加语音识别和语音合成功能

  2. 接入更多API,如翻译、地图、日程等

  3. 使用更复杂的NLP算法来理解用户意图

  4. 添加GUI界面,让交互更友好

小伙伴们,今天我们的Python智能助手更强大了!它不仅能聊天,还能查天气、看新闻、设提醒,是不是很酷?记得克隆代码下来自己试试,调试过程中遇到问题别忘了看看文档或在评论区问我哦。祝大家玩得开心,Python学习节节高!


家居设计师茉莉
爱家居、爱设计!
 最新文章