diff --git a/backend/meetings/views.py b/backend/meetings/views.py index 48b3e3c1..8bd7eecf 100644 --- a/backend/meetings/views.py +++ b/backend/meetings/views.py @@ -36,7 +36,7 @@ class MeetingViewSet(viewsets.ModelViewSet): meeting = serializer.save(host=host) - # 指定主持龙虾(可选) + # 指定主持龙虾(第一只,负责生成纪要) host_agent_id = request.data.get('host_agent_id') host_instance_id = request.data.get('host_instance_id') if host_agent_id: @@ -53,17 +53,22 @@ class MeetingViewSet(viewsets.ModelViewSet): is_host=True ) - # 如果指定了 host_agent_id,创建该龙虾参会者 - if host_agent_id: + # 创建所有龙虾参会者(从 sessions 中获取) + agent_ids = request.data.get('agent_ids', []) + for agent_id in agent_ids: + # 避免重复创建 + if Participant.objects.filter(meeting=meeting, agent_id=agent_id).exists(): + continue + # 从用户绑定的龙虾中获取正确信息 - agent_info = host.get_linked_agent(host_agent_id) + agent_info = host.get_linked_agent(agent_id) Participant.objects.create( meeting=meeting, agent_type='openclaw', - agent_id=host_agent_id, - agent_name=agent_info['agent_name'] if agent_info else host_agent_id, + agent_id=agent_id, + agent_name=agent_info['agent_name'] if agent_info else agent_id, agent_emoji=agent_info.get('agent_emoji', '🤖') if agent_info else '🤖', - nickname=agent_info['agent_name'] if agent_info else host_agent_id, + nickname=agent_info['agent_name'] if agent_info else agent_id, is_host=False ) diff --git a/docs/ae商业机制.md b/docs/ae商业机制.md new file mode 100644 index 00000000..e69de29b diff --git a/frontend/src/App.js b/frontend/src/App.js index a09b1599..157ade95 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -176,8 +176,9 @@ function MeetingList() { const res = await axios.post(`${API_BASE}/meetings/`, { topic, - auto_add_virtual_agents: !autoAddAgents ? false : agentIds.length === 0, // 如果没有龙虾才添加虚拟的 - host_agent_id: agentIds.length > 0 ? agentIds[0] : null + auto_add_virtual_agents: agentIds.length === 0, // 只有没有龙虾时才添加虚拟的 + host_agent_id: agentIds.length > 0 ? agentIds[0] : null, // 第一只作为主持龙虾 + agent_ids: agentIds // 传递所有龙虾 }); navigate(`/meeting/${res.data.id}`); } catch (error) {