微信机器人客服-通过WXAUTO+本地部署的DeepSeek轻松实现
一、微信消息获取+自动答复代码。二、大模型自动答复消息并返回。
·
实现效果
一、微信消息获取+自动答复代码
import time
from wxautox import WeChat
import DeepSeek
if __name__ == '__main__':
wx = WeChat()
listen_list = [
'阿芳-BXL'
]
for i in listen_list:
wx.AddListenChat(who=i, savepic=True)
# 持续监听消息,并且收到消息后回复“收到”
wait = 1 # 设置1秒查看一次是否有新消息
while True:
msgs = wx.GetListenMessage()
for chat in msgs:
who = chat.who # 获取聊天窗口名(人或群名)
one_msgs = msgs.get(chat) # 获取消息内容
# 回复收到
for msg in one_msgs:
msgtype = msg.type # 获取消息类型
content = msg.content # 获取消息内容,字符串类型的消息内容
print(f'【{who}】:{content}')
# ===================================================
# 处理消息逻辑(如果有)
#
# 处理消息内容的逻辑每个人都不同,按自己想法写就好了,这里不写了
#
# ===================================================
if msgtype == 'friend':
reply = DeepSeek.start_model(content)
chat.SendMsg(reply) # 回复收到
time.sleep(wait)
二、大模型自动答复消息并返回
import json
import os
import re
import time
from typing import List, Dict, Any
import requests
from requests.exceptions import RequestException
class ModelHistory:
def __init__(self, role: str = "", content: str = ""):
self.role = role
self.content = content
def to_dict(self) -> Dict[str, str]:
return {"role": self.role, "content": self.content}
@classmethod
def from_dict(cls, data: Dict[str, str]) -> 'ModelHistory':
return cls(role=data.get("role", ""), content=data.get("content", ""))
def start_model(user_question: str) -> str: # 修改返回值类型为 str
BASE_URL = "http://localhost:11434/v1/"
API_KEY = "ollama" # required but ignored
# Initialize HTTP client with timeouts
session = requests.Session()
session.timeout = (10, 30) # (connect, read) timeouts in seconds
# Read knowledge file
file_path = "knowledge.txt"
model_history_list = []
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
if content:
model_history_list = [ModelHistory.from_dict(item) for item in json.loads(content)]
except (IOError, json.JSONDecodeError) as e:
print(f"Error reading history file: {e}")
# Prepare messages
messages = []
# Get knowledge from word files
knowledge = get_content_by_dir("src/main/resources/word_files")
# Add system message with knowledge
messages.append({
"role": "user",
"content": f"你的角色是:问题答复专家。\n你的任务是:结合已知知识和上下文回答问题。\n已知知识:{knowledge}\n根据以上要求,我的问题是:{user_question}"
})
# Add user question to history
model_history_list.append(ModelHistory(role="user", content=user_question))
# Prepare request body
request_body = {
"messages": messages,
"model": "deepseek-16b-custom:latest",
"stream": True,
"temperature": 0.0
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
try:
# Make the request with streaming
response = session.post(
f"{BASE_URL}chat/completions",
json=request_body,
headers=headers,
stream=True
)
response.raise_for_status()
temp_res = ""
out_res = ""
for line in response.iter_lines():
if line:
decoded_line = line.decode('utf-8')
if decoded_line.startswith('data: ') and '[DONE]' not in decoded_line:
try:
data = json.loads(decoded_line[6:]) # Remove 'data: ' prefix
if 'choices' in data:
for choice in data['choices']:
if 'delta' in choice and 'content' in choice['delta']:
content = choice['delta']['content']
# print(content, end='', flush=True)
temp_res += content
out_res += content
# Check for sentence end
mark_1 = temp_res.find('。')
if mark_1 > 0:
start_tts(temp_res[:mark_1 + 1])
temp_res = temp_res[mark_1 + 1:]
except json.JSONDecodeError as e:
print(f"Error decoding JSON: {e}")
# Speak any remaining text
if temp_res:
start_tts(temp_res)
# Process and save the response to history
model_history = ModelHistory(role="assistant", content=out_res)
# Remove <think> tags
regex = r"<think>[\s\S]*?</think>"
model_history.content = re.sub(regex, "", model_history.content)
model_history_list.append(model_history)
# Save history back to file
try:
with open(file_path, 'w', encoding='utf-8') as f:
json.dump([item.to_dict() for item in model_history_list], f, indent=2, ensure_ascii=False)
except IOError as e:
print(f"Error writing history file: {e}")
# 返回完整的答复内容
return out_res
except RequestException as e:
print(f"Request failed: {e}")
return "" # 返回空字符串表示失败
def get_content_by_dir(directory: str) -> str:
"""Helper function to get content from files in a directory"""
# Implement this based on your Java version
return ""
def start_tts(text: str) -> None:
"""Helper function to start text-to-speech"""
# Implement this based on your Java version
pass
if __name__ == "__main__":
response = start_model("你是谁?")
print("\n完整答复:", response)
[
{
"role": "user",
"content": "推荐几款车"
},
{
"role": "assistant",
"content": " 作为问题答复专家,我可以为您提供一些建议,但请注意,这些信息可能会随时间而变化,因为汽车市场不断更新,新款车型层出不穷。以下是一些不同类型的车辆推荐,以满足不同的需求和偏好:\n\n1. **经济型城市通勤车**:\n - 丰田雅力士(Toyota Yaris):适合城市驾驶,油耗低,性价比高。\n - 本田飞度(Honda Fit/Jazz):空间利用率高,操控灵活,适合年轻消费者。\n\n2. **家庭实用型SUV**:\n - 马自达CX-5:提供良好的驾驶体验和实用性,适合家庭使用。\n - 斯巴鲁森林人(Subaru Forester):以其全轮驱动系统和耐用性著称。\n\n3. **豪华轿车**:\n - 奔驰E级:提供高端的舒适性和先进的技术配置。\n - 宝马5系:运动性能与豪华感的完美结合,适合商务和家庭使用。\n\n4. **电动车/混合动力车**:\n - 特斯拉Model 3:电动驱动,高性能,智能化程度高,是环保出行的优选。\n - 丰田普锐斯(Prius):作为混合动力车型的先驱之一,以其燃油效率和经济性著称。\n\n5. **越野能力强的SUV**:\n - Jeep牧马人(Jeep Wrangler):强大的越野性能和坚固的车身设计。\n - 路虎卫士(Land Rover Defender):结合了豪华与耐用性,适合各种复杂路况。\n\n请根据您的具体需求、预算以及对车辆性能的要求来选择合适的车型。在做出决定之前,建议您进行试驾,并咨询专业人士以获取更多详细信息。"
},
{
"role": "user",
"content": "推荐几款车"
},
{
"role": "assistant",
"content": " 作为一个AI,我无法提供实时的市场数据或个人建议,但我可以根据一些通用的标准和趋势来推荐几款车型。以下是一些不同类型的车辆推荐,适用于不同的需求和偏好:\n\n1. **城市通勤用车**:\n - **小型车/紧凑型车**:这类车型通常油耗较低,适合在城市中穿梭,如丰田雅力士(Yaris)、本田飞度(Honda Fit)。\n - **电动车**:对于环保意识较强的用户,推荐特斯拉Model 3或比亚迪汉EV等电动车型,它们提供高效的能源利用和低运行成本。\n\n2. **家庭用车**:\n - **中型SUV**:这类车辆空间宽敞,适合家庭出游,如丰田RAV4、本田CR-V。\n - **多功能车(MPV)**:如果需要更多座位或更大的载物空间,可以考虑奥德赛(Honda Odyssey)或大众夏朗(Volkswagen Touran)等车型。\n\n3. **越野/冒险用车**:\n - **紧凑型SUV**:如Jeep自由侠(Jeep Renegade)或铃木维特拉(Suzuki Vitara),适合轻度越野和日常使用。\n - **硬派越野车**:对于极端的越野环境,推荐吉普牧马人(Jeep Wrangler)或路虎卫士(Land Rover Defender)。\n\n4. **豪华车型**:\n - **大型轿车/行政级轿车**:如奔驰S级、宝马7系和奥迪A8等,提供高端舒适性和先进技术。\n - **跑车**:对于追求速度和激情的用户,推荐保时捷911或奥迪R8等高性能跑车。\n\n5. **经济型车辆**:\n - **入门级轿车/掀背车**:如雪佛兰科鲁兹(Chevrolet Cruze)或福特福克斯(Ford Focus),提供良好的燃油效率和性价比。\n\n请记住,选择汽车时应该考虑个人的预算、驾驶习惯、用车需求以及对车辆性能的要求。建议在做出最终决定前,进行充分的市场调研,并试驾感兴趣的车型以确保满意。"
},
{
"role": "user",
"content": "夏季为什么吃冰棒"
},
{
"role": "assistant",
"content": " 夏季吃冰棒的原因有以下几点:\n\n1. **降温解暑**:在炎热的夏天,人体会通过出汗来散热以降低体温。吃冰棒可以帮助迅速降低口腔和食道的温度,从而给人一种凉爽的感觉,有助于缓解高温带来的不适感。\n\n2. **补充水分**:夏季人们容易因出汗而流失大量水分,冰棒通常含有一定比例的水分,可以在享受清凉的同时帮助补充身体所需的水分。\n\n3. **口感满足**:冰棒的冷冻质地和甜味可以给人带来即时的口感满足感,这种感觉在高温下尤为受欢迎。\n\n4. **方便携带**:与冷饮相比,冰棒通常更容易携带,适合户外活动或旅行时食用。\n\n5. **成本较低**:相比于其他冷饮(如冰淇淋),冰棒通常价格更实惠,对于预算有限的人来说是一个经济实惠的选择。\n\n6. **口味多样**:市场上有各种各样的冰棒口味和类型,可以满足不同人的口味偏好。\n\n综上所述,夏季吃冰棒是一种既能够带来即时清凉感,又能够在高温环境中帮助补充水分、满足口感需求的行为。"
},
{
"role": "user",
"content": "怎么学习英文"
},
{
"role": "assistant",
"content": " 学习英语可以通过以下几个步骤来进行:\n\n1. **基础语法和词汇**:首先,你需要掌握基本的英语语法规则和一定数量的单词。这可以通过使用教科书、在线课程或应用程序来实现。\n\n2. **听力训练**:提高你的听力技能是非常重要的,因为这是理解口语的基础。你可以通过听英文歌曲、观看英文电影或电视节目、收听广播等方式来进行练习。\n\n3. **发音练习**:准确的发音可以帮助你更好地理解和被他人理解。可以通过跟读磁带、使用语音识别软件来改善你的发音。\n\n4. **阅读材料**:广泛阅读英文书籍、报纸、杂志和在线文章,这有助于提高你的阅读理解能力。\n\n5. **写作练习**:尝试用英语写日记、短文或电子邮件,这可以帮助你练习组织思想并使用新学的词汇和语法结构。\n\n6. **语言交换**:找一个英语母语的伙伴进行语言交换,这样可以在实际对话中练习你的口语技能。\n\n7. **参加课程**:如果可能的话,报名参加正规的英语课程或在线课程,这可以提供系统的学习计划和专业的指导。\n\n8. **使用技术工具**:利用各种应用程序和在线资源来辅助学习,如单词卡片应用、语言学习网站等。\n\n9. **持续实践**:语言技能需要不断练习才能提高。设定每天的学习时间,并坚持下去。\n\n10. **评估进度**:定期进行自我测试,了解自己的进步情况,并根据需要调整学习计划。\n\n通过这些步骤的持续努力,你可以逐步提高你的英语水平。记住,学习一门新语言是一个长期的过程,耐心和毅力是非常重要的。"
},
{
"role": "user",
"content": "推荐几款车"
},
{
"role": "assistant",
"content": " 作为一个AI,我无法提供实时的市场信息或个人建议,但我可以根据一些普遍的标准和趋势来推荐车型。以下是几个不同类型的车辆推荐,适用于不同的需求和偏好:\n\n1. **城市通勤者**:\n - **小型车/紧凑型车**:这类车辆通常油耗较低,适合在城市中穿梭,如丰田雅力士(Toyota Yaris)、本田飞度(Honda Fit)或大众Polo。\n\n2. **家庭用车**:\n - **中型SUV**:提供更大的空间和更好的载人能力,如丰田RAV4、本田CR-V或福特Escape。\n\n3. **环保意识者**:\n - **电动车/混合动力车**:如果你关心环境并希望减少碳排放,可以考虑特斯拉Model 3、日产聆风(Nissan Leaf)或丰田普锐斯(Toyota Prius)。\n\n4. **性能爱好者**:\n - **运动型轿车/跑车**:对于追求速度和操控感的驾驶者,推荐宝马M系列、梅赛德斯-奔驰AMG车型或保时捷911。\n\n5. **豪华车消费者**:\n - **大型豪华SUV**:如果你需要高端舒适性和先进技术,可以考虑奥迪Q7、宝马X5或路虎揽胜(Land Rover Range Rover)。\n\n请记住,选择车辆时还应考虑预算、维护成本、保险费用和个人需求等因素。建议在做出决定前进行充分的市场调研和试驾体验。"
},
{
"role": "user",
"content": "夏季为什么吃冰棒"
},
{
"role": "assistant",
"content": " 夏季吃冰棒的原因有以下几点:\n\n1. **降温解暑**:在炎热的夏天,人体会通过出汗来散热以降低体温。吃冰棒可以帮助迅速降低口腔和食道的温度,从而给人一种凉爽的感觉,有助于缓解高温带来的不适感。\n\n2. **补充水分**:夏季人们容易因出汗而流失大量水分,冰棒通常含有一定比例的水分,可以在享受清凉的同时帮助补充身体所需的水分。\n\n3. **口感满足**:冰棒的冷冻质地和甜味可以给人带来即时的口感满足感,这种感觉在高温下尤为受欢迎。\n\n4. **方便携带**:与冷饮相比,冰棒通常更容易携带,适合户外活动或旅行时食用。\n\n5. **成本较低**:相比于其他冷饮(如冰淇淋),冰棒通常价格更实惠,对于预算有限的人来说是一个经济实惠的选择。\n\n6. **口味多样**:市场上有各种各样的冰棒口味和类型,可以满足不同人的口味偏好。\n\n综上所述,夏季吃冰棒是一种既能够带来即时清凉感,又能够在高温环境中帮助补充水分、满足口感需求的行为。"
},
{
"role": "user",
"content": "怎么学习英文"
},
{
"role": "assistant",
"content": " 学习英语可以通过以下几个步骤来进行:\n\n1. **基础语法和词汇**:首先,你需要掌握基本的英语语法规则和一定数量的单词。这可以通过使用教科书、在线课程或应用程序来实现。\n\n2. **听力训练**:提高你的听力技能是非常重要的,因为这是理解口语的基础。你可以通过听英文歌曲、观看英文电影或电视节目、收听广播等方式来进行练习。\n\n3. **发音练习**:准确的发音可以帮助你更好地理解和被他人理解。可以通过跟读磁带、使用语音识别软件来改善你的发音。\n\n4. **阅读材料**:广泛阅读英文书籍、报纸、杂志和在线文章,这有助于提高你的阅读理解能力。\n\n5. **写作练习**:尝试用英语写日记、短文或电子邮件,这可以帮助你练习组织思想并使用新学的词汇和语法结构。\n\n6. **语言交换**:找一个英语母语的伙伴进行语言交换,这样可以在实际对话中练习你的口语技能。\n\n7. **参加课程**:如果可能的话,报名参加正规的英语课程或在线课程,这可以提供系统的学习计划和专业的指导。\n\n8. **使用技术工具**:利用各种应用程序和在线资源来辅助学习,如单词卡片应用、语言学习网站等。\n\n9. **持续实践**:语言技能需要不断练习才能提高。设定每天的学习时间,并坚持下去。\n\n10. **评估进度**:定期进行自我测试,了解自己的进步情况,并根据需要调整学习计划。\n\n通过这些步骤的持续努力,你可以逐步提高你的英语水平。记住,学习一门新语言是一个长期的过程,耐心和毅力是非常重要的。"
}
]

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)