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

@@ -68,13 +68,22 @@ class ChatCompletionsRequestBuilder
}
$toolsSpec = $this->toolRegistry->openAiToolsSpec();
$hasToolMessages = $this->hasToolMessages($context);
// 支持 disable_tools 选项,用于在达到工具调用上限后禁用工具
$disableTools = $options['disable_tools'] ?? false;
if (! empty($toolsSpec) && ! $disableTools) {
$payload['tools'] = $toolsSpec;
$payload['tool_choice'] = $options['tool_choice'] ?? $this->toolChoice ?? 'auto';
if (! empty($toolsSpec)) {
if ($disableTools) {
$payload['tool_choice'] = 'none';
if ($hasToolMessages) {
// 历史包含工具消息时仍需携带 tools 定义以满足接口校验
$payload['tools'] = $toolsSpec;
}
} else {
$payload['tools'] = $toolsSpec;
$payload['tool_choice'] = $options['tool_choice'] ?? $this->toolChoice ?? 'auto';
}
}
return $payload;
@@ -219,4 +228,16 @@ class ChatCompletionsRequestBuilder
'content' => $resultContent,
];
}
private function hasToolMessages(AgentContext $context): bool
{
foreach ($context->messages as $message) {
$type = (string) ($message['type'] ?? '');
if ($type === 'tool.call' || $type === 'tool.result') {
return true;
}
}
return false;
}
}