Files
django-vue3-admin-gd/chat/services/chat_service.py
2025-07-17 23:45:55 +08:00

82 lines
2.8 KiB
Python

# LangChain集成示例
from sqlalchemy.orm import Session
from datetime import datetime
from models.ai import ChatConversation, ChatMessage, MessageType
class ChatDBService:
@staticmethod
def get_or_create_conversation(db: Session, conversation_id: int | None, user_id: int, model: str, content: str) -> ChatConversation:
if not conversation_id:
print(conversation_id, 'conversation_id')
conversation = ChatConversation(
title=content,
user_id=user_id,
role_id=None,
model_id=None, # 需根据实际模型id调整
model=model,
system_message=None,
temperature=0.7,
max_tokens=2048,
max_contexts=10,
create_time=datetime.now(),
update_time=datetime.now(),
is_deleted=False
)
db.add(conversation)
db.commit()
db.refresh(conversation)
return conversation
else:
conversation = db.query(ChatConversation).get(conversation_id)
if not conversation:
raise ValueError("无效的conversation_id")
return conversation
@staticmethod
def add_message(db: Session, conversation: ChatConversation, user_id: int, content: str) -> ChatMessage:
message = ChatMessage(
conversation_id=conversation.id,
user_id=user_id,
role_id=None,
model=conversation.model,
model_id=conversation.model_id,
type=MessageType.USER,
reply_id=None,
content=content,
use_context=True,
segment_ids=None,
create_time=datetime.now(),
update_time=datetime.now(),
is_deleted=False
)
db.add(message)
db.commit()
return message
@staticmethod
def insert_ai_message(db: Session, conversation, user_id: int, content: str, model: str):
from datetime import datetime
from models.ai import MessageType
message = ChatMessage(
conversation_id=conversation.id,
user_id=user_id,
role_id=None,
model=model,
model_id=conversation.model_id,
type=MessageType.ASSISTANT,
reply_id=None,
content=content,
use_context=True,
segment_ids=None,
create_time=datetime.now(),
update_time=datetime.now(),
is_deleted=False
)
db.add(message)
db.commit()
@staticmethod
def get_history(db: Session, conversation_id: int) -> list[ChatMessage]:
return db.query(ChatMessage).filter_by(conversation_id=conversation_id).order_by(ChatMessage.id).all()