main: 增强工具功能与消息处理

- 添加 `FileReadTool`,支持文件内容读取与安全验证
- 引入 `hasToolMessages` 逻辑,优化工具历史上下文处理
- 修改工具选项逻辑,支持禁用工具时的动态调整
- 增加消息序列化逻辑,优化 Redis 序列管理与数据同步
- 扩展测试覆盖,验证序列化与工具调用场景
- 增强 Docker Compose 脚本,支持应用重置与日志清理
- 调整工具调用超时设置,提升运行时用户体验
This commit is contained in:
2025-12-24 00:55:54 +08:00
parent 71226c255b
commit e956df9daa
24 changed files with 741 additions and 38 deletions

View File

@@ -3,12 +3,16 @@
namespace App\Services;
use App\Models\Message;
use App\Services\MessageSequence;
use App\Services\Tool\ToolCall;
use App\Services\Tool\ToolResult;
class OutputSink
{
public function __construct(private readonly ChatService $chatService)
public function __construct(
private readonly ChatService $chatService,
private readonly MessageSequence $messageSequence,
)
{
}
@@ -39,10 +43,12 @@ class OutputSink
*/
public function appendAgentDelta(string $sessionId, string $runId, string $content, int $deltaIndex, array $meta = []): void
{
$session = $this->chatService->getSession($sessionId);
// 1. 创建临时 Message 对象(不保存到数据库)
$message = new Message([
'message_id' => (string) \Illuminate\Support\Str::uuid(),
'session_id' => $sessionId,
'session_id' => $session->session_id,
'role' => Message::ROLE_AGENT,
'type' => 'message.delta',
'content' => $content,
@@ -51,7 +57,7 @@ class OutputSink
'delta_index' => $deltaIndex,
]),
'dedupe_key' => "run:{$runId}:agent:delta:{$deltaIndex}",
'seq' => 0, // delta 消息不需要真实的 seq
'seq' => $this->messageSequence->nextForSession($session),
'created_at' => now(),
]);