perf: 优化 AI 提示词

This commit is contained in:
kuaifan 2025-02-26 20:47:03 +08:00
parent b01d5ce8c4
commit 25e5eb4427
2 changed files with 33 additions and 29 deletions

View File

@ -1895,6 +1895,7 @@ class ProjectTask extends AbstractModel
$contexts[] = "任务截止时间:" . $this->end_at; $contexts[] = "任务截止时间:" . $this->end_at;
} }
} }
$contexts[] = "当前系统时间:" . Carbon::now()->toDateTimeString();
if ($this->content) { if ($this->content) {
$taskDesc = $this->content?->getContentInfo(); $taskDesc = $this->content?->getContentInfo();
if ($taskDesc) { if ($taskDesc) {

View File

@ -7,6 +7,7 @@ use App\Models\Project;
use App\Models\ProjectTask; use App\Models\ProjectTask;
use App\Models\User; use App\Models\User;
use App\Models\UserBot; use App\Models\UserBot;
use App\Models\UserDepartment;
use App\Models\WebSocketDialog; use App\Models\WebSocketDialog;
use App\Models\WebSocketDialogConfig; use App\Models\WebSocketDialogConfig;
use App\Models\WebSocketDialogMsg; use App\Models\WebSocketDialogMsg;
@ -487,7 +488,7 @@ class BotReceiveMsgTask extends AbstractTask
EOF; EOF;
} }
} }
$this->AIGenerateSystemMessageOrBeforeText($msg->userid, $dialog, $extras); $this->AIGenerateSystemMessage($msg->userid, $dialog, $extras);
$webhookUrl = "{$serverUrl}/ai/chat"; $webhookUrl = "{$serverUrl}/ai/chat";
} else { } else {
// 用户机器人 // 用户机器人
@ -633,16 +634,15 @@ class BotReceiveMsgTask extends AbstractTask
} }
/** /**
* 生成AI系统提示词或前置消息 * 生成AI系统提示词
* @param int|null $userid * @param int|null $userid
* @param WebSocketDialog $dialog * @param WebSocketDialog $dialog
* @param array $extras * @param array $extras
* @return void * @return void
*/ */
private function AIGenerateSystemMessageOrBeforeText(int|null $userid, WebSocketDialog $dialog, array &$extras) private function AIGenerateSystemMessage(int|null $userid, WebSocketDialog $dialog, array &$extras)
{ {
$system_message = null; $system_messages = [];
$before_text = [];
switch ($dialog->type) { switch ($dialog->type) {
case "user": case "user":
$aiPrompt = WebSocketDialogConfig::where([ $aiPrompt = WebSocketDialogConfig::where([
@ -651,7 +651,7 @@ class BotReceiveMsgTask extends AbstractTask
'type' => 'ai_prompt', 'type' => 'ai_prompt',
])->value('value'); ])->value('value');
if ($aiPrompt) { if ($aiPrompt) {
$system_message = $aiPrompt; $extras['system_message'] = $aiPrompt;
} }
break; break;
case "group": case "group":
@ -661,16 +661,14 @@ class BotReceiveMsgTask extends AbstractTask
case 'project': case 'project':
$projectInfo = Project::whereDialogId($dialog->id)->first(); $projectInfo = Project::whereDialogId($dialog->id)->first();
if ($projectInfo) { if ($projectInfo) {
$projectText = "当前我在项目【{$projectInfo->name}】中"; $projectDesc = $projectInfo->desc ?: "-";
if ($projectInfo->archived_at) { $projectStatus = $projectInfo->archived_at ? '已归档' : '正在进行中';
$projectText .= ",此项目已经归档"; $system_messages[] = <<<EOF
} 当前我在项目【{$projectInfo->name}】中
$before_text[] = $projectText; 项目描述:{$projectDesc}
if ($projectInfo->desc) { 项目状态:{$projectStatus}
$before_text[] = "项目描述:{$projectInfo->desc}";
} 如果你判断我想要或需要添加任务,请按照以下格式回复:
$before_text[] = <<<EOF
如果你判断我想要添加任务,请按照以下格式回复:
::: create-task-list ::: create-task-list
title: 任务标题1 title: 任务标题1
@ -685,15 +683,14 @@ class BotReceiveMsgTask extends AbstractTask
case 'task': case 'task':
$taskInfo = ProjectTask::with(['content'])->whereDialogId($dialog->id)->first(); $taskInfo = ProjectTask::with(['content'])->whereDialogId($dialog->id)->first();
if ($taskInfo) { if ($taskInfo) {
$taskName = addslashes($taskInfo->name) . " (ID:{$taskInfo->id})";
$taskContext = implode("\n", $taskInfo->AIContext()); $taskContext = implode("\n", $taskInfo->AIContext());
if ($taskContext) { $system_messages[] = <<<EOF
$before_text[] = "当前我在任务 '{$taskName}' (see below for task_content tag) 对话中\n\n<task_content path=\"{$taskName}\">\n{$taskContext}\n</task_content>"; 当前我在任务【{$taskInfo->name}】中
} else { 当前时间:{$taskInfo->updated_at}
$before_text[] = "当前我在任务 '{$taskName}' 对话中"; 任务ID{$taskInfo->id}
} {$taskContext}
$before_text[] = <<<EOF
如果你判断我想要添加子任务,请按照以下格式回复: 如果你判断我想要或需要添加子任务,请按照以下格式回复:
::: create-subtask-list ::: create-subtask-list
title: 子任务标题1 title: 子任务标题1
@ -702,17 +699,23 @@ class BotReceiveMsgTask extends AbstractTask
EOF; EOF;
} }
break; break;
case 'department':
$userDepartment = UserDepartment::whereDialogId($dialog->id)->first();
if ($userDepartment) {
$system_messages[] = "当前我在【{$userDepartment->name}】的部门群聊中";
}
break;
case 'all': case 'all':
$before_text[] = "当前我团队【全体成员】的群聊中"; $system_messages[] = "当前我在【全体成员】的群聊中";
break; break;
} }
break; break;
} }
if ($system_message) { if ($extras['system_message']) {
$extras['system_message'] = $system_message; array_unshift($system_messages, $extras['system_message']);
} }
if ($before_text) { if ($system_messages) {
$extras['before_text'] = Base::newTrim($before_text); $extras['system_message'] = implode("\n\n====\n\n", Base::newTrim($system_messages));
} }
} }
} }