add doc/ai-chat.md
This commit is contained in:
parent
f3ef66818d
commit
ded583ef22
699
doc/ai-chat.md
Normal file
699
doc/ai-chat.md
Normal file
@ -0,0 +1,699 @@
|
|||||||
|
# AI聊天功能技术实现计划
|
||||||
|
|
||||||
|
## 1. 项目概述
|
||||||
|
|
||||||
|
基于现有徵象防伪验证系统,扩展AI客服聊天功能,继承Kimi K2大模型能力,为每个品牌租户提供个性化的AI客服服务。
|
||||||
|
|
||||||
|
## 2. 需求分析
|
||||||
|
|
||||||
|
### 2.1 核心功能需求
|
||||||
|
- 接入Kimi K2或其他AI大模型API
|
||||||
|
- 品牌专属AI客服,独立回答本品牌产品相关问题
|
||||||
|
- 多模态回答:文字、图片、视频链接、微信小程序码等
|
||||||
|
- 联网搜索,以品牌官方信息为主
|
||||||
|
- 支持客户上传额外内容供AI学习
|
||||||
|
- 验证失败时提供对话式结果展示
|
||||||
|
- 支持品牌色调定制
|
||||||
|
|
||||||
|
### 2.2 技术约束
|
||||||
|
- 保留原有传统查询页面
|
||||||
|
- 通过序列码批次管理选择使用页面类型
|
||||||
|
- 与现有防伪验证流程集成
|
||||||
|
|
||||||
|
## 3. 系统架构设计
|
||||||
|
|
||||||
|
### 3.1 整体架构
|
||||||
|
```
|
||||||
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ 小程序前端 │ │ Web管理端 │ │ AI服务层 │
|
||||||
|
│ (AI聊天界面) │◄──►│ (内容管理) │◄──►│ (Kimi K2 API) │
|
||||||
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
│ │ │
|
||||||
|
▼ ▼ ▼
|
||||||
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ 验证服务 │ │ 内容存储 │ │ 知识库管理 │
|
||||||
|
│ (二维码识别) │ │ (OSS/数据库) │ │ (品牌知识) │
|
||||||
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 数据流设计
|
||||||
|
1. 用户扫描二维码 → 验证服务
|
||||||
|
2. 验证结果 → AI聊天界面
|
||||||
|
3. 用户提问 → AI服务层处理
|
||||||
|
4. AI回答 → 返回多模态内容
|
||||||
|
5. 用户反馈 → 知识库更新
|
||||||
|
|
||||||
|
## 4. 技术实现方案
|
||||||
|
|
||||||
|
### 4.1 AI模型集成
|
||||||
|
|
||||||
|
#### 4.1.1 模型选择
|
||||||
|
- **主要模型**: Kimi K2 API
|
||||||
|
- **备选模型**: 智谱AI (ChatGLM)、百度文心一言
|
||||||
|
- **理由**: Kimi K2在中文理解、多模态处理和联网搜索方面表现优秀,API稳定可靠,特别适合品牌客服场景
|
||||||
|
|
||||||
|
#### 4.1.2 API集成架构
|
||||||
|
```python
|
||||||
|
# api/products/ai_service.py
|
||||||
|
class AIService:
|
||||||
|
def __init__(self, tenant_id, model_config):
|
||||||
|
self.tenant_id = tenant_id
|
||||||
|
self.model_config = model_config
|
||||||
|
self.client = self._init_client()
|
||||||
|
|
||||||
|
def chat(self, message, context, tenant_context):
|
||||||
|
# 构建prompt
|
||||||
|
prompt = self._build_prompt(message, context, tenant_context)
|
||||||
|
# 调用Kimi K2 API
|
||||||
|
response = self._call_kimi_api(prompt)
|
||||||
|
# 后处理
|
||||||
|
return self._post_process(response)
|
||||||
|
|
||||||
|
def _call_kimi_api(self, prompt):
|
||||||
|
# 调用Kimi K2 API,支持联网搜索和多模态处理
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _build_prompt(self, message, context, tenant_context):
|
||||||
|
# 包含品牌信息、产品知识、用户上下文
|
||||||
|
pass
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.1.3 智能能力调度系统(简化版)
|
||||||
|
- **能力分类**: RAG知识检索、平台服务、一般问答
|
||||||
|
- **优先级策略**: 平台服务 > RAG知识 > 一般问答
|
||||||
|
- **智能路由**: 基于规则的快速路由策略
|
||||||
|
- **降级机制**: 简单的能力降级和回退
|
||||||
|
- **后续扩展**: 工具执行、网络搜索等高级功能
|
||||||
|
|
||||||
|
#### 4.1.4 RAG框架集成(简化版)
|
||||||
|
- **框架选择**: LangChain基础功能
|
||||||
|
- **文档处理**: 基础分块、简单向量化、相似度检索
|
||||||
|
- **上下文优化**: 基础分层策略(摘要、完整)
|
||||||
|
- **检索策略**: 向量相似度检索,关键词匹配作为备选
|
||||||
|
|
||||||
|
### 4.2 数据模型扩展
|
||||||
|
|
||||||
|
#### 4.2.1 新增数据表
|
||||||
|
```python
|
||||||
|
# api/products/models.py
|
||||||
|
|
||||||
|
class AIConfig(models.Model):
|
||||||
|
"""AI配置表"""
|
||||||
|
tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE)
|
||||||
|
model_provider = models.CharField(max_length=50, default='kimi')
|
||||||
|
api_key = models.CharField(max_length=255)
|
||||||
|
model_name = models.CharField(max_length=100, default='kimi-k2')
|
||||||
|
|
||||||
|
class BrandKnowledge(models.Model):
|
||||||
|
"""品牌知识库"""
|
||||||
|
tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE)
|
||||||
|
title = models.CharField(max_length=200)
|
||||||
|
content = models.TextField()
|
||||||
|
content_type = models.CharField(max_length=20) # text, image, video, link
|
||||||
|
file_url = models.URLField(null=True, blank=True)
|
||||||
|
priority = models.IntegerField(default=0)
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
class PlatformKnowledge(models.Model):
|
||||||
|
"""平台知识库"""
|
||||||
|
title = models.CharField(max_length=200)
|
||||||
|
content = models.TextField()
|
||||||
|
content_type = models.CharField(max_length=20, choices=[
|
||||||
|
('platform_intro', '平台介绍'),
|
||||||
|
('service_guide', '服务指南'),
|
||||||
|
('faq', '常见问题')
|
||||||
|
])
|
||||||
|
ai_summary = models.TextField(null=True, blank=True, verbose_name="AI摘要版本")
|
||||||
|
ai_segments = models.JSONField(default=dict, verbose_name="AI分段内容")
|
||||||
|
ai_keywords = models.JSONField(default=list, verbose_name="AI关键词")
|
||||||
|
is_platform_content = models.BooleanField(default=True)
|
||||||
|
ai_priority = models.IntegerField(default=0)
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
class ChatSession(models.Model):
|
||||||
|
"""聊天会话"""
|
||||||
|
session_id = models.CharField(max_length=100, unique=True)
|
||||||
|
tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE)
|
||||||
|
user_openid = models.CharField(max_length=100, null=True)
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
last_active = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
class ChatMessage(models.Model):
|
||||||
|
"""聊天消息"""
|
||||||
|
session = models.ForeignKey(ChatSession, on_delete=models.CASCADE)
|
||||||
|
role = models.CharField(max_length=20) # user, assistant, system
|
||||||
|
content = models.TextField()
|
||||||
|
content_type = models.CharField(max_length=20, default='text')
|
||||||
|
metadata = models.JSONField(default=dict)
|
||||||
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.2.2 现有模型扩展
|
||||||
|
```python
|
||||||
|
# 扩展CodeBatch模型
|
||||||
|
class CodeBatch(models.Model):
|
||||||
|
# ... 现有字段 ...
|
||||||
|
enable_ai_chat = models.BooleanField(default=False, verbose_name="启用AI聊天")
|
||||||
|
ai_chat_config = models.JSONField(null=True, blank=True, verbose_name="AI聊天配置")
|
||||||
|
|
||||||
|
# 扩展Tenant模型
|
||||||
|
class Tenant(models.Model):
|
||||||
|
# ... 现有字段 ...
|
||||||
|
ai_brand_name = models.CharField(max_length=100, null=True, blank=True, verbose_name="AI品牌名称")
|
||||||
|
ai_welcome_message = models.TextField(null=True, blank=True, verbose_name="AI欢迎语")
|
||||||
|
ai_theme_colors = models.JSONField(null=True, blank=True, verbose_name="AI主题色彩")
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 后端API设计
|
||||||
|
|
||||||
|
#### 4.3.1 AI聊天API
|
||||||
|
```python
|
||||||
|
# api/products/views.py
|
||||||
|
|
||||||
|
class AIChatView(BaseView):
|
||||||
|
name = 'ai-chat'
|
||||||
|
auth_check = 'tenant'
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
"""发送消息给AI"""
|
||||||
|
session_id = request.data.get('session_id')
|
||||||
|
message = request.data.get('message')
|
||||||
|
context = request.data.get('context', {})
|
||||||
|
|
||||||
|
# 获取或创建会话
|
||||||
|
session = self._get_or_create_session(session_id, request.tenant)
|
||||||
|
|
||||||
|
# 调用AI服务
|
||||||
|
ai_service = AIService(request.tenant.id)
|
||||||
|
response = ai_service.chat(message, context, self._get_tenant_context(request.tenant))
|
||||||
|
|
||||||
|
# 保存消息记录
|
||||||
|
self._save_message(session, 'user', message)
|
||||||
|
self._save_message(session, 'assistant', response)
|
||||||
|
|
||||||
|
return JsonResponse({
|
||||||
|
'session_id': session.session_id,
|
||||||
|
'response': response
|
||||||
|
})
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
"""获取聊天历史"""
|
||||||
|
session_id = request.GET.get('session_id')
|
||||||
|
if not session_id:
|
||||||
|
return http400("session_id required")
|
||||||
|
|
||||||
|
session = ChatSession.objects.filter(
|
||||||
|
session_id=session_id,
|
||||||
|
tenant=request.tenant
|
||||||
|
).first()
|
||||||
|
|
||||||
|
if not session:
|
||||||
|
return http404("Session not found")
|
||||||
|
|
||||||
|
messages = ChatMessage.objects.filter(session=session).order_by('created_at')
|
||||||
|
return JsonResponse({
|
||||||
|
'messages': [self._serialize_message(m) for m in messages]
|
||||||
|
})
|
||||||
|
|
||||||
|
class BrandKnowledgeView(BaseView):
|
||||||
|
name = 'brand-knowledge'
|
||||||
|
auth_check = 'tenant'
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
"""上传品牌知识"""
|
||||||
|
title = request.data.get('title')
|
||||||
|
content = request.data.get('content')
|
||||||
|
content_type = request.data.get('content_type', 'text')
|
||||||
|
file_url = request.data.get('file_url')
|
||||||
|
|
||||||
|
knowledge = BrandKnowledge.objects.create(
|
||||||
|
tenant=request.tenant,
|
||||||
|
title=title,
|
||||||
|
content=content,
|
||||||
|
content_type=content_type,
|
||||||
|
file_url=file_url
|
||||||
|
)
|
||||||
|
|
||||||
|
return JsonResponse({'id': knowledge.id})
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.3.2 配置管理API
|
||||||
|
```python
|
||||||
|
class AIConfigView(BaseView):
|
||||||
|
name = 'ai-config'
|
||||||
|
auth_check = 'tenant'
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
"""获取AI配置"""
|
||||||
|
config = AIConfig.objects.filter(tenant=request.tenant).first()
|
||||||
|
if not config:
|
||||||
|
config = AIConfig.objects.create(tenant=request.tenant)
|
||||||
|
|
||||||
|
return JsonResponse({
|
||||||
|
'model_provider': config.model_provider,
|
||||||
|
'model_name': config.model_name,
|
||||||
|
'temperature': config.temperature,
|
||||||
|
'max_tokens': config.max_tokens,
|
||||||
|
'is_active': config.is_active
|
||||||
|
})
|
||||||
|
|
||||||
|
def patch(self, request):
|
||||||
|
"""更新AI配置"""
|
||||||
|
config = AIConfig.objects.filter(tenant=request.tenant).first()
|
||||||
|
if not config:
|
||||||
|
config = AIConfig.objects.create(tenant=request.tenant)
|
||||||
|
|
||||||
|
for field in ['model_provider', 'model_name', 'temperature', 'max_tokens', 'is_active']:
|
||||||
|
if field in request.data:
|
||||||
|
setattr(config, field, request.data[field])
|
||||||
|
|
||||||
|
config.save()
|
||||||
|
return JsonResponse({'status': 'success'})
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.4 前端界面设计
|
||||||
|
|
||||||
|
#### 4.4.1 小程序AI聊天界面
|
||||||
|
```javascript
|
||||||
|
// scanner/pages/chat/chat.js
|
||||||
|
Page({
|
||||||
|
data: {
|
||||||
|
messages: [],
|
||||||
|
inputValue: '',
|
||||||
|
sessionId: null,
|
||||||
|
tenant: null,
|
||||||
|
loading: false
|
||||||
|
},
|
||||||
|
|
||||||
|
onLoad(options) {
|
||||||
|
this.initChat(options);
|
||||||
|
},
|
||||||
|
|
||||||
|
async initChat(options) {
|
||||||
|
// 获取租户信息
|
||||||
|
const tenant = await this.getTenantInfo(options.tenant);
|
||||||
|
this.setData({ tenant });
|
||||||
|
|
||||||
|
// 创建或获取会话
|
||||||
|
const sessionId = await this.createChatSession(tenant.id);
|
||||||
|
this.setData({ sessionId });
|
||||||
|
|
||||||
|
// 显示欢迎消息
|
||||||
|
this.showWelcomeMessage(tenant);
|
||||||
|
|
||||||
|
// 如果有验证结果,显示相关产品信息
|
||||||
|
if (options.serial_code) {
|
||||||
|
await this.showProductInfo(options.serial_code);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async sendMessage() {
|
||||||
|
if (!this.data.inputValue.trim()) return;
|
||||||
|
|
||||||
|
const message = this.data.inputValue;
|
||||||
|
this.addMessage('user', message);
|
||||||
|
this.setData({ inputValue: '', loading: true });
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await this.callAIChat(message);
|
||||||
|
this.addMessage('assistant', response);
|
||||||
|
} catch (error) {
|
||||||
|
this.addMessage('system', '抱歉,AI服务暂时不可用,请稍后再试。');
|
||||||
|
} finally {
|
||||||
|
this.setData({ loading: false });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async callAIChat(message) {
|
||||||
|
const response = await wx.request({
|
||||||
|
url: `${this.data.tenant.server_url}/api/v1/ai-chat/`,
|
||||||
|
method: 'POST',
|
||||||
|
data: {
|
||||||
|
session_id: this.data.sessionId,
|
||||||
|
message: message,
|
||||||
|
context: this.getContext()
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
'Authorization': `token ${this.data.tenant.token}`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return response.data.response;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.4.2 Web管理端界面
|
||||||
|
```vue
|
||||||
|
<!-- web/src/views/ai-config.vue -->
|
||||||
|
<template>
|
||||||
|
<div class="ai-config">
|
||||||
|
<CCard>
|
||||||
|
<CCardHeader>
|
||||||
|
<h4>AI聊天配置</h4>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody>
|
||||||
|
<CForm>
|
||||||
|
<CFormGroup label="AI模型提供商">
|
||||||
|
<CSelect v-model="config.model_provider">
|
||||||
|
<option value="kimi">Kimi K2</option>
|
||||||
|
<option value="zhipu">智谱AI</option>
|
||||||
|
<option value="baidu">百度文心一言</option>
|
||||||
|
</CSelect>
|
||||||
|
</CFormGroup>
|
||||||
|
|
||||||
|
<CFormGroup label="API密钥">
|
||||||
|
<CInput v-model="config.api_key" type="password" />
|
||||||
|
</CFormGroup>
|
||||||
|
|
||||||
|
<CFormGroup label="模型名称">
|
||||||
|
<CInput v-model="config.model_name" />
|
||||||
|
</CFormGroup>
|
||||||
|
|
||||||
|
<CFormGroup label="温度">
|
||||||
|
<CInput v-model="config.temperature" type="number" step="0.1" min="0" max="2" />
|
||||||
|
</CFormGroup>
|
||||||
|
|
||||||
|
<CFormGroup label="最大Token数">
|
||||||
|
<CInput v-model="config.max_tokens" type="number" />
|
||||||
|
</CFormGroup>
|
||||||
|
|
||||||
|
<CButton color="primary" @click="saveConfig">保存配置</CButton>
|
||||||
|
</CForm>
|
||||||
|
</CCardBody>
|
||||||
|
</CCard>
|
||||||
|
|
||||||
|
<CCard class="mt-4">
|
||||||
|
<CCardHeader>
|
||||||
|
<h4>品牌知识库</h4>
|
||||||
|
<CButton color="success" @click="showAddKnowledge">添加知识</CButton>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody>
|
||||||
|
<CTable :items="knowledgeList" :fields="knowledgeFields">
|
||||||
|
<template #actions="{ item }">
|
||||||
|
<CButton color="danger" size="sm" @click="deleteKnowledge(item.id)">删除</CButton>
|
||||||
|
</template>
|
||||||
|
</CTable>
|
||||||
|
</CCardBody>
|
||||||
|
</CCard>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.5 内容管理系统
|
||||||
|
|
||||||
|
#### 4.5.1 知识库管理
|
||||||
|
- 支持文本、图片、视频、链接等多种内容类型
|
||||||
|
- 内容优先级设置
|
||||||
|
- 内容分类标签
|
||||||
|
- 版本控制
|
||||||
|
|
||||||
|
#### 4.5.2 品牌定制
|
||||||
|
- 品牌色调配置
|
||||||
|
- 欢迎语定制
|
||||||
|
- 头像和图标上传
|
||||||
|
- 回答风格调整
|
||||||
|
|
||||||
|
#### 4.5.3 平台知识库管理(简化版)
|
||||||
|
- 平台介绍内容(4000字)的基础分块
|
||||||
|
- 分层内容策略:摘要、完整两个层次
|
||||||
|
- 基于关键词的简单内容选择
|
||||||
|
- 基础内容压缩,避免信息过载
|
||||||
|
|
||||||
|
#### 4.5.4 智能内容处理(简化版)
|
||||||
|
- 基于LangChain的文档基础预处理
|
||||||
|
- 简单分块策略:按段落和句子分割
|
||||||
|
- 基础内容压缩:摘要和完整内容
|
||||||
|
- 固定上下文长度,简化Token管理
|
||||||
|
|
||||||
|
## 5. 技术实现细节
|
||||||
|
|
||||||
|
### 5.1 AI Prompt工程
|
||||||
|
|
||||||
|
#### 5.1.1 系统Prompt模板
|
||||||
|
```
|
||||||
|
你是一个专业的品牌客服助手,专门为{品牌名称}提供产品咨询和服务。
|
||||||
|
|
||||||
|
品牌信息:
|
||||||
|
{品牌背景介绍}
|
||||||
|
|
||||||
|
产品知识:
|
||||||
|
{产品相关信息}
|
||||||
|
|
||||||
|
服务原则:
|
||||||
|
1. 只回答与{品牌名称}相关的问题
|
||||||
|
2. 不评价竞品,不与竞品对比
|
||||||
|
3. 优先使用官方信息回答
|
||||||
|
4. 对于不确定的信息,明确告知用户
|
||||||
|
5. 保持专业、友好的服务态度
|
||||||
|
|
||||||
|
用户上下文:
|
||||||
|
{用户验证的产品信息、历史对话等}
|
||||||
|
|
||||||
|
请根据以上信息,为用户提供准确、有用的回答。
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.2 平台客服Prompt模板
|
||||||
|
```
|
||||||
|
你是一个专业的徵象防伪验证平台客服助手。
|
||||||
|
|
||||||
|
平台介绍:
|
||||||
|
徵象是由广州市诚投科技有限公司开发的AI驱动的智能防伪平台,通过多模态特征识别构建新一代防伪验证体系,实现从物理防伪到数字认证的全链路保护。系统采用ISO 12931国际防伪标准,已获取国家发明专利(证书编号:CN 115222000 B)。
|
||||||
|
|
||||||
|
服务范围:
|
||||||
|
1. 商品防伪验证
|
||||||
|
2. 证件安全验证
|
||||||
|
3. 工业品防伪
|
||||||
|
4. 品牌数字化服务
|
||||||
|
|
||||||
|
服务原则:
|
||||||
|
1. 专业、友好、准确回答用户问题
|
||||||
|
2. 优先使用官方信息回答
|
||||||
|
3. 对于不确定的信息,明确告知用户
|
||||||
|
4. 引导用户使用相关功能和服务
|
||||||
|
|
||||||
|
请根据用户问题提供准确、有用的回答。
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.2 动态Prompt构建
|
||||||
|
```python
|
||||||
|
def build_dynamic_prompt(self, message, context, tenant_context):
|
||||||
|
# 获取品牌知识
|
||||||
|
knowledge = self._get_relevant_knowledge(message, tenant_context)
|
||||||
|
|
||||||
|
# 获取产品信息
|
||||||
|
product_info = self._get_product_info(context.get('serial_code'))
|
||||||
|
|
||||||
|
# 构建完整prompt
|
||||||
|
prompt = self._get_system_prompt(tenant_context)
|
||||||
|
prompt += f"\n\n相关产品信息:{product_info}"
|
||||||
|
prompt += f"\n\n品牌知识:{knowledge}"
|
||||||
|
prompt += f"\n\n用户问题:{message}"
|
||||||
|
|
||||||
|
return prompt
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.3 智能能力路由(简化版)
|
||||||
|
```python
|
||||||
|
def route_capability(self, query, context):
|
||||||
|
# 基于规则的快速路由
|
||||||
|
capability = self._rule_based_routing(query)
|
||||||
|
|
||||||
|
# 根据能力类型构建相应的Prompt
|
||||||
|
if capability == "rag_knowledge":
|
||||||
|
return self._build_rag_prompt(query, context)
|
||||||
|
elif capability == "platform_service":
|
||||||
|
return self._build_platform_prompt(query, context)
|
||||||
|
else:
|
||||||
|
return self._build_general_prompt(query, context)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 多模态内容处理
|
||||||
|
|
||||||
|
#### 5.2.1 内容类型支持
|
||||||
|
- **文本**: 直接返回
|
||||||
|
- **图片**: 上传到OSS,返回URL
|
||||||
|
- **视频**: 支持微信视频号链接
|
||||||
|
- **链接**: 小程序码、商城链接等
|
||||||
|
- **富文本**: Markdown格式支持
|
||||||
|
|
||||||
|
#### 5.2.2 内容渲染
|
||||||
|
```javascript
|
||||||
|
// 内容渲染组件
|
||||||
|
function renderContent(content, type) {
|
||||||
|
switch (type) {
|
||||||
|
case 'text':
|
||||||
|
return <Text>{content}</Text>;
|
||||||
|
case 'image':
|
||||||
|
return <Image src={content} mode="widthFix" />;
|
||||||
|
case 'video':
|
||||||
|
return <Video src={content} />;
|
||||||
|
case 'link':
|
||||||
|
return <Link href={content.url} text={content.text} />;
|
||||||
|
case 'rich_text':
|
||||||
|
return <RichText content={content} />;
|
||||||
|
default:
|
||||||
|
return <Text>{content}</Text>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 会话管理
|
||||||
|
|
||||||
|
#### 5.3.1 会话状态
|
||||||
|
- 会话创建和销毁
|
||||||
|
- 消息历史记录
|
||||||
|
- 上下文保持
|
||||||
|
- 会话超时处理
|
||||||
|
|
||||||
|
#### 5.3.2 用户身份识别
|
||||||
|
- 微信OpenID绑定
|
||||||
|
- 匿名会话支持
|
||||||
|
- 用户偏好记录
|
||||||
|
|
||||||
|
### 5.4 智能调度系统(简化版)
|
||||||
|
|
||||||
|
#### 5.4.1 能力处理器架构
|
||||||
|
- 基础能力处理器注册机制
|
||||||
|
- 简单的能力降级策略
|
||||||
|
- 固定路由规则
|
||||||
|
|
||||||
|
#### 5.4.2 调度策略
|
||||||
|
- 基于关键词的能力选择
|
||||||
|
- 基础异常处理和回退
|
||||||
|
- 简单性能监控
|
||||||
|
- 后续版本支持高级功能
|
||||||
|
|
||||||
|
## 6. 部署和运维
|
||||||
|
|
||||||
|
### 6.1 环境配置
|
||||||
|
```bash
|
||||||
|
# 环境变量配置
|
||||||
|
AI_MODEL_PROVIDER=kimi
|
||||||
|
AI_API_KEY=your_api_key
|
||||||
|
AI_MODEL_NAME=kimi-k2
|
||||||
|
AI_MAX_TOKENS=2000
|
||||||
|
AI_TEMPERATURE=0.7
|
||||||
|
|
||||||
|
# LangChain配置
|
||||||
|
LANGCHAIN_TRACING_V2=true
|
||||||
|
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
|
||||||
|
LANGCHAIN_API_KEY=your_langchain_key
|
||||||
|
|
||||||
|
# 向量数据库配置
|
||||||
|
VECTOR_DB_TYPE=chroma
|
||||||
|
VECTOR_DB_PATH=./vector_store
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 监控和日志
|
||||||
|
- AI API调用监控
|
||||||
|
- 响应时间统计
|
||||||
|
- 错误率监控
|
||||||
|
- 用户满意度反馈
|
||||||
|
|
||||||
|
### 6.3 性能优化
|
||||||
|
- 响应缓存
|
||||||
|
- 异步处理
|
||||||
|
- 负载均衡
|
||||||
|
- 数据库优化
|
||||||
|
|
||||||
|
## 7. 安全考虑
|
||||||
|
|
||||||
|
### 7.1 数据安全
|
||||||
|
- API密钥加密存储
|
||||||
|
- 用户隐私保护
|
||||||
|
- 内容审核机制
|
||||||
|
- 访问权限控制
|
||||||
|
|
||||||
|
### 7.2 系统安全
|
||||||
|
- 防SQL注入
|
||||||
|
- 防XSS攻击
|
||||||
|
- 请求频率限制
|
||||||
|
- 异常监控告警
|
||||||
|
|
||||||
|
## 8. 测试策略
|
||||||
|
|
||||||
|
### 8.1 功能测试
|
||||||
|
- AI对话准确性测试
|
||||||
|
- 多模态内容展示测试
|
||||||
|
- 品牌定制功能测试
|
||||||
|
- 异常情况处理测试
|
||||||
|
|
||||||
|
### 8.2 性能测试
|
||||||
|
- 并发用户测试
|
||||||
|
- 响应时间测试
|
||||||
|
- 内存使用测试
|
||||||
|
- 数据库性能测试
|
||||||
|
|
||||||
|
### 8.3 集成测试
|
||||||
|
- 与现有系统集成测试
|
||||||
|
- 第三方API集成测试
|
||||||
|
- 端到端流程测试
|
||||||
|
|
||||||
|
## 9. 项目计划
|
||||||
|
|
||||||
|
### 9.1 开发阶段
|
||||||
|
1. **第一阶段 (1周)**: 核心架构和基础功能
|
||||||
|
- 数据模型扩展(最小化)
|
||||||
|
- Kimi K2 API基础集成
|
||||||
|
- 基础AI聊天功能
|
||||||
|
2. **第二阶段 (1周)**: AI能力扩展
|
||||||
|
- LangChain RAG基础集成
|
||||||
|
- 平台知识库(简化版)
|
||||||
|
- 智能路由基础功能
|
||||||
|
3. **第三阶段 (1周)**: 前端界面和内容管理
|
||||||
|
- 小程序AI聊天界面(核心功能)
|
||||||
|
- Web管理端(基础配置)
|
||||||
|
- 内容管理基础功能
|
||||||
|
4. **第四阶段 (1周)**: 集成测试和部署
|
||||||
|
- 功能测试和bug修复
|
||||||
|
- 性能优化
|
||||||
|
- 生产环境部署
|
||||||
|
|
||||||
|
### 9.2 里程碑
|
||||||
|
- Week 1: 完成核心架构和基础AI聊天功能
|
||||||
|
- Week 2: 完成RAG系统和智能路由基础功能
|
||||||
|
- Week 3: 完成前端界面和内容管理
|
||||||
|
- Week 4: 完成测试、优化和上线
|
||||||
|
|
||||||
|
## 10. 风险评估
|
||||||
|
|
||||||
|
### 10.1 技术风险
|
||||||
|
- AI API稳定性风险
|
||||||
|
- 多模态内容处理复杂度
|
||||||
|
- 性能瓶颈风险
|
||||||
|
- 开发时间压缩导致的代码质量风险
|
||||||
|
- 功能简化可能影响用户体验
|
||||||
|
- 测试时间不足的风险
|
||||||
|
|
||||||
|
### 10.2 业务风险
|
||||||
|
- 用户接受度风险
|
||||||
|
- 内容管理复杂度
|
||||||
|
- 成本控制风险
|
||||||
|
|
||||||
|
### 10.3 缓解措施
|
||||||
|
- 多AI服务商备选方案
|
||||||
|
- 渐进式功能发布
|
||||||
|
- 用户反馈快速迭代
|
||||||
|
- 功能优先级排序,核心功能优先
|
||||||
|
- 代码复用和模板化开发
|
||||||
|
- 自动化测试和部署
|
||||||
|
|
||||||
|
## 11. 总结
|
||||||
|
|
||||||
|
本技术方案基于现有徵象系统架构,通过AI服务集成、数据模型扩展、前后端界面开发,实现品牌专属AI客服功能。方案考虑了技术可行性、系统集成、用户体验和运维管理等各个方面,为项目的成功实施提供了全面的技术指导。
|
||||||
|
|
||||||
|
### 11.1 技术亮点
|
||||||
|
- **智能能力调度**: 基于优先级的多能力协调系统,支持RAG、平台服务、一般问答
|
||||||
|
- **RAG框架集成**: 基于LangChain的智能文档处理和向量检索
|
||||||
|
- **分层内容策略**: 4000字平台介绍的基础分块和内容选择
|
||||||
|
- **检索策略**: 向量相似度检索,关键词匹配作为备选
|
||||||
|
- **MVP策略**: 核心功能先行,后续版本迭代优化
|
||||||
|
|
||||||
|
### 11.2 开发周期
|
||||||
|
- **总周期**: 4周(压缩版)
|
||||||
|
- **核心功能**: AI聊天、RAG知识检索、智能路由、基础内容管理
|
||||||
|
- **技术栈**: Django + Kimi K2 + LangChain(简化版)+ 基础向量存储
|
||||||
|
- **开发策略**: MVP优先,核心功能先行,后续迭代优化
|
||||||
|
|
||||||
|
通过分阶段开发和迭代优化,可以确保系统稳定性和用户满意度,同时为后续功能扩展奠定良好基础。
|
||||||
Loading…
x
Reference in New Issue
Block a user