ai回复达人

This commit is contained in:
wanjia 2025-05-30 15:56:40 +08:00
parent 1adebac403
commit f8582fd2e6
7 changed files with 63 additions and 66 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 5.2.1 on 2025-05-30 07:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('knowledge_base', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='knowledgebase',
name='user_id',
field=models.BigIntegerField(verbose_name='创建者ID'),
),
]

View File

@ -16,7 +16,7 @@ class KnowledgeBase(models.Model):
]
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user_id = models.UUIDField(verbose_name='创建者ID')
user_id = models.BigIntegerField(verbose_name='创建者ID')
name = models.CharField(max_length=100, unique=True, verbose_name='知识库名称')
desc = models.TextField(verbose_name='知识库描述', null=True, blank=True)
type = models.CharField(

View File

@ -0,0 +1,7 @@
# 配置Django启动时加载Celery
from __future__ import absolute_import, unicode_literals
# 确保celery app在Django启动时被加载
from .celery import app as celery_app
__all__ = ('celery_app',)

View File

@ -1,54 +1,10 @@
import os
from celery import Celery
from django.conf import settings
import logging
# 设置Django默认settings模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'daren.settings')
# 创建日志记录器
logger = logging.getLogger(__name__)
# 在应用启动时检查Redis连接
def check_redis_connection():
try:
import redis
from django.conf import settings
# 从CELERY_BROKER_URL解析Redis连接信息
broker_url = settings.CELERY_BROKER_URL
host = '127.0.0.1' # 默认
port = 6379 # 默认
db = 0 # 默认
# 简单解析broker_url (格式如: redis://127.0.0.1:6379/0)
if broker_url.startswith('redis://'):
parts = broker_url[8:].split('/')
if len(parts) > 1:
db = int(parts[1])
host_port = parts[0].split(':')
host = host_port[0]
if len(host_port) > 1:
port = int(host_port[1])
# 尝试连接
r = redis.Redis(host=host, port=port, db=db, socket_timeout=10)
r.ping()
logger.info(f"成功连接到Redis服务器: {host}:{port}")
return True, None
except Exception as e:
error_msg = f"无法连接到Redis服务器: {str(e)}"
logger.error(error_msg)
return False, error_msg
# 检查Redis连接
redis_ok, redis_error = check_redis_connection()
if not redis_ok:
logger.critical(f"无法启动CeleryRedis连接失败: {redis_error}")
print(f"\n\n[Celery错误] Redis连接失败: {redis_error}\n")
print("请确保Redis服务正在运行并且配置正确。如果问题仍然存在请尝试修改settings.py中的CELERY_BROKER_URL。\n\n")
# 创建Celery应用
app = Celery('daren')

View File

@ -141,9 +141,9 @@ AUTH_PASSWORD_VALIDATORS = [
# Internationalization
# https://docs.djangoproject.com/en/5.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
@ -243,8 +243,7 @@ SIMPLE_JWT = {
API_BASE_URL = 'http://81.69.223.133:48329'
SILICON_CLOUD_API_KEY = 'sk-xqbujijjqqmlmlvkhvxeogqjtzslnhdtqxqgiyuhwpoqcjvf'
GMAIL_WEBHOOK_URL = 'https://ccf7-180-159-100-165.ngrok-free.app/api/gmail/webhook/'
GMAIL_WEBHOOK_URL = 'https://7403-180-159-100-165.ngrok-free.app/api/gmail/webhook/'
APPLICATION_ID = 'd5d11efa-ea9a-11ef-9933-0242ac120006'
@ -260,11 +259,12 @@ GOOGLE_CLOUD_PROJECT_ID = 'knowledge-454905'
# 主题名称
GMAIL_PUBSUB_TOPIC = 'gmail-watch-topic'
# 设置允许使用Google Pub/Sub的应用列表
INSTALLED_APPS += ['google.cloud.pubsub']
# Celery配置
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' # 使用具体IP地址而不是localhost
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' # 使用具体IP地址而不是localhost
CELERY_BROKER_URL = 'redis://localhost:6379/0' # 使用Redis作为消息代理
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 使用Redis存储任务结果
CELERY_ACCEPT_CONTENT = ['json'] # 指定接受的内容类型
CELERY_TASK_SERIALIZER = 'json' # 任务序列化和反序列化使用JSON
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化使用JSON
@ -276,15 +276,12 @@ CELERY_WORKER_MAX_TASKS_PER_CHILD = 500 # 工作进程处理多少个任务后
# Windows平台Celery特定设置
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True # 启动时尝试重新连接
CELERY_BROKER_CONNECTION_MAX_RETRIES = 10 # 最大重试次数
CELERY_WORKER_CONCURRENCY = 1 # Windows下使用单进程模式避免权限错误
CELERY_TASK_ALWAYS_EAGER = False # 不要在Django主进程中执行任务
CELERY_BROKER_HEARTBEAT = 0 # 禁用心跳检测解决Windows的问题
CELERY_BROKER_CONNECTION_TIMEOUT = 30 # 设置连接超时时间
CELERY_REDIS_SOCKET_TIMEOUT = 30 # Redis套接字超时
CELERY_REDIS_SOCKET_CONNECT_TIMEOUT = 30 # Redis连接超时
FEISHU_APP_ID = "cli_a5c97daacb9e500d"
FEISHU_APP_SECRET = "fdVeOCLXmuIHZVmSV0VbJh9wd0Kq1o5y"
FEISHU_DEFAULT_APP_TOKEN = "XYE6bMQUOaZ5y5svj4vcWohGnmg"
FEISHU_DEFAULT_ACCESS_TOKEN = "u-fK0HvbXVte.G2xzYs5oxV6k1nHu1glvFgG00l0Ma24VD"

View File

@ -6,18 +6,27 @@ It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/
"""
import os
import pathlib
from django.core.wsgi import get_wsgi_application
import django
# 首先设置 Django 设置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'daren.settings')
django.setup() # 添加这行来初始化 Django
# 确保logs文件夹存在
BASE_DIR = pathlib.Path(__file__).resolve().parent.parent
logs_dir = os.path.join(BASE_DIR, 'logs')
if not os.path.exists(logs_dir):
os.makedirs(logs_dir)
# 然后再导入其他模块
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator
from apps.chat.routing import websocket_urlpatterns
from apps.common.middlewares import TokenAuthMiddleware
application = get_wsgi_application()
# 使用TokenAuthMiddleware代替AuthMiddlewareStack
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AllowedHostsOriginValidator(
TokenAuthMiddleware(
URLRouter(websocket_urlpatterns)
)
),
})

View File

@ -0,0 +1,10 @@
本期节目内容简介
在参加各类比赛时,肯定会遇到竞争对手。英语单词 rival、opponent、competitor 和 contestant 的含义相似,都可以用来指“与他人之间存在竞争关系的人或团队”。在本集《你问我答》节目中,我们将通过和体育比赛有关的实例来为大家阐释这四个近义词之间的区别和用法。
欢迎你加入并和我们一起讨论英语学习的方方面面。请通过微博“BBC英语教学”或邮件与我们取得联系。我们的邮箱地址是 questions.chinaelt@bbc.co.uk。
文字稿
(关于台词的备注: 请注意这不是广播节目的逐字稿件。本文稿可能没有体现录制、编辑过程中对节目做出的改变。)
Feifei
大家好,欢迎收听 BBC 英语教学的《你问我答》节目,我是冯菲菲。每集节目中,我们会回答大家在英语学习时遇到的一个问题。本集的问题来自 Adela。我们来听一下她的问题。