# Chat-Room AI集成文档
## 📋 概述
Chat-Room集成了智谱AI的GLM-4-Flash模型,为用户提供智能对话功能。AI助手可以在群聊中响应@AI消息和关键词,也支持私聊模式,提供上下文感知的智能回复。
## 🤖 AI功能架构
### AI集成架构图
```mermaid
graph TB
subgraph 用户交互层
USER[用户输入]
GROUP_CHAT["群聊@AI"]
PRIVATE_CHAT[私聊AI]
KEYWORDS[关键词触发]
end
subgraph AI处理层
AI_HANDLER[AI处理器
AIHandler]
TRIGGER[触发判断器
TriggerDetector]
CONTEXT[上下文管理器
ContextManager]
end
subgraph 智谱AI服务
API[智谱AI API
GLM-4-Flash]
MODEL[语言模型]
end
subgraph 数据存储层
CONTEXT_DB[上下文存储
SQLite]
CONFIG[AI配置
YAML]
end
USER --> GROUP_CHAT
USER --> PRIVATE_CHAT
USER --> KEYWORDS
GROUP_CHAT --> TRIGGER
PRIVATE_CHAT --> AI_HANDLER
KEYWORDS --> TRIGGER
TRIGGER --> AI_HANDLER
AI_HANDLER --> CONTEXT
AI_HANDLER --> API
API --> MODEL
MODEL --> API
CONTEXT --> CONTEXT_DB
AI_HANDLER --> CONFIG
```
### AI响应流程
```mermaid
sequenceDiagram
participant U as 用户
participant CM as 聊天管理器
participant AI as AI处理器
participant CTX as 上下文管理器
participant API as 智谱AI API
participant DB as 数据库
U->>CM: 发送消息
CM->>AI: 检查是否需要AI响应
AI->>AI: 判断触发条件
alt 需要AI响应
AI->>CTX: 获取对话上下文
CTX->>DB: 查询历史对话
DB-->>CTX: 返回上下文数据
CTX-->>AI: 返回格式化上下文
AI->>API: 发送AI请求
Note over API: 调用GLM-4-Flash模型
API-->>AI: 返回AI回复
AI->>CTX: 更新对话上下文
CTX->>DB: 保存新的上下文
AI->>CM: 发送AI回复消息
CM->>U: 广播AI回复
else 不需要AI响应
AI-->>CM: 跳过AI处理
end
```
## 🔧 AI处理器实现
### 核心AI处理器 (server/ai/ai_handler.py)
```python
class AIHandler:
"""AI处理器核心类"""
def __init__(self, config: dict):
self.config = config
self.client = None
self.context_manager = ContextManager()
self.trigger_detector = TriggerDetector()
self.enabled = config.get('enabled', False)
if self.enabled:
self._init_ai_client()
def _init_ai_client(self):
"""初始化智谱AI客户端"""
from zhipuai import ZhipuAI
api_key = self.config.get('api_key')
if not api_key:
raise AIException("AI API密钥未配置")
self.client = ZhipuAI(api_key=api_key)
def should_respond_to_message(self, message: str, group_id: int, user_id: int) -> bool:
"""判断是否需要AI响应"""
if not self.enabled:
return False
# 私聊AI模式:所有消息都响应
if self._is_private_ai_chat(group_id):
return True
# 群聊模式:检查@AI或关键词
return self.trigger_detector.should_trigger(message)
def generate_ai_response(self, message: str, context: dict) -> str:
"""生成AI回复"""
try:
# 构建对话上下文
conversation_context = self.context_manager.build_context(
user_id=context['user_id'],
group_id=context['group_id'],
current_message=message
)
# 调用智谱AI API
response = self.client.chat.completions.create(
model=self.config.get('model', 'glm-4-flash'),
messages=conversation_context,
max_tokens=self.config.get('max_tokens', 1000),
temperature=self.config.get('temperature', 0.7)
)
ai_reply = response.choices[0].message.content
# 更新对话上下文
self.context_manager.update_context(
user_id=context['user_id'],
group_id=context['group_id'],
user_message=message,
ai_response=ai_reply
)
return ai_reply
except Exception as e:
logger.error(f"AI回复生成失败: {e}")
return "抱歉,我现在无法回复,请稍后再试。"
```
### 触发判断器 (server/ai/trigger_detector.py)
```python
class TriggerDetector:
"""AI触发判断器"""
def __init__(self):
self.at_patterns = ['@AI', '@ai', '@Ai', '@aI']
self.keyword_patterns = [
'AI', 'ai', 'Ai', 'aI',
'人工智能', '智能助手', '机器人',
'AI能', 'AI可以', 'AI帮我',
'请AI', '问AI', '让AI'
]
def should_trigger(self, message: str) -> bool:
"""判断消息是否应该触发AI响应"""
# 检查@AI模式
if self._check_at_patterns(message):
return True
# 检查关键词模式
if self._check_keyword_patterns(message):
return True
return False
def _check_at_patterns(self, message: str) -> bool:
"""检查@AI模式"""
for pattern in self.at_patterns:
if pattern in message:
return True
return False
def _check_keyword_patterns(self, message: str) -> bool:
"""检查关键词模式"""
# 简单的关键词匹配
for keyword in self.keyword_patterns:
if keyword in message:
return True
return False
def extract_ai_message(self, message: str) -> str:
"""提取发给AI的消息内容"""
# 移除@AI标记
for pattern in self.at_patterns:
message = message.replace(pattern, '').strip()
return message
```
### 上下文管理器 (server/ai/context_manager.py)
```python
class ContextManager:
"""AI对话上下文管理器"""
def __init__(self, max_context_length: int = 10):
self.max_context_length = max_context_length
self.system_prompt = self._load_system_prompt()
def build_context(self, user_id: int, group_id: int, current_message: str) -> List[dict]:
"""构建对话上下文"""
context = [{"role": "system", "content": self.system_prompt}]
# 获取历史对话
history = self._get_conversation_history(user_id, group_id)
# 添加历史对话到上下文
for item in history[-self.max_context_length:]:
context.append({"role": "user", "content": item['user_message']})
context.append({"role": "assistant", "content": item['ai_response']})
# 添加当前消息
context.append({"role": "user", "content": current_message})
return context
def update_context(self, user_id: int, group_id: int,
user_message: str, ai_response: str):
"""更新对话上下文"""
from server.database.models import AIConversation
conversation = AIConversation(
user_id=user_id,
group_id=group_id,
user_message=user_message,
ai_response=ai_response,
created_at=datetime.now()
)
conversation.save()
def _load_system_prompt(self) -> str:
"""加载系统提示词"""
return """你是Chat-Room聊天室的AI助手,名字叫"AI助手"。你的特点:
1. 友好、有帮助、专业
2. 回答简洁明了,避免过长的回复
3. 支持中文对话,理解中文语境
4. 可以回答技术问题、提供建议、进行日常对话
5. 如果不确定答案,会诚实地说不知道
6. 保持积极正面的态度
请根据用户的问题提供有帮助的回复。"""
def _get_conversation_history(self, user_id: int, group_id: int) -> List[dict]:
"""获取对话历史"""
from server.database.models import AIConversation
conversations = AIConversation.get_recent_conversations(
user_id=user_id,
group_id=group_id,
limit=self.max_context_length
)
return [
{
'user_message': conv.user_message,
'ai_response': conv.ai_response
}
for conv in conversations
]
```
## 🗄️ AI数据模型
### AI对话记录表
```sql
CREATE TABLE ai_conversations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
group_id INTEGER NOT NULL,
user_message TEXT NOT NULL,
ai_response TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (group_id) REFERENCES chat_groups (id)
);
-- 创建索引优化查询性能
CREATE INDEX idx_ai_conversations_user_group
ON ai_conversations (user_id, group_id, created_at DESC);
```
### AI配置表
```sql
CREATE TABLE ai_settings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
group_id INTEGER,
setting_key TEXT NOT NULL,
setting_value TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (group_id) REFERENCES chat_groups (id)
);
```
## ⚙️ AI配置管理
### 服务器AI配置 (config/server_config.yaml)
```yaml
# AI功能配置
ai:
# 基础配置
enabled: true
api_key: "your-zhipu-ai-api-key"
model: "glm-4-flash"
base_url: "https://open.bigmodel.cn/api/paas/v4/"
# 模型参数
max_tokens: 1000
temperature: 0.7
top_p: 0.9
# 上下文管理
context_window: 10 # 保留最近10轮对话
max_context_tokens: 3000
# 响应控制
response_timeout: 30 # 30秒超时
max_retries: 3
retry_delay: 1
# 触发设置
triggers:
at_patterns: ["@AI", "@ai", "@Ai", "@aI"]
keywords:
- "AI"
- "ai"
- "人工智能"
- "智能助手"
- "机器人"
- "AI能"
- "AI可以"
- "AI帮我"
# 私聊AI设置
private_chat:
enabled: true
group_name_pattern: "private_with_ai"
auto_create: true
# 安全设置
content_filter:
enabled: true
max_message_length: 2000
blocked_keywords: []
# 性能设置
rate_limit:
requests_per_minute: 60
requests_per_hour: 1000
# 日志设置
logging:
log_requests: true
log_responses: true
log_context: false
```
### AI配置管理器
```python
class AIConfig:
"""AI配置管理器"""
def __init__(self, config_path: str):
self.config = self._load_config(config_path)
self.validate_config()
def get_api_key(self) -> str:
"""获取API密钥"""
return self.config.get('api_key', '')
def get_model_config(self) -> dict:
"""获取模型配置"""
return {
'model': self.config.get('model', 'glm-4-flash'),
'max_tokens': self.config.get('max_tokens', 1000),
'temperature': self.config.get('temperature', 0.7),
'top_p': self.config.get('top_p', 0.9)
}
def get_trigger_config(self) -> dict:
"""获取触发配置"""
return self.config.get('triggers', {})
def is_enabled(self) -> bool:
"""检查AI功能是否启用"""
return self.config.get('enabled', False)
def validate_config(self):
"""验证配置有效性"""
if self.is_enabled() and not self.get_api_key():
raise ConfigurationException("AI功能已启用但未配置API密钥")
```
## 🚀 AI功能使用指南
### 配置AI功能
1. **获取智谱AI API密钥**
- 访问 [智谱AI开放平台](https://open.bigmodel.cn/)
- 注册账号并创建API密钥
- 复制API密钥备用
2. **配置服务器**
```bash
# 编辑服务器配置文件
nano config/server_config.yaml
# 设置AI配置
ai:
enabled: true
api_key: "your-actual-api-key-here"
model: "glm-4-flash"
```
3. **重启服务器**
```bash
python -m server.main
```
### 使用AI功能
#### 群聊中使用AI
```
# @AI方式
用户> @AI 你好,请介绍一下Python编程语言
AI助手> 你好!Python是一种高级编程语言...
# 关键词方式
用户> AI能帮我写一个排序算法吗?
AI助手> 当然可以!这里是一个简单的冒泡排序算法...
用户> 请问人工智能的发展历史是怎样的?
AI助手> 人工智能的发展可以分为几个重要阶段...
```
#### 私聊AI模式
```
# 进入私聊AI聊天组
用户> /enter_chat private_with_ai
# 所有消息都会得到AI回复
用户> 你好
AI助手> 你好!我是Chat-Room的AI助手,有什么可以帮助你的吗?
用户> 今天天气怎么样?
AI助手> 抱歉,我无法获取实时天气信息。建议你查看天气预报应用...
```
### AI功能管理命令
```
# 查看AI状态(管理员)
/ai_status
# 重载AI配置(管理员)
/ai_reload
# 清除AI上下文
/ai_clear_context
# 设置AI参数
/ai_set temperature 0.8
```
## 📊 AI性能监控
### 监控指标
```mermaid
graph TB
subgraph "AI性能指标"
REQ[请求数量
Requests Count]
RESP[响应时间
Response Time]
SUCCESS[成功率
Success Rate]
ERROR[错误率
Error Rate]
TOKENS[Token使用量
Token Usage]
COST[API成本
API Cost]
end
subgraph "监控工具"
LOG[日志分析]
METRICS[指标收集]
ALERT[告警系统]
end
REQ --> METRICS
RESP --> METRICS
SUCCESS --> METRICS
ERROR --> ALERT
TOKENS --> COST
COST --> ALERT
METRICS --> LOG
```
### 性能优化建议
1. **上下文管理优化**
- 限制上下文长度
- 定期清理过期上下文
- 使用缓存减少数据库查询
2. **API调用优化**
- 实现请求重试机制
- 设置合理的超时时间
- 使用连接池复用连接
3. **响应速度优化**
- 异步处理AI请求
- 实现响应缓存
- 优化提示词长度
4. **成本控制**
- 监控Token使用量
- 设置使用限额
- 实现智能触发策略
这个AI集成文档提供了完整的AI功能架构、实现细节、配置管理和使用指南,帮助开发者理解和使用Chat-Room的AI智能助手功能。