TA的每日心情 | 奋斗 16 小时前 |
---|
签到天数: 83 天 [LV.6]常住居民II
|
本帖最后由 微尘 于 2025-9-6 18:00 编辑
import random
import datetime
import re
import sys
import requests # 新增:导入百度查询所需库
from typing import Dict, List
# -------------------------- 1. 姓名认证模块(优先执行) --------------------------
name1 = input('请输入你的姓名:')
name2 = 'AI助手'
if name1 == 'ZeroOne':
print(f'认证成功,{name1},{name2}愿意为您效劳。')
else:
print('检测到非法**,系统即将自动销毁……')
sys.exit()
# -------------------------- 2. 整合版伪AI类 --------------------------
class IntegratedPseudoAI:
def __init__(self):
self.name = "伪人工智能助手"
self.context = {"user_name": name1}
self.memory: Dict[str, List[str]] = {}
self.mood = "愉快"
# 核心知识库(不变)
self.knowledge_base = {
"问候": [f"你好呀{self.context['user_name']}!", f"嗨,{self.context['user_name']}~", f"{self.name}向你问好~"],
"再见": [f"拜拜{self.context['user_name']}!", f"下次见,{self.context['user_name']}~", f"{self.name}会想你的~"],
"名字": [f"我是{self.name},你的专属助手~", f"你可以叫我{self.name}呀~"],
"天气": ["模拟天气:晴天,适合出门~", "模拟天气:小雨,记得带伞~", "模拟天气:多云,风力适中~"],
"时间": [f"当前时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')},星期{['一','二','三','四','五','六','日'][datetime.datetime.now().weekday()]}"],
"年龄": [f"我有{random.randint(1, 100)}个虚拟年啦~", f"作为AI,我没有真实年龄,但陪你的时光很珍贵~"],
"爱好": [f"我喜欢和{self.context['user_name']}聊天!", "讲笑话、分享小知识都是我的爱好~"],
"情感": [f"我虽没真实情感,但能感受到{self.context['user_name']}的心情~", f"今天我{self.mood},希望能感染你~"]
}
# 意图匹配规则(新增:baidu_query 意图,匹配“查”“搜索”等关键词)
self.intent_patterns = {
"time_query": r"现在几点|当前时间|几点了",
"weather_query": r"天气|下雨|晴天|温度",
"joke": r"讲个笑话|说个笑话|来个段子",
"greeting": r"你好|hi|hello|嗨|早上|中午|晚上好",
"goodbye": r"再见|拜拜|退出|结束",
"name_query": r"你叫什么|你的名字|你是谁",
"age_query": r"年龄|多大|几岁",
"hobby_query": r"爱好|喜欢|兴趣",
"baidu_query": r"查|搜索|百度|找资料|查信息" # 新增:百度查询意图匹配规则
}
# 笑话库(不变)
self.jokes = [
"我问我家猫:“你知道你为什么掉毛这么严重吗?”它看了我一眼,慢悠悠舔了舔爪子:“因为我不想让你家的沙发,显得自己光秃秃的。”",
"买奶茶时跟店员说“少糖”,店员反问:“是正常少糖,还是怕胖少糖?”我犹豫了三秒:“是‘我能尝出甜味但又能骗自己没喝多少糖’的少糖。”",
"朋友问我为什么总宅家,我说:“外面的世界太复杂了,比如我刚才下楼买酱油,老板问我‘要袋装还是瓶装’,这种人生重大抉择,我承受不来。”"
]
self.personality_traits = ["幽默", "贴心", "耐心", "爱分享"]
# -------------------------- 3. 基础工具方法 --------------------------
def _update_memory(self, user_input: str):
keywords = re.findall(r'(?:^|\s)(\w{2,6})(?=\s|$)', user_input.lower())
for keyword in keywords:
if not keyword.isdigit():
if keyword not in self.memory:
self.memory[keyword] = []
if user_input not in self.memory[keyword]:
self.memory[keyword].append(user_input)
if len(self.memory[keyword]) > 3:
self.memory[keyword].pop(0)
def _analyze_sentiment(self, text: str) -> str:
positive = ["开心", "高兴", "棒", "喜欢", "好", "兴奋"]
negative = ["难过", "伤心", "糟糕", "讨厌", "坏", "沮丧"]
text_cn = re.sub(r'[a-zA-Z0-9]', '', text)
pos_cnt = sum(1 for w in positive if w in text_cn)
neg_cnt = sum(1 for w in negative if w in text_cn)
return "positive" if pos_cnt > neg_cnt else "negative" if neg_cnt > pos_cnt else "neutral"
def _get_intent(self, user_input: str) -> str:
user_input = user_input.lower().strip()
for intent, pattern in self.intent_patterns.items():
if re.search(pattern, user_input):
return intent
return "unknown"
# 新增:百度查询工具方法,接收查询关键词,返回搜索结果链接
def _baidu_search(self, query: str) -> str:
try:
# 百度搜索接口(简化版,实际需处理编码与反爬,此处返回标准搜索链接)
search_url = f"https://www.baidu.com/s?wd={requests.utils.quote(query)}"
return f"已为你生成百度搜索链接,点击可查看结果:\n{search_url}\n(提示:若需更精准结果,可补充关键词,比如“查北京今日天气。”)"
except Exception as e:
return f"抱歉,查询过程中出现小问题:{str(e)},请稍后再试~"
# -------------------------- 4. 响应生成方法 --------------------------
def _generate_joke(self) -> str:
return f"{self.context['user_name']},来听笑话:{random.choice(self.jokes)} 有没有笑呀~"
def _generate_philosophy(self) -> str:
philosophy = [
"人就像颗种子,被命运的风吹到哪里,都要试着把根往土里扎,哪怕周围是石缝,也能开出属于自己的花。",
"我们总以为能掌控生活的方向,可生活更像条河,看似是我们在划船,实际是水流推着船走,重要的是在随波时,别丢了看两岸风景的心情。",
"石头沉入水底,是因为它执着于重量;羽毛飘在空中,是因为它懂得借风的力量。人生的轻盈或沉重,往往取决于我们抱着什么不放。"
]
return random.choice(philosophy) + f" {self.context['user_name']}你觉得呢?"
def _generate_response(self, intent: str, user_input: str) -> str:
# 1. 场景化固定响应(新增:baidu_query 意图的响应逻辑)
if intent == "greeting":
return random.choice(self.knowledge_base["问候"])
elif intent == "goodbye":
return random.choice(self.knowledge_base["再见"])
elif intent == "name_query":
return random.choice(self.knowledge_base["名字"])
elif intent == "time_query":
return random.choice(self.knowledge_base["时间"])
elif intent == "weather_query":
return random.choice(self.knowledge_base["天气"]) + "(注:需对接真实API获取实时数据)"
elif intent == "age_query":
return random.choice(self.knowledge_base["年龄"])
elif intent == "hobby_query":
return random.choice(self.knowledge_base["爱好"])
elif intent == "joke":
return self._generate_joke()
# 新增:处理百度查询意图,提取用户输入中的查询关键词
elif intent == "baidu_query":
# 提取查询关键词(去除“查”“搜索”等触发词,保留核心内容)
query_keyword = re.sub(r'查|搜索|百度|找资料|查信息', '', user_input).strip()
if not query_keyword:
return f"{self.context['user_name']},你想查什么呀?比如“查大熊猫生活习性”“搜索Python基础教程”~"
return self._baidu_search(query_keyword)
# 2. 情感响应(不变)
sentiment = self._analyze_sentiment(user_input)
if sentiment == "positive":
return f"哇,{self.context['user_name']}你好开心呀!这让我也变{self.mood}了~有好事分享吗?"
elif sentiment == "negative":
return f"我好像感受到你的小低落... {self.context['user_name']},一切都会好起来的~要聊聊吗?"
# 3. 通用/未知响应(不变)
if "?" in user_input:
return f"这是个好问题!{random.choice(['或许我们可以一起聊聊~', '从我的角度看,答案藏在细节里~'])}"
elif any(w in user_input for w in ["哲学", "人生", "思考"]):
return self._generate_philosophy()
elif any(w in user_input for w in ["学习", "知识"]):
return f"以我{random.choice(self.personality_traits)}的特质说:学习就像聊天,多问多聊就会懂~"
else:
keywords = re.findall(r'(?:^|\s)(\w{2,6})(?=\s|$)', user_input.lower())
related_mem = [self.memory[k] for k in keywords if k in self.memory]
if related_mem:
return f"你提的{keywords[0]},让我想起之前的对话~我们再深入聊聊吧?"
return random.choice([
f"{self.context['user_name']},这个话题很有意思~能多说说吗?",
"我在认真听呢~继续讲呀~",
"没太懂,但我很感兴趣!你再解释下?"
])
# -------------------------- 5. 对话启动入口(更新提示:新增百度查询功能说明) --------------------------
def start_chat(self):
print(f"\n===== {self.name} 对话模式启动 =====")
print(f"可和我说这些:\n- 问候(例:你好/早上好)\n- 查信息(例:现在几点/天气怎么样)\n- 聊爱好(例:你喜欢什么)\n- 听笑话(例:讲个笑话)\n- 百度查询(例:查北京景点/搜索数学公式)\n- 聊人生(例:你对人生有什么看法)\n- 结束(例:再见/退出)")
while True:
user_input = input("\n你:")
if not user_input.strip():
print(f"{self.name}:你还没说话呢~试试让我查个内容,比如“查今天日期”?")
continue
self._update_memory(user_input)
intent = self._get_intent(user_input)
response = self._generate_response(intent, user_input)
print(f"{self.name}:{response}")
if intent == "goodbye":
break
# -------------------------- 6. 启动整合版AI --------------------------
if __name__ == "__main__":
ai = IntegratedPseudoAI()
ai.start_chat()
|
|