我用这个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(“机器人: 别担心,事情总会变好的~”)
注意事项
ChatterBot需要一定的训练时间,第一次运行可能比较慢
数据库文件会随着对话累积变大,定期清理很重要
中文支持可能不如英文完善,需要更多的训练数据
实践小任务
试着给机器人添加更多自定义对话
实现一个保存对话历史的功能
给机器人添加特定领域(如美食、旅游)的专业知识
小伙伴们,今天的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 “请告诉我具体的提醒时间(比如: 14:30)和提醒内容”
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)}”)
小贴士
API密钥需要自行在相应平台申请,通常免费额度就够用了
实际应用中最好添加错误重试机制
可以考虑把API密钥存在配置文件中,而不是直接写在代码里
进阶优化建议
添加语音识别和语音合成功能
接入更多API,如翻译、地图、日程等
使用更复杂的NLP算法来理解用户意图
添加GUI界面,让交互更友好
小伙伴们,今天我们的Python智能助手更强大了!它不仅能聊天,还能查天气、看新闻、设提醒,是不是很酷?记得克隆代码下来自己试试,调试过程中遇到问题别忘了看看文档或在评论区问我哦。祝大家玩得开心,Python学习节节高!